Compare commits

...

2 Commits

Author SHA1 Message Date
58472b28ca neues Submodule 2026-03-23 23:41:51 +01:00
122af4aa54 Hintergrundverwaltung und leere Hüllen; neuaufsetzen submodule 2026-03-23 23:40:20 +01:00
32 changed files with 32014 additions and 43 deletions

4
.gitmodules vendored
View File

@@ -1,3 +1,3 @@
[submodule "resources/docs"]
path = resources/docs
[submodule "public/Dokumente"]
path = public/Dokumente
url = ssh://git@git.chaospott.de:2222/c3gov/docs.git

2340
.phpstorm.meta.php Normal file

File diff suppressed because it is too large Load Diff

28856
_ide_helper.php Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,74 @@
<?php
namespace App\Http\Controllers;
use App\Models\RegisterToken;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
class LoginController extends Controller
{
//
public function register(Request $request){
// messageStatus success|failure|not permitted
$json = ["messageStatus" => "failure", "errorMessage" => "idk"];
$mail = $request->input('mail');
$username = $request->input('username');
$password = Hash::make($request->input('password'));
$token = $request->input('token');
if(preg_match('/@c3gov\.de$/', $mail) != 1){
return ["messageStatus" => "not permitted", "errorMessage" => ""];
}
$rt = RegisterToken::where('token', $token)->first();
if($rt) {
$u = User::whereEmail($mail)->first();
if($u) {
return ["messageStatus" => "failure", "errorMessage" => "Diese elektronische Postadresse wird bereits verwendet."];
}
try {
$u = new User();
$u->name = $username;
$u->email = $mail;
$u->email_verified_at = now();
$u->password = $password;
$u->save();
$rt->delete();
} catch (\Exception $e) {
return ["messageStatus" => "failure", "errorMessage" => $e->getMessage()];
}
} else {
return ["messageStatus" => "failure", "errorMessage" => "Machen Sie die Musik aus."];
}
return ["messageStatus" => "success", "errorMessage" => ""];
}
public function login(Request $request){
$mail = $request->input('mail');
$password = $request->input('password');
$u = User::whereEmail($mail)->first();
if($u){
$u_pw = $u->password;
if(Hash::check($password, $u_pw)){
Auth::login($u);
return ["messageStatus" => "success", "errorMessage" => ""];
} else {
return ["messageStatus" => "failure", "errorMessage" => "Falsch. Einfach nur falsch."];
}
} else {
return ["messageStatus" => "failure", "errorMessage" => "Falsch. Einfach nur falsch."];
}
}
}

View File

