rep init
This commit is contained in:
commit
9767c6bddc
22 changed files with 551 additions and 0 deletions
17
.vscode/launch.json
vendored
Normal file
17
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Listen for Xdebug in Docker Container",
|
||||
"type": "php",
|
||||
"request": "launch",
|
||||
"port": 9003,
|
||||
"pathMappings": {
|
||||
"/app":"${workspaceFolder}/app"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
11
Dockerfile
Normal file
11
Dockerfile
Normal file
|
@ -0,0 +1,11 @@
|
|||
FROM php:fpm
|
||||
|
||||
RUN apt-get update
|
||||
RUN docker-php-ext-install pdo pdo_mysql
|
||||
|
||||
RUN docker-php-ext-enable pdo pdo_mysql
|
||||
|
||||
RUN pecl install xdebug
|
||||
RUN docker-php-ext-enable xdebug
|
||||
|
||||
COPY ./php-extensions /usr/local/etc/php/conf.d/
|
33
README.md
Normal file
33
README.md
Normal file
|
@ -0,0 +1,33 @@
|
|||
# How to use
|
||||
|
||||
To use this template for a project you need to open this folder as a workspace in VSCode.
|
||||
After this use the following command in the terminal while you are in the workspace directory:
|
||||
|
||||
docker compose up --build -d
|
||||
|
||||
There is also a MYSQL database in here which can be safely deleted from the docker-compose.yaml if it is not needed.
|
||||
|
||||
# Configure NGINX or PHP
|
||||
|
||||
If you want or need to configure PHP or NGINX you can edit their respective config files.
|
||||
All PHP configs are nestled under php-extensions and loaded in as config extensions.
|
||||
If you create an already existing config in there it will overwrite the normal config in the container.
|
||||
|
||||
The NGINX configuration is the file labeled "default.conf"
|
||||
|
||||
# Add new extensions to PHP
|
||||
|
||||
If you need to add a PDO driver or other extension to your PHP Container you can do so
|
||||
in the Dockerfile by adding a new RUN command for the installation and one for the activation.
|
||||
|
||||
You can see examples of that in the file, there is also the possibility of adding a extension from PECL,
|
||||
but this is not supported by examples ATM.
|
||||
|
||||
After doing any of this it is recommended to use the command "docker compose down" and start it again as seen above.
|
||||
|
||||
# How to Debug in VSCODE
|
||||
|
||||
Thanks to the included launch.json you just need to start the only run-config there is.
|
||||
All edits and additions to /app/public will immediatly be mirrored in the container via a BIND mount.
|
||||
So there is no need to restart the docker compose command.
|
||||
|
1
app/public/assets/brand/bootstrap-logo-white.svg
Normal file
1
app/public/assets/brand/bootstrap-logo-white.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="408" fill="#fff"><path d="M106.342 0c-29.214 0-50.827 25.58-49.86 53.32.927 26.647-.278 61.165-8.966 89.31C38.802 170.862 24.07 188.707 0 191v26c24.069 2.293 38.802 20.138 47.516 48.37 8.688 28.145 9.893 62.663 8.965 89.311C55.515 382.42 77.128 408 106.342 408h299.353c29.214 0 50.827-25.58 49.861-53.319-.928-26.648.277-61.166 8.964-89.311 8.715-28.232 23.411-46.077 47.48-48.37v-26c-24.069-2.293-38.765-20.138-47.48-48.37-8.687-28.145-9.892-62.663-8.964-89.31C456.522 25.58 434.909 0 405.695 0H106.342zm236.559 251.102c0 38.197-28.501 61.355-75.798 61.355h-87.202a2 2 0 01-2-2v-213a2 2 0 012-2h86.74c39.439 0 65.322 21.354 65.322 54.138 0 23.008-17.409 43.61-39.594 47.219v1.203c30.196 3.309 50.532 24.212 50.532 53.085zm-84.58-128.125h-45.91v64.814h38.669c29.888 0 46.373-12.03 46.373-33.535 0-20.151-14.174-31.279-39.132-31.279zm-45.91 90.53v71.431h47.605c31.12 0 47.605-12.482 47.605-35.941 0-23.46-16.947-35.49-49.608-35.49h-45.602z"/></svg>
|
After Width: | Height: | Size: 1,007 B |
1
app/public/assets/brand/bootstrap-logo.svg
Normal file
1
app/public/assets/brand/bootstrap-logo.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="408"><defs><linearGradient id="bs-logo-a" x1="76.079" x2="523.48" y1="10.798" y2="365.945" gradientUnits="userSpaceOnUse"><stop stop-color="#9013fe"/><stop offset="1" stop-color="#6610f2"/></linearGradient><linearGradient id="bs-logo-b" x1="193.508" x2="293.514" y1="109.74" y2="278.872" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#f1e5fc"/></linearGradient><filter xmlns="http://www.w3.org/2000/svg" id="bs-logo-c" width="197" height="249" x="161.901" y="83.457" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset dy="4"/><feGaussianBlur stdDeviation="8"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs><path fill="url(#bs-logo-a)" d="M56.481 53.32C55.515 25.58 77.128 0 106.342 0h299.353c29.214 0 50.827 25.58 49.861 53.32-.928 26.647.277 61.165 8.964 89.31 8.715 28.232 23.411 46.077 47.48 48.37v26c-24.069 2.293-38.765 20.138-47.48 48.37-8.687 28.145-9.892 62.663-8.964 89.311.966 27.739-20.647 53.319-49.861 53.319H106.342c-29.214 0-50.827-25.58-49.86-53.319.927-26.648-.278-61.166-8.966-89.311C38.802 237.138 24.07 219.293 0 217v-26c24.069-2.293 38.802-20.138 47.516-48.37 8.688-28.145 9.893-62.663 8.965-89.31z"/><path fill="url(#bs-logo-b)" filter="url(#bs-logo-c)" stroke="#fff" d="M267.103 312.457c47.297 0 75.798-23.158 75.798-61.355 0-28.873-20.336-49.776-50.532-53.085v-1.203c22.185-3.609 39.594-24.211 39.594-47.219 0-32.783-25.882-54.138-65.322-54.138h-88.74v217h89.202zm-54.692-189.48h45.911c24.958 0 39.131 11.128 39.131 31.279 0 21.505-16.484 33.535-46.372 33.535h-38.67v-64.814zm0 161.961v-71.431h45.602c32.661 0 49.608 12.03 49.608 35.49 0 23.459-16.484 35.941-47.605 35.941h-47.605z"/></svg>
|
After Width: | Height: | Size: 2 KiB |
6
app/public/assets/dist/css/bootstrap.min.css
vendored
Normal file
6
app/public/assets/dist/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
app/public/assets/dist/css/bootstrap.min.css.map
vendored
Normal file
1
app/public/assets/dist/css/bootstrap.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
6
app/public/assets/dist/css/bootstrap.rtl.min.css
vendored
Normal file
6
app/public/assets/dist/css/bootstrap.rtl.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
app/public/assets/dist/css/bootstrap.rtl.min.css.map
vendored
Normal file
1
app/public/assets/dist/css/bootstrap.rtl.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
7
app/public/assets/dist/js/bootstrap.bundle.min.js
vendored
Normal file
7
app/public/assets/dist/js/bootstrap.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
app/public/assets/dist/js/bootstrap.bundle.min.js.map
vendored
Normal file
1
app/public/assets/dist/js/bootstrap.bundle.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
80
app/public/assets/js/color-modes.js
Normal file
80
app/public/assets/js/color-modes.js
Normal file
|
@ -0,0 +1,80 @@
|
|||
/*!
|
||||
* Color mode toggler for Bootstrap's docs (https://getbootstrap.com/)
|
||||
* Copyright 2011-2023 The Bootstrap Authors
|
||||
* Licensed under the Creative Commons Attribution 3.0 Unported License.
|
||||
*/
|
||||
|
||||
(() => {
|
||||
'use strict'
|
||||
|
||||
const getStoredTheme = () => localStorage.getItem('theme')
|
||||
const setStoredTheme = theme => localStorage.setItem('theme', theme)
|
||||
|
||||
const getPreferredTheme = () => {
|
||||
const storedTheme = getStoredTheme()
|
||||
if (storedTheme) {
|
||||
return storedTheme
|
||||
}
|
||||
|
||||
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
|
||||
}
|
||||
|
||||
const setTheme = theme => {
|
||||
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
document.documentElement.setAttribute('data-bs-theme', 'dark')
|
||||
} else {
|
||||
document.documentElement.setAttribute('data-bs-theme', theme)
|
||||
}
|
||||
}
|
||||
|
||||
setTheme(getPreferredTheme())
|
||||
|
||||
const showActiveTheme = (theme, focus = false) => {
|
||||
const themeSwitcher = document.querySelector('#bd-theme')
|
||||
|
||||
if (!themeSwitcher) {
|
||||
return
|
||||
}
|
||||
|
||||
const themeSwitcherText = document.querySelector('#bd-theme-text')
|
||||
const activeThemeIcon = document.querySelector('.theme-icon-active use')
|
||||
const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`)
|
||||
const svgOfActiveBtn = btnToActive.querySelector('svg use').getAttribute('href')
|
||||
|
||||
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
|
||||
element.classList.remove('active')
|
||||
element.setAttribute('aria-pressed', 'false')
|
||||
})
|
||||
|
||||
btnToActive.classList.add('active')
|
||||
btnToActive.setAttribute('aria-pressed', 'true')
|
||||
activeThemeIcon.setAttribute('href', svgOfActiveBtn)
|
||||
const themeSwitcherLabel = `${themeSwitcherText.textContent} (${btnToActive.dataset.bsThemeValue})`
|
||||
themeSwitcher.setAttribute('aria-label', themeSwitcherLabel)
|
||||
|
||||
if (focus) {
|
||||
themeSwitcher.focus()
|
||||
}
|
||||
}
|
||||
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
|
||||
const storedTheme = getStoredTheme()
|
||||
if (storedTheme !== 'light' && storedTheme !== 'dark') {
|
||||
setTheme(getPreferredTheme())
|
||||
}
|
||||
})
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
showActiveTheme(getPreferredTheme())
|
||||
|
||||
document.querySelectorAll('[data-bs-theme-value]')
|
||||
.forEach(toggle => {
|
||||
toggle.addEventListener('click', () => {
|
||||
const theme = toggle.getAttribute('data-bs-theme-value')
|
||||
setStoredTheme(theme)
|
||||
setTheme(theme)
|
||||
showActiveTheme(theme, true)
|
||||
})
|
||||
})
|
||||
})
|
||||
})()
|
17
app/public/function/conf.inc.php
Normal file
17
app/public/function/conf.inc.php
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/*
|
||||
Ajmi Yasmin, 13.02.2024
|
||||
Verbindung DB und Schema
|
||||
*/
|
||||
|
||||
try{
|
||||
$server = 'db'; //Port der DB, standard 3306, kann auch weggelassen werden
|
||||
$user = 'root';
|
||||
$pwd = 'ALEPH';
|
||||
$schema = 'school';
|
||||
|
||||
$con = new PDO('mysql:host='.$server.';dbname='.$schema.';charset=utf8', $user, $pwd);
|
||||
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
}catch(Exception $e){
|
||||
echo $e->getCode().': '.$e->getMessage();
|
||||
}
|
68
app/public/function/function.php
Normal file
68
app/public/function/function.php
Normal file
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
/*
|
||||
Ajmi Yasmin, 13.02.2024
|
||||
Funktionen/Prozeduren
|
||||
*/
|
||||
|
||||
function getSite($site){
|
||||
if(isset($_GET['site'])){
|
||||
include_once('sites/'.$_GET['site'].'.php');
|
||||
}else{
|
||||
include_once('sites/'.$site.'.php');
|
||||
}
|
||||
}
|
||||
|
||||
function makeStatment($query, $params = null) {
|
||||
try {
|
||||
global $con;
|
||||
$stmt = $con->prepare($query);
|
||||
$stmt->execute($params);
|
||||
return $stmt;
|
||||
} catch (Exception $e) {
|
||||
return $e;
|
||||
}
|
||||
}
|
||||
|
||||
function makeTable($query, $params = null)
|
||||
{
|
||||
$stmt = makeStatment($query, $params);
|
||||
if($stmt instanceof Exception) {
|
||||
echo ''. $stmt->getMessage() .'';
|
||||
} else {
|
||||
// Tabelle erstellen
|
||||
$meta = array();
|
||||
//Spaltenüberschribt dynamisch
|
||||
echo '<table class="table">
|
||||
<tr>';
|
||||
|
||||
|
||||
for ($i=0; $i < $stmt->columnCount(); $i++) {
|
||||
$meta[] = $stmt->getColumnMeta($i);
|
||||
echo '<th>'.$meta[$i]['name'].'</th>';
|
||||
}
|
||||
|
||||
echo '</tr>';
|
||||
|
||||
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
||||
echo'<tr>';
|
||||
foreach ($row as $r) {
|
||||
echo '<td>'.$r.'</td>';
|
||||
}
|
||||
echo '</tr>';
|
||||
}
|
||||
|
||||
echo '</table>';
|
||||
}
|
||||
}
|
||||
|
||||
function insertInto($tablename, $columnlist, $valuelist) {
|
||||
global $con;
|
||||
$query = 'INSERT INTO '.$tablename.' ('.implode(',',$columnlist).') VALUES(?)';
|
||||
$params = array(implode(',', $valuelist));
|
||||
$stmt = makeStatment($query, $params);
|
||||
if($stmt instanceof Exception) {
|
||||
return $stmt;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
195
app/public/index.php
Normal file
195
app/public/index.php
Normal file
|
@ -0,0 +1,195 @@
|
|||
<!doctype html>
|
||||
<html lang="en" data-bs-theme="auto">
|
||||
<head><script src="assets/js/color-modes.js"></script>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
|
||||
<meta name="generator" content="Hugo 0.118.2">
|
||||
<title>Fixed top navbar example · Bootstrap v5.3</title>
|
||||
|
||||
<link rel="canonical" href="https://getbootstrap.com/docs/5.3/examples/navbar-fixed/">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@docsearch/css@3">
|
||||
|
||||
<link href="assets/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<style>
|
||||
.bd-placeholder-img {
|
||||
font-size: 1.125rem;
|
||||
text-anchor: middle;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.bd-placeholder-img-lg {
|
||||
font-size: 3.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.b-example-divider {
|
||||
width: 100%;
|
||||
height: 3rem;
|
||||
background-color: rgba(0, 0, 0, .1);
|
||||
border: solid rgba(0, 0, 0, .15);
|
||||
border-width: 1px 0;
|
||||
box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15);
|
||||
}
|
||||
|
||||
.b-example-vr {
|
||||
flex-shrink: 0;
|
||||
width: 1.5rem;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
.bi {
|
||||
vertical-align: -.125em;
|
||||
fill: currentColor;
|
||||
}
|
||||
|
||||
.nav-scroller {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
height: 2.75rem;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
.nav-scroller .nav {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
padding-bottom: 1rem;
|
||||
margin-top: -1px;
|
||||
overflow-x: auto;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
.btn-bd-primary {
|
||||
--bd-violet-bg: #712cf9;
|
||||
--bd-violet-rgb: 112.520718, 44.062154, 249.437846;
|
||||
|
||||
--bs-btn-font-weight: 600;
|
||||
--bs-btn-color: var(--bs-white);
|
||||
--bs-btn-bg: var(--bd-violet-bg);
|
||||
--bs-btn-border-color: var(--bd-violet-bg);
|
||||
--bs-btn-hover-color: var(--bs-white);
|
||||
--bs-btn-hover-bg: #6528e0;
|
||||
--bs-btn-hover-border-color: #6528e0;
|
||||
--bs-btn-focus-shadow-rgb: var(--bd-violet-rgb);
|
||||
--bs-btn-active-color: var(--bs-btn-hover-color);
|
||||
--bs-btn-active-bg: #5a23c8;
|
||||
--bs-btn-active-border-color: #5a23c8;
|
||||
}
|
||||
|
||||
.bd-mode-toggle {
|
||||
z-index: 1500;
|
||||
}
|
||||
|
||||
.bd-mode-toggle .dropdown-menu .active .bi {
|
||||
display: block !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<!-- Custom styles for this template -->
|
||||
<link href="navbar-fixed.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="d-none">
|
||||
<symbol id="check2" viewBox="0 0 16 16">
|
||||
<path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z"/>
|
||||
</symbol>
|
||||
<symbol id="circle-half" viewBox="0 0 16 16">
|
||||
<path d="M8 15A7 7 0 1 0 8 1v14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
|
||||
</symbol>
|
||||
<symbol id="moon-stars-fill" viewBox="0 0 16 16">
|
||||
<path d="M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278z"/>
|
||||
<path d="M10.794 3.148a.217.217 0 0 1 .412 0l.387 1.162c.173.518.579.924 1.097 1.097l1.162.387a.217.217 0 0 1 0 .412l-1.162.387a1.734 1.734 0 0 0-1.097 1.097l-.387 1.162a.217.217 0 0 1-.412 0l-.387-1.162A1.734 1.734 0 0 0 9.31 6.593l-1.162-.387a.217.217 0 0 1 0-.412l1.162-.387a1.734 1.734 0 0 0 1.097-1.097l.387-1.162zM13.863.099a.145.145 0 0 1 .274 0l.258.774c.115.346.386.617.732.732l.774.258a.145.145 0 0 1 0 .274l-.774.258a1.156 1.156 0 0 0-.732.732l-.258.774a.145.145 0 0 1-.274 0l-.258-.774a1.156 1.156 0 0 0-.732-.732l-.774-.258a.145.145 0 0 1 0-.274l.774-.258c.346-.115.617-.386.732-.732L13.863.1z"/>
|
||||
</symbol>
|
||||
<symbol id="sun-fill" viewBox="0 0 16 16">
|
||||
<path d="M8 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0zm0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13zm8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5zM3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8zm10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0zm-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0zm9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707zM4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708z"/>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<div class="dropdown position-fixed bottom-0 end-0 mb-3 me-3 bd-mode-toggle">
|
||||
<button class="btn btn-bd-primary py-2 dropdown-toggle d-flex align-items-center"
|
||||
id="bd-theme"
|
||||
type="button"
|
||||
aria-expanded="false"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-label="Toggle theme (auto)">
|
||||
<svg class="bi my-1 theme-icon-active" width="1em" height="1em"><use href="#circle-half"></use></svg>
|
||||
<span class="visually-hidden" id="bd-theme-text">Toggle theme</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end shadow" aria-labelledby="bd-theme-text">
|
||||
<li>
|
||||
<button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="light" aria-pressed="false">
|
||||
<svg class="bi me-2 opacity-50 theme-icon" width="1em" height="1em"><use href="#sun-fill"></use></svg>
|
||||
Light
|
||||
<svg class="bi ms-auto d-none" width="1em" height="1em"><use href="#check2"></use></svg>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="dark" aria-pressed="false">
|
||||
<svg class="bi me-2 opacity-50 theme-icon" width="1em" height="1em"><use href="#moon-stars-fill"></use></svg>
|
||||
Dark
|
||||
<svg class="bi ms-auto d-none" width="1em" height="1em"><use href="#check2"></use></svg>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="dropdown-item d-flex align-items-center active" data-bs-theme-value="auto" aria-pressed="true">
|
||||
<svg class="bi me-2 opacity-50 theme-icon" width="1em" height="1em"><use href="#circle-half"></use></svg>
|
||||
Auto
|
||||
<svg class="bi ms-auto d-none" width="1em" height="1em"><use href="#check2"></use></svg>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand" href="#">Schema test school</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarCollapse">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-md-0">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" aria-current="page" href="index.php?site=home">Home</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="index.php?site=tableclass">Schultables</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="index.php?site=addclass">Klasse erfassen</a>
|
||||
</li>
|
||||
</ul>
|
||||
<form class="d-flex" role="search">
|
||||
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
|
||||
<button class="btn btn-outline-success" type="submit">Search</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="container">
|
||||
<div class="bg-body-tertiary p-5 rounded">
|
||||
<?php
|
||||
include_once('function/conf.inc.php');
|
||||
include_once('function/function.php');
|
||||
getSite('home');
|
||||
?>
|
||||
|
||||
</div>
|
||||
</main>
|
||||
<script src="assets/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
5
app/public/navbar-fixed.css
Normal file
5
app/public/navbar-fixed.css
Normal file
|
@ -0,0 +1,5 @@
|
|||
/* Show it is fixed to the top */
|
||||
body {
|
||||
min-height: 75rem;
|
||||
padding-top: 4.5rem;
|
||||
}
|
32
app/public/sites/addclass.php
Normal file
32
app/public/sites/addclass.php
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
if(array_key_exists('class_name', $_GET)) {
|
||||
if ($_GET['class_name'] != null) {
|
||||
$result = insertInto('school_class', array('sccl_name'), array($_GET['class_name']));
|
||||
if($result == true && !($result instanceof Exception)) {
|
||||
echo '<div class="alert alert-success">Succesfully inserted the class "'.$_GET['class_name'].'"</div>';
|
||||
} else {
|
||||
echo '<div class="alert alert-danger">Failed to insert the class. Please check if it is unique "'.$_GET['class_name'].'"</div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<h1>Klasse erfassen: </h1>
|
||||
<form action="index.php" method="GET">
|
||||
<div class="form-group row">
|
||||
<label for="class_name" class="col-4 col-form-label">Klassen Name</label>
|
||||
<div class="col-8">
|
||||
<div class="input-group">
|
||||
<input id="class_name" name="class_name" placeholder="4bAPC" type="text" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" id="site" name="site" value="addclass">
|
||||
<div class="form-group row">
|
||||
<div class="offset-4 col-8">
|
||||
<button name="submit" type="submit" class="btn btn-primary">Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
5
app/public/sites/home.php
Normal file
5
app/public/sites/home.php
Normal file
|
@ -0,0 +1,5 @@
|
|||
<h1>Wilkommen</h1>
|
||||
<p>
|
||||
Das ist die Startseite <br>
|
||||
Insert non-filler text here
|
||||
</p>
|
14
app/public/sites/tableclass.php
Normal file
14
app/public/sites/tableclass.php
Normal file
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
echo '<h1> Schulklassen </h1>';
|
||||
|
||||
$query = 'select * from school_class';
|
||||
makeTable($query);
|
||||
|
||||
$query = 'SELECT sccl_name
|
||||
FROM school_class
|
||||
where sccl_name like ?';
|
||||
|
||||
$searchValue = '4';
|
||||
$searchValue = '%'.$searchValue.'%';
|
||||
makeTable($query, array($searchValue));
|
16
default.conf
Normal file
16
default.conf
Normal file
|
@ -0,0 +1,16 @@
|
|||
server {
|
||||
listen 80 default_server;
|
||||
root /app/public;
|
||||
|
||||
index index.php index.html index.htm;
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_pass php:9000;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
include fastcgi_params;
|
||||
}
|
||||
proxy_send_timeout 9999s;
|
||||
proxy_read_timeout 9999s;
|
||||
fastcgi_send_timeout 9999s;
|
||||
fastcgi_read_timeout 9999s;
|
||||
}
|
28
docker-compose.yaml
Normal file
28
docker-compose.yaml
Normal file
|
@ -0,0 +1,28 @@
|
|||
services:
|
||||
webserver:
|
||||
image: nginx:latest
|
||||
ports:
|
||||
- 8080:80
|
||||
volumes:
|
||||
- ./default.conf:/etc/nginx/conf.d/default.conf
|
||||
- ./app:/app
|
||||
db:
|
||||
image: mysql:latest
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=ALEPH
|
||||
ports:
|
||||
- 3307:3306
|
||||
php:
|
||||
build: .
|
||||
ports:
|
||||
- 9000:9000
|
||||
- 9003:9003
|
||||
volumes:
|
||||
- ./app:/app
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
environment:
|
||||
XDEBUG_MODE: develop,debug
|
||||
XDEBUG_CONFIG:
|
||||
client_host=host.docker.internal
|
||||
start_with_request=yes
|
6
php-extensions/docker-php-ext-xdebug.ini
Normal file
6
php-extensions/docker-php-ext-xdebug.ini
Normal file
|
@ -0,0 +1,6 @@
|
|||
zend_extension=xdebug
|
||||
xdebug.mode=develop,debug
|
||||
xdebug.start_with_request=yes
|
||||
xdebug.remote_port=9003
|
||||
xdebug.client_port=9003
|
||||
xdebug.remote_host=host.docker.internal
|
Loading…
Add table
Add a link
Reference in a new issue