@@ -5,9 +5,15 @@ namespace App\Http\Controllers;
use App\Models\TickerMessages;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;
class TickerController extends Controller
{
public function showEditTicker(){
}
public static function getTicker(){
$t = "";
foreach(TickerMessages::getMessages(App::getLocale())->get() as $message){

View File

@@ -4,11 +4,13 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;
class WebsiteController extends Controller
{
public function __construct(){
public function __construct()
{
$this->setLang($_COOKIE['lang'] ?? 'de');
}
@@ -22,9 +24,52 @@ class WebsiteController extends Controller
}
//
public function index(Request $request){
public function index(Request $request)
{
return view('content.index');
}
public function about(Request $request){
return view('content.about');
}
public function contact(Request $request){
return view('content.contact');
}
public function imprint(Request $request){
return view('content.imprint');
}
public function news(Request $request){
return view('content.news');
}
public function services(Request $request){
return view('content.services');
}
return view('layout.app', ['page' => 'content.index']);
// c3gov-Stuffs
public function showRegister()
{
return view('login.register');
}
public function showLogin()
{
return view('login.login');
}
public function editTicker(){
if(Auth::check()){
return view('ticker.edit');
}
abort(404);
}
public function editNews(){
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* @method static \Illuminate\Database\Eloquent\Builder<static>|RegisterToken newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|RegisterToken newQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|RegisterToken query()
* @mixin \Eloquent
*/
class RegisterToken extends Model
{
protected $table = 'register_tokens';
protected $primaryKey = 'token';
public $incrementing = false;
public $timestamps = false;
}

View File

@@ -4,6 +4,22 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* @property int $id
* @property string $language
* @property string $message
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder<static>|TickerMessages newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|TickerMessages newQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|TickerMessages query()
* @method static \Illuminate\Database\Eloquent\Builder<static>|TickerMessages whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|TickerMessages whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|TickerMessages whereLanguage($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|TickerMessages whereMessage($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|TickerMessages whereUpdatedAt($value)
* @mixin \Eloquent
*/
class TickerMessages extends Model
{
//

View File

@@ -10,6 +10,31 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
/**
* @property int $id
* @property string $name
* @property string $email
* @property \Illuminate\Support\Carbon|null $email_verified_at
* @property string $password
* @property string|null $remember_token
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Notifications\DatabaseNotificationCollection<int, \Illuminate\Notifications\DatabaseNotification> $notifications
* @property-read int|null $notifications_count
* @method static \Database\Factories\UserFactory factory($count = null, $state = [])
* @method static \Illuminate\Database\Eloquent\Builder<static>|User newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|User newQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|User query()
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereEmail($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereEmailVerifiedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|User wherePassword($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereRememberToken($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|User whereUpdatedAt($value)
* @mixin \Eloquent
*/
#[Fillable(['name', 'email', 'password'])]
#[Hidden(['password', 'remember_token'])]
class User extends Authenticatable

View File

@@ -14,6 +14,7 @@
"laravel/tinker": "^3.0"
},
"require-dev": {
"barryvdh/laravel-ide-helper": "^3.7",
"fakerphp/faker": "^1.23",
"laravel/pail": "^1.2.5",
"laravel/pint": "^1.27",

297
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "91e8e1dfc8379caaf1c302443d694dfa",
"content-hash": "41c3f2f807c63a47595eaa4e14742655",
"packages": [
{
"name": "brick/math",
@@ -5881,6 +5881,153 @@
}
],
"packages-dev": [
{
"name": "barryvdh/laravel-ide-helper",
"version": "v3.7.0",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-ide-helper.git",
"reference": "ad7e37676f1ff985d55ef1b6b96a0c0a40f2609a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/ad7e37676f1ff985d55ef1b6b96a0c0a40f2609a",
"reference": "ad7e37676f1ff985d55ef1b6b96a0c0a40f2609a",
"shasum": ""
},
"require": {
"barryvdh/reflection-docblock": "^2.4",
"composer/class-map-generator": "^1.0",
"ext-json": "*",
"illuminate/console": "^11.15 || ^12 || ^13.0",
"illuminate/database": "^11.15 || ^12 || ^13.0",
"illuminate/filesystem": "^11.15 || ^12 || ^13.0",
"illuminate/support": "^11.15 || ^12 || ^13.0",
"php": "^8.2"
},
"require-dev": {
"ext-pdo_sqlite": "*",
"friendsofphp/php-cs-fixer": "^3",
"illuminate/config": "^11.15 || ^12 || ^13.0",
"illuminate/view": "^11.15 || ^12 || ^13.0",
"larastan/larastan": "^3.1",
"mockery/mockery": "^1.4",
"orchestra/testbench": "^9.2 || ^10 || ^11.0",
"phpstan/phpstan-phpunit": "^2.0",
"phpunit/phpunit": "^10.5 || ^11.5.3 || ^12.5.12",
"spatie/phpunit-snapshot-assertions": "^4 || ^5",
"vlucas/phpdotenv": "^5"
},
"suggest": {
"illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10|^11)."
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider"
]
},
"branch-alias": {
"dev-master": "3.6-dev"
}
},
"autoload": {
"psr-4": {
"Barryvdh\\LaravelIdeHelper\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Barry vd. Heuvel",
"email": "barryvdh@gmail.com"
}
],
"description": "Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.",
"keywords": [
"autocomplete",
"codeintel",
"dev",
"helper",
"ide",
"laravel",
"netbeans",
"phpdoc",
"phpstorm",
"sublime"
],
"support": {
"issues": "https://github.com/barryvdh/laravel-ide-helper/issues",
"source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.7.0"
},
"funding": [
{
"url": "https://fruitcake.nl",
"type": "custom"
},
{
"url": "https://github.com/barryvdh",
"type": "github"
}
],
"time": "2026-03-17T14:12:51+00:00"
},
{
"name": "barryvdh/reflection-docblock",
"version": "v2.4.1",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/ReflectionDocBlock.git",
"reference": "4f5ba70c30c81f2ce03a16a9965832cfcc31ed3b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/4f5ba70c30c81f2ce03a16a9965832cfcc31ed3b",
"reference": "4f5ba70c30c81f2ce03a16a9965832cfcc31ed3b",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"require-dev": {
"phpunit/phpunit": "^8.5.14|^9"
},
"suggest": {
"dflydev/markdown": "~1.0",
"erusev/parsedown": "~1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3.x-dev"
}
},
"autoload": {
"psr-0": {
"Barryvdh": [
"src/"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mike van Riel",
"email": "mike.vanriel@naenius.com"
}
],
"support": {
"source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.4.1"
},
"time": "2026-03-05T20:09:01+00:00"
},
{
"name": "brianium/paratest",
"version": "v7.19.2",
@@ -5974,6 +6121,154 @@
],
"time": "2026-03-09T14:33:17+00:00"
},
{
"name": "composer/class-map-generator",
"version": "1.7.1",
"source": {
"type": "git",
"url": "https://github.com/composer/class-map-generator.git",
"reference": "8f5fa3cc214230e71f54924bd0197a3bcc705eb1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/class-map-generator/zipball/8f5fa3cc214230e71f54924bd0197a3bcc705eb1",
"reference": "8f5fa3cc214230e71f54924bd0197a3bcc705eb1",
"shasum": ""
},
"require": {
"composer/pcre": "^2.1 || ^3.1",
"php": "^7.2 || ^8.0",
"symfony/finder": "^4.4 || ^5.3 || ^6 || ^7 || ^8"
},
"require-dev": {
"phpstan/phpstan": "^1.12 || ^2",
"phpstan/phpstan-deprecation-rules": "^1 || ^2",
"phpstan/phpstan-phpunit": "^1 || ^2",
"phpstan/phpstan-strict-rules": "^1.1 || ^2",
"phpunit/phpunit": "^8",
"symfony/filesystem": "^5.4 || ^6 || ^7 || ^8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\ClassMapGenerator\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "https://seld.be"
}
],
"description": "Utilities to scan PHP code and generate class maps.",
"keywords": [
"classmap"
],
"support": {
"issues": "https://github.com/composer/class-map-generator/issues",
"source": "https://github.com/composer/class-map-generator/tree/1.7.1"
},
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
}
],
"time": "2025-12-29T13:15:25+00:00"
},
{
"name": "composer/pcre",
"version": "3.3.2",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
"reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
"reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0"
},
"conflict": {
"phpstan/phpstan": "<1.11.10"
},
"require-dev": {
"phpstan/phpstan": "^1.12 || ^2",
"phpstan/phpstan-strict-rules": "^1 || ^2",
"phpunit/phpunit": "^8 || ^9"
},
"type": "library",
"extra": {
"phpstan": {
"includes": [
"extension.neon"
]
},
"branch-alias": {
"dev-main": "3.x-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\Pcre\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
}
],
"description": "PCRE wrapping library that offers type-safe preg_* replacements.",
"keywords": [
"PCRE",
"preg",
"regex",
"regular expression"
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
"source": "https://github.com/composer/pcre/tree/3.3.2"
},
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2024-11-12T16:29:46+00:00"
},
{
"name": "doctrine/deprecations",
"version": "1.1.6",

View File

@@ -0,0 +1,26 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('register_tokens', function (Blueprint $table) {
$table->string('token')->primary();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('register_tokens');
}
};

View File

@@ -4,6 +4,8 @@ return [
'subtitle' => 'Ihr Amt für Reisepass-Angelegenheiten in der Bezirksregion CCC.',
'logo' => 'Offizielles Logo des c3gov',
'banner' => 'Banner. Abgebildet ist die c3gov-Verwaltungsvorschrift, ein Junghacker*innen-Pass und ein Hacker*innen-Reisepass.',
'signed_in_as' => 'Angemeldet als:',
'guest' => 'Gastkonto',
'language' => [
'en' => 'English',
'de' => 'Deutsch',

View File

@@ -4,6 +4,8 @@ return [
'subtitle' => 'Your office for passport document affairs within the district region CCC.',
'logo' => 'Official logo of the c3gov',
'banner' => 'Banner. The c3gov laws are seen on a sheet of paper, and two different hacker passports.',
'signed_in_as' => 'Signed in as:',
'guest' => 'Guest account',
'language' => [
'en' => 'English',
'de' => 'Deutsch',

BIN
public/Bilder/banner2.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

View File

@@ -5,6 +5,7 @@
.banner {
margin: 32px auto;
min-height: 8vh;
}
.language {
@@ -18,13 +19,24 @@
.ticker {
background-color: #0f0;
min-height: 2vh;
}
.main {
min-height: 80vh;
}
.navbar {
background-color: pink;
min-height: 80vh;
}
.content {
background-color: aqua;
min-height: 80vh;
}

2
public/js/jquery/jquery-4.0.0.min.js vendored Normal file

File diff suppressed because one or more lines are too long

39
public/js/login/login.js Normal file
View File

@@ -0,0 +1,39 @@
function setzeFehlermeldung(alertType, message){
let f = $("#fehlermeldung");
f.removeClass('alert-success').removeClass('alert-danger').removeClass('alert-primary');
f.addClass('alert-' + alertType);
f.html(message);
}
function login(){
let data = {};
data.mail = $("#mail").val();
data.password = $("#password").val();
$.ajax({
type: "POST",
url: "/intern/anmelden/einloggen",
data: data,
dataType: "json",
success: function(d){
switch(d.messageStatus){
case "success":
setzeFehlermeldung("success", "Sie wurden erfolgreich angemeldet.");
location.reload();
break;
case "failure":
setzeFehlermeldung("danger", "Es ist ein Fehler geschehen: " + d.errorMessage);
break;
case "not permitted":
setzeFehlermeldung("warning", "Sie sind nicht berechtigt diese Funktion zu nutzen.");
break;
}
},
error: function(d, status, errorThrown) {
setzeFehlermeldung("danger", "Es ist ein Fehler geschehen: " + errorThrown);
}
});
}

View File

@@ -0,0 +1,48 @@
function setzeFehlermeldung(alertType, message){
let f = $("#fehlermeldung");
f.removeClass('alert-success').removeClass('alert-danger').removeClass('alert-primary');
f.addClass('alert-' + alertType);
f.html(message);
}
function abschicken(){
let data = {};
data.mail = $("#mail").val();
data.username = $("#username").val();
data.password = $("#password").val();
data.token = $("#register_token").val();
if(data.password !== $("#password_repeat").val()) {
setzeFehlermeldung("danger", "Ihr Kennwort stimmt nicht überein.");
for(let i=0; i<Math.random() * 10; i++){
alert("Ihr Kennwort stimmt nicht überein.");
}
} else {
$.ajax({
type: "POST",
url: "/intern/registrieren/abschicken",
data: data,
dataType: "json",
success: function(d){
switch(d.messageStatus){
case "success":
setzeFehlermeldung("success", "Sie wurden erfolgreich registriert.")
break;
case "failure":
setzeFehlermeldung("danger", "Es ist ein Fehler geschehen: " + d.errorMessage);
break;
case "not permitted":
setzeFehlermeldung("warning", "Sie sind nicht berechtigt diese Funktion zu nutzen.");
break;
}
},
error: function(d, status, errorThrown) {
setzeFehlermeldung("danger", "Es ist ein Fehler geschehen: " + errorThrown);
}
});
}
}

7
public/js/ticker/edit.js Normal file
View File

@@ -0,0 +1,7 @@
function remove(lang){
}
function insert(lang){
}

View File

@@ -0,0 +1,7 @@
@extends('layout.app')
@section('scripts')
@endsection
@section('content')
@endsection

View File

@@ -0,0 +1,7 @@
@extends('layout.app')
@section('scripts')
@endsection
@section('content')
@endsection

View File

@@ -0,0 +1,7 @@
@extends('layout.app')
@section('scripts')
@endsection
@section('content')
@endsection<?php

View File

@@ -1 +1,5 @@
@extends('layout.app')
@section('content')
<h1>Guten Tag.</h1>
@endsection

View File

@@ -0,0 +1,7 @@
@extends('layout.app')
@section('scripts')
@endsection
@section('content')
@endsection

View File

@@ -0,0 +1,7 @@
@extends('layout.app')
@section('scripts')
@endsection
@section('content')
@endsection

View File

@@ -6,42 +6,54 @@
<link rel="stylesheet" href="{{ asset("css/bootstrap/bootstrap.css") }}">
<link rel="stylesheet" href="{{ asset("css/style.css") . "?rnd=" . rand(0, 1000000000) }}">
<script src="{{ asset("js/bootstrap/bootstrap.bundle.js") }}"></script>
<script src="{{ asset("js/jquery/jquery-4.0.0.min.js") }}"></script>
<script src="{{ asset("js/web.js") }}"></script>
@yield('scripts')
</head>
<body>
<span class="grid">
<span class="ticker row">
<span class="col">
<div class="grid">
<div class="ticker row">
<div class="col">
<marquee>{{\App\Http\Controllers\TickerController::getTicker()}}</marquee>
</span>
</span>
<span class="header row">
<span class="header-main col">
</div>
</div>
<div class="header row">
<div class="header-main col">
<a href="/">
<img id="logo" src="{{ asset("Bilder/logo.png") }}" alt="{{ __('app.logo') }}">
</span>
<span class="banner col-8 text-center">
<img src="{{ asset("Bilder/banner.jpg") }}" alt="{{ __("app.banner") }}">
</span>
<span class="language col">
</a>
</div>
<div class="banner col-8 text-center">
<img src="{{ asset("Bilder/banner2.gif") }}" alt="{{ __("app.banner") }}">
</div>
<div class="language col">
<img alt="{{ __('app.language.de') }}" onclick="setLanguage('de')" src="{{ asset("Bilder/deutsch.gif") }}">
<img alt="{{ __('app.language.en') }}" onclick="setLanguage('en')" src="{{ asset("Bilder/englisch.gif") }}">
</span>
</span>
<span class="main row">
<span class="navbar col-2">
<br />
{{ __('app.signed_in_as') }} {{Auth::user()->name ?? __("app.guest")}}
</div>
</div>
<div class="main row">
<div class="navbar col-2">
<ul>
<li><a href="{{ route('about') }}">{{ __('app.nav.about') }}</a></li>
<li><a href="{{ route('services') }}">{{ __('app.nav.services') }}</a></li>
<li><a href="{{ route('news') }}">{{ __('app.nav.news') }}</a></li>
<li><a href="{{ route('contact') }}">{{ __('app.nav.contact') }}</li>
<li><a href="{{ route('imprint') }}">{{ __('app.nav.imprint') }}</a></li>
@auth
<br />
<li><a href="{{ route('editTicker') }}">Ticker bearbeiten</a></li>
<li><a href="{{ route('editNews') }}">Nachrichten bearbeiten</a></li>
<li><a href="{{ route('logout') }}">Abmelden</a></li>
@endauth
</ul>
</span>
<span class="content col">
@component($page)
@endcomponent
</span>
</span>
</span>
</div>
<div class="content col">
@yield('content')
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,31 @@
@extends('layout.app')
@section('scripts')
<script src="{{ asset("js/login/login.js") }}"></script>
@endsection
@section('content')
<h1>Login</h1>
<span>
@guest
<div id="fehlermeldung" class="alert alert-primary">Bitte melden Sie sich an.</div>
<label class="form-label" for="mail">Elektronische Postadresse:</label>
<input class="form-control" type="text" id="mail" pattern="^[0-9A-Za-z+_\-]+@[0-9A-Za-z_\-]+\.[0-9A-Za-z]+$"
title="Nur echte Adressen der elektronischen Post verwenden!"/>
<label class="form-label" for="password">Kennwort:</label>
<input class="form-control" type="password" id="password">
<br/><br/>
<button onclick="login()">Anmelden</button>
@endguest
@auth
<div id="fehlermeldung" class="alert alert-success">Sie sind angemeldet.</div>
<a href="{{ route('logout') }}"><button>Abmelden</button></a>
@endauth
</span>
@endsection

View File

@@ -1,16 +1,33 @@
@extends('layout.app')
@section('scripts')
<script src="{{ asset("js/login/registrieren.js") }}"></script>
@endsection
@section('content')
<h1>Registrieren</h1>
<span class="form-control">
<label for="mail">E-Mail:</label>
<input type="text" id="mail" />
<span>
<label for="username">Benutzername:</label>
<input type="text" id="username" />
<div id="fehlermeldung" class="alert alert-primary">Bitte registrieren Sie sich.</div>
<label for="password">Kennwort:</label>
<input type="password" id="password">
<label class="form-label" for="mail">Elektronische Postadresse:</label>
<input class="form-control" type="text" id="mail" pattern="^[0-9A-Za-z+_\-]+@[0-9A-Za-z_\-]+\.[0-9A-Za-z]+$"
title="Nur echte Adressen der elektronischen Post verwenden!"/>
<label for="password_repeat">Kennwort wiederholen:</label>
<input type="password" id="password_repeat">
<label class="form-label" for="username">(Vollständiger) Name:</label>
<input class="form-control" type="text" id="username"/>
<label class="form-label" for="password">Kennwort:</label>
<input class="form-control" type="password" id="password">
<label class="form-label" for="password_repeat">Kennwort wiederholen:</label>
<input class="form-control" type="password" id="password_repeat">
<label class="form-label" for="register_token">Registrierungsnummer:</label>
<input class="form-control" type="text" id="register_token">
<br/><br/>
<button onclick="abschicken()" class="btn btn-success">Registrieren</button>
</span>
@endsection

View File

@@ -0,0 +1,44 @@
@extends('layout.app')
@section('scripts')
<script src="{{ asset("js/ticker/edit.js") }}"></script>
@endsection
@section('content')
<h1>Ticker bearbeiten</h1>
<br />
<h2>Deutsch</h2>
<label for="ticker_de">Aktive Tickernachrichten:</label>
<select class="form-control" name="ticker_de" id="ticker_de" multiple>
@foreach(\App\Models\TickerMessages::where('language', 'de')->orderBy('updated_at', 'desc')->get() as $tm)
<option value="{{$tm->id}}">{{$tm->message}}</option>
@endforeach
</select>
<br />
<button onclick="remove('de')">Ausgewählte Tickernachricht löschen</button>
<br /><br /><br />
<label for="insert_de">Tickernachricht:</label>
<input class="form-control" type="text" id="insert_de">
<br />
<button onclick="insert('de')">Tickernachricht hinzufügen</button>
<br />
<hr />
<br />
<h2>Englisch</h2>
<label for="ticker_en">Aktive Tickernachrichten:</label>
<select class="form-control" name="ticker_en" id="ticker_en" multiple>
@foreach(\App\Models\TickerMessages::where('language', 'en')->orderBy('updated_at', 'desc')->get() as $tm)
<option value="{{$tm->id}}">{{$tm->message}}</option>
@endforeach
</select>
<br />
<button onclick="remove('en')">Ausgewählte Tickernachricht löschen</button>
<br /><br /><br />
<label for="insert_en">Tickernachricht:</label>
<input class="form-control" type="text" id="insert_en">
<br />
<button onclick="insert('en')">Tickernachricht hinzufügen</button>
@endsection

View File

@@ -1,5 +1,6 @@
<?php
use App\Http\Controllers\LoginController;
use App\Http\Controllers\WebsiteController;
use Illuminate\Support\Facades\Route;
@@ -12,4 +13,16 @@ Route::get('/impressum', [WebsiteController::class, 'imprint'])->name('imprint')
Route::get('/services', [WebsiteController::class, 'services'])->name('services');
Route::get('/neuigkeiten', [WebsiteController::class, 'news'])->name('news');
Route::get('/intern/anmelden', [WebsiteController::class, 'login']);
Route::get('/intern/registrieren', [WebsiteController::class, 'showRegister']);
Route::post('/intern/registrieren/abschicken', [LoginController::class, 'register']);
Route::get('/intern/anmelden', [WebsiteController::class, 'showLogin']);
Route::post('/intern/anmelden/einloggen', [LoginController::class, 'login']);
Route::get('/intern/abmelden', function(){
Auth::logout();
return redirect("/");
})->name('logout');
Route::get('/intern/ticker', [WebsiteController::class, 'editTicker'])->name('editTicker');
Route::get('/intern/nachrichten', [WebsiteController::class, 'editNews'])->name('editNews');