Compare commits
77 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
001fe26085
|
|||
|
be53fe6a65
|
|||
|
c3bb3c56b9
|
|||
| 5c45cbab8b | |||
| 1df2ed4e04 | |||
| fd8ef94bb6 | |||
| b69e0c36e0 | |||
| 856f082bea | |||
|
9685ec3efc
|
|||
|
6d1286057a
|
|||
|
dc7cb715cc
|
|||
|
a1e9aa6b8a
|
|||
|
59305be5a6
|
|||
|
1019ef076d
|
|||
|
ac6c1cee80
|
|||
|
222dc6d274
|
|||
|
b48c689d31
|
|||
|
9cac0294cd
|
|||
|
3e5c99c3dd
|
|||
|
77b14e753e
|
|||
|
02684d2063
|
|||
| 7b37f66e86 | |||
| 15a1ea61c6 | |||
| 67ed8f6059 | |||
|
2abcf6be4f
|
|||
|
0ba3158bb4
|
|||
| 6706c7e764 | |||
|
43fd3b3b96
|
|||
|
e9213dfe18
|
|||
|
d93d3bd1d1
|
|||
|
b34bfb0a47
|
|||
|
4c94066bf9
|
|||
|
e5d970333f
|
|||
|
1a7c94ebf3
|
|||
|
aa47532e5f
|
|||
|
44eb81e99a
|
|||
| 7c3da000f9 | |||
| 04cdf3d307 | |||
|
e7adae9762
|
|||
|
7729aba416
|
|||
|
429bdcb124
|
|||
|
a99b8eb9c1
|
|||
| ba2dcb98e2 | |||
| 8f23a058dd | |||
| b33532cfcf | |||
| 58ed95abbf | |||
|
21683284b0
|
|||
|
fa74c4834f
|
|||
|
edfb2583fc
|
|||
|
e6a92213ea
|
|||
|
9bbe92d8ee
|
|||
|
f3cb4c2a5f
|
|||
| 0c2a439363 | |||
| 75f934028b | |||
|
ff25a01b8f
|
|||
|
79414e3d4a
|
|||
|
351c73778a
|
|||
| b0d7b97c46 | |||
| 2baa0dfccd | |||
|
60ef833d0a
|
|||
|
91554516d3
|
|||
|
7bf444123d
|
|||
|
ae9592902c
|
|||
|
8b39cb4dbc
|
|||
|
87c7193686
|
|||
|
58472b28ca
|
|||
|
122af4aa54
|
|||
|
a2751d4776
|
|||
|
baaf614a88
|
|||
|
9bedccb738
|
|||
|
efb3a8d813
|
|||
|
eff865587b
|
|||
|
5158b61f56
|
|||
|
d09bca6326
|
|||
|
5a5b9f7227
|
|||
|
54f6a1d235
|
|||
|
b54e28050f
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<buildpath>
|
||||
<buildpathentry kind="src" path=""/>
|
||||
<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
|
||||
</buildpath>
|
||||
@@ -0,0 +1,18 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{yml,yaml}]
|
||||
indent_size = 2
|
||||
|
||||
[compose.yaml]
|
||||
indent_size = 4
|
||||
@@ -0,0 +1,65 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
|
||||
APP_LOCALE=en
|
||||
APP_FALLBACK_LOCALE=en
|
||||
APP_FAKER_LOCALE=en_US
|
||||
|
||||
APP_MAINTENANCE_DRIVER=file
|
||||
# APP_MAINTENANCE_STORE=database
|
||||
|
||||
# PHP_CLI_SERVER_WORKERS=4
|
||||
|
||||
BCRYPT_ROUNDS=12
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_STACK=single
|
||||
LOG_DEPRECATIONS_CHANNEL=null
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=mariadb
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=internet
|
||||
DB_USERNAME=root
|
||||
DB_PASSWORD=
|
||||
|
||||
SESSION_DRIVER=database
|
||||
SESSION_LIFETIME=120
|
||||
SESSION_ENCRYPT=false
|
||||
SESSION_PATH=/
|
||||
SESSION_DOMAIN=null
|
||||
|
||||
BROADCAST_CONNECTION=log
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=database
|
||||
|
||||
CACHE_STORE=database
|
||||
# CACHE_PREFIX=
|
||||
|
||||
MEMCACHED_HOST=127.0.0.1
|
||||
|
||||
REDIS_CLIENT=phpredis
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_MAILER=log
|
||||
MAIL_SCHEME=null
|
||||
MAIL_HOST=127.0.0.1
|
||||
MAIL_PORT=2525
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_FROM_ADDRESS="hello@example.com"
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||
|
||||
VITE_APP_NAME="${APP_NAME}"
|
||||
@@ -0,0 +1,11 @@
|
||||
* text=auto eol=lf
|
||||
|
||||
*.blade.php diff=html
|
||||
*.css diff=css
|
||||
*.html diff=html
|
||||
*.md diff=markdown
|
||||
*.php diff=php
|
||||
|
||||
/.github export-ignore
|
||||
CHANGELOG.md export-ignore
|
||||
.styleci.yml export-ignore
|
||||
@@ -0,0 +1,24 @@
|
||||
*.log
|
||||
.DS_Store
|
||||
.env
|
||||
.env.backup
|
||||
.env.production
|
||||
.phpactor.json
|
||||
.phpunit.result.cache
|
||||
/.fleet
|
||||
/.idea
|
||||
/.nova
|
||||
/.phpunit.cache
|
||||
/.vscode
|
||||
/.zed
|
||||
/auth.json
|
||||
/node_modules
|
||||
/public/build
|
||||
/public/hot
|
||||
/public/storage
|
||||
/storage/*.key
|
||||
/storage/pail
|
||||
/vendor
|
||||
Homestead.json
|
||||
Homestead.yaml
|
||||
Thumbs.db
|
||||
@@ -0,0 +1,3 @@
|
||||
[submodule "public/Dokumente"]
|
||||
path = public/Dokumente
|
||||
url = ssh://git@git.chaospott.de:2222/c3gov/docs.git
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>website</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.validation.validationbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.dltk.core.scriptbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.php.core.PHPNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Models\RegisterToken;
|
||||
use Illuminate\Console\Attributes\Description;
|
||||
use Illuminate\Console\Attributes\Signature;
|
||||
use Illuminate\Console\Command;
|
||||
use Nette\Utils\Random;
|
||||
|
||||
#[Signature('app:generate-register-token')]
|
||||
#[Description('Generate a register token for the internal authentication platform.')]
|
||||
class GenerateRegisterToken extends Command
|
||||
{
|
||||
/**
|
||||
* Execute the console command.
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$newToken = Random::generate(12, "0-9A-Z");
|
||||
|
||||
try {
|
||||
$rt = new RegisterToken;
|
||||
$rt->token = $newToken;
|
||||
$rt->save();
|
||||
} catch (\ErrorException $e) {
|
||||
$this->error($e->getMessage());
|
||||
return 1;
|
||||
}
|
||||
|
||||
$this->info("Register token generated: \n" . $newToken);
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Blog;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class BlogController extends Controller
|
||||
{
|
||||
|
||||
public function addBlog(Request $request){
|
||||
if(Auth::check()){
|
||||
try {
|
||||
$blog = new Blog();
|
||||
$blog->published_by = Auth::user()->id;
|
||||
$blog->language = $request->input('language');
|
||||
$blog->title = $request->input('title');
|
||||
$blog->body = $request->input('body');
|
||||
$blog->published = "1";
|
||||
$blog->created_at = now();
|
||||
$blog->updated_at = now();
|
||||
$blog->save();
|
||||
return ['messageStatus' => 'success', 'errorMessage' => ''];
|
||||
} catch (\Illuminate\Database\QueryException $e) {
|
||||
return ['messageStatus' => 'danger', 'errorMessage' => __("controller_messages.BlogController.error_occurred", ["error" => $e->getMessage()])];
|
||||
}
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
public function editBlog(Request $request){
|
||||
if(Auth::check()){
|
||||
try {
|
||||
$blog = Blog::find($request->input('id'));
|
||||
$blog->title = $request->input('title');
|
||||
$blog->body = $request->input('body');
|
||||
$blog->language = $request->input('language');
|
||||
$blog->published = $request->input('published');
|
||||
$blog->published_by = Auth::user()->id;
|
||||
$blog->save();
|
||||
return ['messageStatus' => 'success', 'errorMessage' => ''];
|
||||
} catch (\Illuminate\Database\QueryException $e) {
|
||||
return ['messageStatus' => 'failure', 'errorMessage' => __("controller_messages.BlogController.error_occurred", ["error" => $e->getMessage()])];
|
||||
}
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
public function deleteBlog(Request $request){
|
||||
if(Auth::check()){
|
||||
try {
|
||||
$blog = Blog::find($request->input('id'));
|
||||
if ($blog) {
|
||||
$blog->delete();
|
||||
}
|
||||
return ['messageStatus' => 'success', 'errorMessage' => ''];
|
||||
} catch(\Exception $e){
|
||||
return ['messageStatus' => 'failure', 'errorMessage' => __("controller_messages.BlogController.error_occurred", ["error" => $e->getMessage()])];
|
||||
}
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
|
||||
public static function blogPaginated(){
|
||||
return Blog::where('language', App::getLocale())->where('published', 1)->orderBy('id', 'desc')->paginate(5);
|
||||
}
|
||||
|
||||
public static function blogPaginatedEdit(){
|
||||
return Blog::orderBy('id', 'desc')->paginate(5);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
abstract class Controller
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\ChaosEvents;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class EventController extends Controller
|
||||
{
|
||||
public static function eventsPaginated(){
|
||||
return ChaosEvents::paginate(10);
|
||||
}
|
||||
|
||||
public function addEvent(Request $request) {
|
||||
if(Auth::check()){
|
||||
$name = $request->input('name');
|
||||
$shortname = $request->input('shortname');
|
||||
$from_date_internal = $request->input('from_date_internal');
|
||||
$to_date_internal = $request->input('to_date_internal');
|
||||
$from_date_visible = $request->input('from_date_visible');
|
||||
$to_date_visible = $request->input('to_date_visible');
|
||||
$active = $request->input('active');
|
||||
|
||||
try {
|
||||
|
||||
$event = new ChaosEvents();
|
||||
$event->name = $name;
|
||||
$event->shortname = $shortname;
|
||||
$event->from_date_internal = $from_date_internal;
|
||||
$event->to_date_internal = $to_date_internal;
|
||||
$event->from_date_visible = $from_date_visible;
|
||||
$event->to_date_visible = $to_date_visible;
|
||||
$event->active = $active;
|
||||
|
||||
$event->save();
|
||||
return ['messageStatus' => 'success', 'errorMessage' => ''];
|
||||
} catch (\Illuminate\Database\QueryException $e) {
|
||||
return ['messageStatus' => 'failure', 'errorMessage' => __("controller_messages.EventController.error_occurred", ["error" => $e->getMessage()])];
|
||||
}
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
public function deleteEvent(Request $request) {
|
||||
if(Auth::check()){
|
||||
try {
|
||||
$event = ChaosEvents::find($request->input('id'));
|
||||
if ($event) {
|
||||
$event->delete();
|
||||
return ['messageStatus' => 'success', 'errorMessage' => ''];
|
||||
} else {
|
||||
return ['messageStatus' => 'failure', 'errorMessage' => __("controller_messages.EventController.error_occurred", ["error" => "Event not found"])];
|
||||
}
|
||||
} catch (\Illuminate\Database\QueryException $e) {
|
||||
return ['messageStatus' => 'failure', 'errorMessage' => __("controller_messages.EventController.error_occurred", ["error" => $e->getMessage()])];
|
||||
}
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
public function setActivity(Request $request) {
|
||||
if(Auth::check()) {
|
||||
try {
|
||||
$event = ChaosEvents::find($request->input('id'));
|
||||
if ($event) {
|
||||
$event->active = $request->input('active');
|
||||
$event->save();
|
||||
return ['messageStatus' => 'success', 'errorMessage' => ''];
|
||||
} else {
|
||||
return ['messageStatus' => 'failure', 'errorMessage' => __("controller_messages.EventController.error_occurred", ["error" => "Event not found"])];
|
||||
}
|
||||
} catch (\Illuminate\Database\QueryException $e) {
|
||||
return ['messageStatus' => 'failure', 'errorMessage' => __("controller_messages.EventController.error_occurred", ["error" => $e->getMessage()])];
|
||||
}
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
}
|
||||
@@ -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" => __("controller_messages.LoginController.unknown_error")];
|
||||
|
||||
$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" => __("controller_messages.LoginController.not_permitted")];
|
||||
}
|
||||
|
||||
$rt = RegisterToken::where('token', $token)->first();
|
||||
if($rt) {
|
||||
$u = User::whereEmail($mail)->first();
|
||||
if($u) {
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.LoginController.email_in_use")];
|
||||
}
|
||||
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" => __("controller_messages.LoginController.unknown_error_with_details", ["error" => $e->getMessage()])];
|
||||
}
|
||||
} else {
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.LoginController.invalid_token")];
|
||||
}
|
||||
|
||||
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" => __("controller_messages.LoginController.wrong_credentials")];
|
||||
}
|
||||
} else {
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.LoginController.wrong_credentials")];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,195 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App;
|
||||
use App\Mail\PreApplicationMail;
|
||||
use App\Models\ChaosEvents;
|
||||
use App\Models\PreApplications;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Dompdf\Dompdf;
|
||||
|
||||
class PreApplicationController extends Controller
|
||||
{
|
||||
|
||||
private function generateReferenceNumber($eventId, $passportType, $firstName){
|
||||
$reference_number = null;
|
||||
|
||||
$ce = ChaosEvents::find($eventId);
|
||||
$free_reference_number = false;
|
||||
$counter = 1;
|
||||
while(!$free_reference_number){
|
||||
$reference_number = $ce->shortname . strtoupper($passportType) . '-' . strtoupper($firstName[0]) . Carbon::now()->format('ymd') . sprintf("%04d", $counter++);
|
||||
$free_reference_number = !PreApplications::where('reference_number', $reference_number)->exists();
|
||||
}
|
||||
return $reference_number;
|
||||
}
|
||||
|
||||
public function send(Request $request){
|
||||
$event = $request->input('district_region');
|
||||
|
||||
$ce = ChaosEvents::where('id', $event)->where('to_date_internal', '>=', today())->where('from_date_internal', '<=', today())->first();
|
||||
if($ce){
|
||||
|
||||
$passport_type = $request->input('passport_type');
|
||||
if(!in_array($passport_type, ['d', 'k'])){
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.PreApplicationController.wrong_passport_type")];
|
||||
}
|
||||
|
||||
$first_name = $request->input('first_name');
|
||||
$last_name = $request->input('last_name');
|
||||
$location = $request->input('location');
|
||||
|
||||
$email = $request->input('mail');
|
||||
|
||||
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.PreApplicationController.invalid_email_format")];
|
||||
}
|
||||
|
||||
switch($passport_type){
|
||||
case 'd':
|
||||
$max_characters = 17;
|
||||
break;
|
||||
case 'k':
|
||||
$max_characters = 25;
|
||||
break;
|
||||
default:
|
||||
$max_characters = 0;
|
||||
}
|
||||
|
||||
$fn = preg_match('/^[a-zA-Z0-9\s]{1,' . $max_characters . '}$/', $first_name);
|
||||
$ln = preg_match('/^[a-zA-Z0-9\s]{,' . $max_characters . '}$/', $last_name);
|
||||
$loc = preg_match('/^[a-zA-Z0-9\s]{,' . $max_characters . '}$/', $location);
|
||||
|
||||
//Log::debug('fn: ' . var_export($fn, true) . ' ln: ' . var_export($ln, true) . ' loc: ' . var_export($loc, true) . '');
|
||||
|
||||
if($fn && $ln && $loc){
|
||||
try{
|
||||
$pa = new PreApplications();
|
||||
$pa->first_name = $first_name;
|
||||
$pa->last_name = $last_name;
|
||||
$pa->location = $location;
|
||||
$pa->passport_type = $passport_type;
|
||||
$pa->reference_number = $this->generateReferenceNumber($event, $passport_type, $first_name);
|
||||
$pa->event_id = $event;
|
||||
$pa->email = $email;
|
||||
$pa->save();
|
||||
} catch(\Exception $e){
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.PreApplicationController.already_submitted")];
|
||||
}
|
||||
|
||||
Mail::to($email)
|
||||
->send(new PreApplicationMail($pa, App::getLocale()));
|
||||
|
||||
return ["messageStatus" => "success", "errorMessage" => __('controller_messages.PreApplicationController.success')];
|
||||
} else {
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.PreApplicationController.invalid_characters")];
|
||||
}
|
||||
}
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.PreApplicationController.event_not_found")];
|
||||
}
|
||||
|
||||
public static function applicationsPaginated(){
|
||||
return PreApplications::paginate(50);
|
||||
}
|
||||
|
||||
public function addApplication(Request $request){
|
||||
if(Auth::check()){
|
||||
try {
|
||||
$pa = new PreApplications();
|
||||
$pa->first_name = $request->input('first_name');
|
||||
$pa->last_name = $request->input('last_name');
|
||||
$pa->location = $request->input('location');
|
||||
$pa->notes = $request->input('notes');
|
||||
$pa->passport_type = $request->input('passport_type');
|
||||
$pa->event_id = $request->input('district_region');
|
||||
$pa->email = $request->input('mail');
|
||||
|
||||
$pa->reference_number = $this->generateReferenceNumber($request->input('district_region'), $request->input('passport_type'), $request->input('first_name'));
|
||||
|
||||
$pa->save();
|
||||
return ["messageStatus" => "success", "errorMessage" => ""];
|
||||
}
|
||||
catch(\Exception $e){
|
||||
return ["messageStatus" => "failure", "errorMessage" => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
public function deleteApplication(Request $request){
|
||||
if(Auth::check()){
|
||||
try {
|
||||
$pa = PreApplications::find($request->input('id'));
|
||||
if ($pa) {
|
||||
$pa->delete();
|
||||
return ["messageStatus" => "success", "errorMessage" => ""];
|
||||
} else {
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.PreApplicationController.application_not_found")];
|
||||
}
|
||||
} catch(\Exception $e){
|
||||
return ["messageStatus" => "failure", "errorMessage" => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
public function editApplication(Request $request){
|
||||
if(Auth::check()){
|
||||
try {
|
||||
$pa = PreApplications::find($request->input('id'));
|
||||
if ($pa) {
|
||||
$pa->first_name = $request->input('first_name');
|
||||
$pa->last_name = $request->input('last_name');
|
||||
$pa->location = $request->input('location');
|
||||
$pa->notes = $request->input('notes');
|
||||
$pa->email = $request->input('mail');
|
||||
$pa->passport_type = $request->input('passport_type');
|
||||
$pa->save();
|
||||
return ["messageStatus" => "success", "errorMessage" => ""];
|
||||
}
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.PreApplicationController.application_not_found")];
|
||||
} catch(\Exception $e){
|
||||
return ["messageStatus" => "failure", "errorMessage" => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
public function generatePDF(Request $request){
|
||||
if(Auth::check()){
|
||||
if(!$request->has('event_id')){
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.PreApplicationController.event_id_missing")];
|
||||
}
|
||||
|
||||
$event = ChaosEvents::find($request->input('event_id'));
|
||||
|
||||
if(!$event){
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.PreApplicationController.event_not_found")];
|
||||
}
|
||||
if($event->active == 0 || $event->to_date_internal < today()){
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.PreApplicationController.event_not_active")];
|
||||
}
|
||||
|
||||
|
||||
$options = new \Dompdf\Options();
|
||||
$options->set('isRemoteEnabled', true);
|
||||
$options->set('isHtml5ParserEnabled', true);
|
||||
$options->set('chroot', public_path());
|
||||
$dompdf = new Dompdf($options);
|
||||
$dompdf->setPaper('A4', 'portrait');
|
||||
|
||||
$applications = PreApplications::where('event_id', $request->input('event_id'))->get();
|
||||
$dompdf->loadHtml(view('pdf.pre_application', ['applications' => $applications, 'event' => $event]));
|
||||
|
||||
$dompdf->render();
|
||||
|
||||
$dompdf->stream('Voranträge_' . $event->shortname . '_' . $event->from_date_visible->format('Y') . '.pdf', ['Attachment' => 0]);
|
||||
exit;
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
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 deleteTicker(Request $request){
|
||||
if(Auth::check()){
|
||||
$toDelete = $request->input('delete')[0];
|
||||
try{
|
||||
foreach($toDelete as $item){
|
||||
$ticker = TickerMessages::find($item);
|
||||
$ticker->delete();
|
||||
}
|
||||
return ["messageStatus" => "success", "errorMessage" => ""];
|
||||
} catch(\Exception $e){
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.TickerController.error_occurred", ["error" => $e->getMessage()])];
|
||||
}
|
||||
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
public function addTicker(Request $request){
|
||||
if(Auth::check()){
|
||||
$toAdd = $request->input('insert');
|
||||
$lang = $request->input('lang');
|
||||
|
||||
try {
|
||||
$ticker = new TickerMessages();
|
||||
$ticker->message = $toAdd;
|
||||
$ticker->language = $lang;
|
||||
$ticker->save();
|
||||
return ["messageStatus" => "success", "errorMessage" => ""];
|
||||
} catch(\Exception $e){
|
||||
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.TickerController.error_occurred", ["error" => $e->getMessage()])];
|
||||
}
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
public static function getTicker(){
|
||||
$t = "";
|
||||
foreach(TickerMessages::getMessages(App::getLocale())->get() as $message){
|
||||
$t .= " -- $message->message";
|
||||
}
|
||||
|
||||
if(!empty($t)){
|
||||
$t .= " -- ";
|
||||
}
|
||||
|
||||
return $t;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class WebsiteController extends Controller
|
||||
{
|
||||
|
||||
|
||||
//
|
||||
public function index(Request $request)
|
||||
{
|
||||
return view('content.index');
|
||||
}
|
||||
|
||||
public function about(Request $request){
|
||||
return view('content.about');
|
||||
}
|
||||
|
||||
public function documents(Request $request){
|
||||
return view('content.documents');
|
||||
}
|
||||
|
||||
public function contact(Request $request){
|
||||
return view('content.contact');
|
||||
}
|
||||
|
||||
public function faq(Request $request){
|
||||
return view('content.faq');
|
||||
}
|
||||
|
||||
public function imprint(Request $request){
|
||||
return view('content.imprint');
|
||||
}
|
||||
|
||||
public function news(Request $request){
|
||||
return view('content.news', ['blogs' => BlogController::blogPaginated(App::getLocale(), true)]);
|
||||
}
|
||||
|
||||
public function services(Request $request){
|
||||
return view('content.services');
|
||||
}
|
||||
|
||||
public function apply(Request $request){
|
||||
return view('application.apply');
|
||||
}
|
||||
|
||||
|
||||
// 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(){
|
||||
if(Auth::check()){
|
||||
return response()
|
||||
->view('blog.edit', ['blogs' => BlogController::blogPaginatedEdit()])
|
||||
->header('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
public function editApplications(){
|
||||
if(Auth::check()){
|
||||
return response()
|
||||
->view('application.edit', ['applications' => PreApplicationController::applicationsPaginated()])
|
||||
->header('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
public function editEvents(){
|
||||
if(Auth::check()){
|
||||
return response()
|
||||
->view('events.edit', ['events' => EventController::eventsPaginated()])
|
||||
->header('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\PreventRequestForgery as Middleware;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ForceCsrfOnLocalhost extends Middleware
|
||||
{
|
||||
/**
|
||||
* Determine if the request has a valid origin based on the Sec-Fetch-Site header.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return bool
|
||||
*/
|
||||
protected function hasValidOrigin($request)
|
||||
{
|
||||
// If it's localhost, we want to skip origin verification and fall back to token verification
|
||||
if ($this->isLocalhost($request)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return parent::hasValidOrigin($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the request is from localhost.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return bool
|
||||
*/
|
||||
protected function isLocalhost($request)
|
||||
{
|
||||
$host = $request->getHost();
|
||||
|
||||
return in_array($host, ['localhost', '127.0.0.1', '::1']) || str_ends_with($host, '.localhost');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class SetLocale
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
||||
*/
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
$lang = $request->cookie('lang', 'de');
|
||||
if (!in_array($lang, ['de', 'en'])) {
|
||||
$lang = 'de';
|
||||
}
|
||||
|
||||
App::setLocale($lang);
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use AllowDynamicProperties;
|
||||
use App;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Mail\Mailables\Attachment;
|
||||
use Illuminate\Mail\Mailables\Content;
|
||||
use Illuminate\Mail\Mailables\Envelope;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class PreApplicationMail extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*/
|
||||
public function __construct(protected App\Models\PreApplications $pa, protected string $lang = 'de')
|
||||
{
|
||||
//
|
||||
$this->locale($this->lang);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message envelope.
|
||||
*/
|
||||
public function envelope(): Envelope
|
||||
{
|
||||
return new Envelope(
|
||||
subject: __('mail.preapplication.subject'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message content definition.
|
||||
*/
|
||||
public function content(): Content
|
||||
{
|
||||
return new Content(
|
||||
view: 'mail.preapplication',
|
||||
with: ['pa' => $this->pa],
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the attachments for the message.
|
||||
*
|
||||
* @return array<int, Attachment>
|
||||
*/
|
||||
public function attachments(): array
|
||||
{
|
||||
$langFb = match ($this->locale) {
|
||||
'de' => 'dk',
|
||||
'en' => 'ek',
|
||||
default => 'dk',
|
||||
};
|
||||
|
||||
$langDonation = match ($this->locale) {
|
||||
'de' => '',
|
||||
'en' => '_en',
|
||||
};
|
||||
|
||||
return [
|
||||
Attachment::fromPath(public_path('Dokumente/c3gov_fb5' . $langFb . '.pdf'))
|
||||
->withMime('application/pdf'),
|
||||
Attachment::fromPath(public_path('Dokumente/C3GovSpGV' . $langDonation . '.pdf'))
|
||||
->withMime('application/pdf'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Blog extends Model
|
||||
{
|
||||
//
|
||||
protected $table = 'blogs';
|
||||
|
||||
public function byUser(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo('App\Models\User', 'published_by', 'id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class ChaosEvents extends Model
|
||||
{
|
||||
protected $table = 'chaos_events';
|
||||
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'from_date_internal' => 'date',
|
||||
'to_date_internal' => 'date',
|
||||
'from_date_visible' => 'date',
|
||||
'to_date_visible' => 'date',
|
||||
];
|
||||
}
|
||||
|
||||
public function preApplications() {
|
||||
return $this->hasMany('App\Models\PreApplications', 'event_id');
|
||||
}
|
||||
|
||||
public static function getActiveEvents(){
|
||||
return self::where('active', 1)->where('to_date_internal', '>=', today())
|
||||
->where('from_date_internal', '<=', today())->orderBy('to_date_internal')->get();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class PreApplications extends Model
|
||||
{
|
||||
protected $table = 'pre_applications';
|
||||
|
||||
public function event(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo('App\Models\ChaosEvents','event_id');
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
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
|
||||
{
|
||||
//
|
||||
protected $table = 'ticker_messages';
|
||||
|
||||
protected $fillable = ['language', 'message'];
|
||||
|
||||
public static function getMessages($language){
|
||||
return self::where('language', $language)->orderBy('updated_at', 'desc');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
// use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Database\Factories\UserFactory;
|
||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||
use Illuminate\Database\Eloquent\Attributes\Hidden;
|
||||
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
|
||||
{
|
||||
/** @use HasFactory<UserFactory> */
|
||||
use HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* Get the attributes that should be cast.
|
||||
*
|
||||
* @return array<string, string>
|
||||
*/
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'email_verified_at' => 'datetime',
|
||||
'password' => 'hashed',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class AppServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register any application services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
//
|
||||
if(config('app.env') === 'production') {
|
||||
\URL::forceScheme('https');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Application;
|
||||
use Symfony\Component\Console\Input\ArgvInput;
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
// Register the Composer autoloader...
|
||||
require __DIR__.'/vendor/autoload.php';
|
||||
|
||||
// Bootstrap Laravel and handle the command...
|
||||
/** @var Application $app */
|
||||
$app = require_once __DIR__.'/bootstrap/app.php';
|
||||
|
||||
$status = $app->handleCommand(new ArgvInput);
|
||||
|
||||
exit($status);
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Foundation\Configuration\Exceptions;
|
||||
use Illuminate\Foundation\Configuration\Middleware;
|
||||
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance;
|
||||
|
||||
return Application::configure(basePath: dirname(__DIR__))
|
||||
->withRouting(
|
||||
web: __DIR__.'/../routes/web.php',
|
||||
commands: __DIR__.'/../routes/console.php',
|
||||
health: '/up',
|
||||
)
|
||||
->withMiddleware(function (Middleware $middleware): void {
|
||||
$middleware->web(replace: [
|
||||
\Illuminate\Foundation\Http\Middleware\PreventRequestForgery::class => \App\Http\Middleware\ForceCsrfOnLocalhost::class,
|
||||
]);
|
||||
$middleware->append(\App\Http\Middleware\SetLocale::class);
|
||||
})
|
||||
->withExceptions(function (Exceptions $exceptions): void {
|
||||
//
|
||||
})->create();
|
||||
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
use App\Providers\AppServiceProvider;
|
||||
|
||||
return [
|
||||
AppServiceProvider::class,
|
||||
];
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"$schema": "https://getcomposer.org/schema.json",
|
||||
"name": "laravel/laravel",
|
||||
"type": "project",
|
||||
"description": "The skeleton application for the Laravel framework.",
|
||||
"keywords": [
|
||||
"laravel",
|
||||
"framework"
|
||||
],
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.3",
|
||||
"dompdf/dompdf": "v3.1.5",
|
||||
"laravel/framework": "^13.0",
|
||||
"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",
|
||||
"mockery/mockery": "^1.6",
|
||||
"nunomaduro/collision": "^8.6",
|
||||
"pestphp/pest": "^4.4",
|
||||
"pestphp/pest-plugin-laravel": "^4.1"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"App\\": "app/",
|
||||
"Database\\Factories\\": "database/factories/",
|
||||
"Database\\Seeders\\": "database/seeders/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"setup": [
|
||||
"composer install",
|
||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
|
||||
"@php artisan key:generate",
|
||||
"@php artisan migrate --force",
|
||||
"npm install",
|
||||
"npm run build"
|
||||
],
|
||||
"dev": [
|
||||
"Composer\\Config::disableProcessTimeout",
|
||||
"npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1 --timeout=0\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others"
|
||||
],
|
||||
"dev-bind": [
|
||||
"Composer\\Config::disableProcessTimeout",
|
||||
"npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve --host=0.0.0.0\" \"php artisan queue:listen --tries=1 --timeout=0\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others"
|
||||
],
|
||||
|
||||
"test": [
|
||||
"@php artisan config:clear --ansi",
|
||||
"@php artisan test"
|
||||
],
|
||||
"post-autoload-dump": [
|
||||
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
||||
"@php artisan package:discover --ansi"
|
||||
],
|
||||
"post-update-cmd": [
|
||||
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
|
||||
],
|
||||
"post-root-package-install": [
|
||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
||||
],
|
||||
"post-create-project-cmd": [
|
||||
"@php artisan key:generate --ansi",
|
||||
"@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
|
||||
"@php artisan migrate --graceful --ansi"
|
||||
],
|
||||
"pre-package-uninstall": [
|
||||
"Illuminate\\Foundation\\ComposerScripts::prePackageUninstall"
|
||||
]
|
||||
},
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"dont-discover": []
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
"preferred-install": "dist",
|
||||
"sort-packages": true,
|
||||
"allow-plugins": {
|
||||
"pestphp/pest-plugin": true,
|
||||
"php-http/discovery": true
|
||||
}
|
||||
},
|
||||
"minimum-stability": "stable",
|
||||
"prefer-stable": true
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value is the name of your application, which will be used when the
|
||||
| framework needs to place the application's name in a notification or
|
||||
| other UI elements where an application name needs to be displayed.
|
||||
|
|
||||
*/
|
||||
|
||||
'name' => env('APP_NAME', 'Laravel'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Environment
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value determines the "environment" your application is currently
|
||||
| running in. This may determine how you prefer to configure various
|
||||
| services the application utilizes. Set this in your ".env" file.
|
||||
|
|
||||
*/
|
||||
|
||||
'env' => env('APP_ENV', 'production'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Debug Mode
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When your application is in debug mode, detailed error messages with
|
||||
| stack traces will be shown on every error that occurs within your
|
||||
| application. If disabled, a simple generic error page is shown.
|
||||
|
|
||||
*/
|
||||
|
||||
'debug' => (bool) env('APP_DEBUG', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application URL
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This URL is used by the console to properly generate URLs when using
|
||||
| the Artisan command line tool. You should set this to the root of
|
||||
| the application so that it's available within Artisan commands.
|
||||
|
|
||||
*/
|
||||
|
||||
'url' => env('APP_URL', 'http://localhost'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Timezone
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the default timezone for your application, which
|
||||
| will be used by the PHP date and date-time functions. The timezone
|
||||
| is set to "UTC" by default as it is suitable for most use cases.
|
||||
|
|
||||
*/
|
||||
|
||||
'timezone' => 'Europe/Berlin',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Locale Configuration
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The application locale determines the default locale that will be used
|
||||
| by Laravel's translation / localization methods. This option can be
|
||||
| set to any locale for which you plan to have translation strings.
|
||||
|
|
||||
*/
|
||||
|
||||
'locale' => env('APP_LOCALE', 'en'),
|
||||
|
||||
'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
|
||||
|
||||
'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Encryption Key
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This key is utilized by Laravel's encryption services and should be set
|
||||
| to a random, 32 character string to ensure that all encrypted values
|
||||
| are secure. You should do this prior to deploying the application.
|
||||
|
|
||||
*/
|
||||
|
||||
'cipher' => 'AES-256-CBC',
|
||||
|
||||
'key' => env('APP_KEY'),
|
||||
|
||||
'previous_keys' => [
|
||||
...array_filter(
|
||||
explode(',', (string) env('APP_PREVIOUS_KEYS', ''))
|
||||
),
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Maintenance Mode Driver
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These configuration options determine the driver used to determine and
|
||||
| manage Laravel's "maintenance mode" status. The "cache" driver will
|
||||
| allow maintenance mode to be controlled across multiple machines.
|
||||
|
|
||||
| Supported drivers: "file", "cache"
|
||||
|
|
||||
*/
|
||||
|
||||
'maintenance' => [
|
||||
'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
|
||||
'store' => env('APP_MAINTENANCE_STORE', 'database'),
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
use App\Models\User;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Defaults
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option defines the default authentication "guard" and password
|
||||
| reset "broker" for your application. You may change these values
|
||||
| as required, but they're a perfect start for most applications.
|
||||
|
|
||||
*/
|
||||
|
||||
'defaults' => [
|
||||
'guard' => env('AUTH_GUARD', 'web'),
|
||||
'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Guards
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Next, you may define every authentication guard for your application.
|
||||
| Of course, a great default configuration has been defined for you
|
||||
| which utilizes session storage plus the Eloquent user provider.
|
||||
|
|
||||
| All authentication guards have a user provider, which defines how the
|
||||
| users are actually retrieved out of your database or other storage
|
||||
| system used by the application. Typically, Eloquent is utilized.
|
||||
|
|
||||
| Supported: "session"
|
||||
|
|
||||
*/
|
||||
|
||||
'guards' => [
|
||||
'web' => [
|
||||
'driver' => 'session',
|
||||
'provider' => 'users',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| User Providers
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| All authentication guards have a user provider, which defines how the
|
||||
| users are actually retrieved out of your database or other storage
|
||||
| system used by the application. Typically, Eloquent is utilized.
|
||||
|
|
||||
| If you have multiple user tables or models you may configure multiple
|
||||
| providers to represent the model / table. These providers may then
|
||||
| be assigned to any extra authentication guards you have defined.
|
||||
|
|
||||
| Supported: "database", "eloquent"
|
||||
|
|
||||
*/
|
||||
|
||||
'providers' => [
|
||||
'users' => [
|
||||
'driver' => 'eloquent',
|
||||
'model' => env('AUTH_MODEL', User::class),
|
||||
],
|
||||
|
||||
// 'users' => [
|
||||
// 'driver' => 'database',
|
||||
// 'table' => 'users',
|
||||
// ],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Resetting Passwords
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These configuration options specify the behavior of Laravel's password
|
||||
| reset functionality, including the table utilized for token storage
|
||||
| and the user provider that is invoked to actually retrieve users.
|
||||
|
|
||||
| The expiry time is the number of minutes that each reset token will be
|
||||
| considered valid. This security feature keeps tokens short-lived so
|
||||
| they have less time to be guessed. You may change this as needed.
|
||||
|
|
||||
| The throttle setting is the number of seconds a user must wait before
|
||||
| generating more password reset tokens. This prevents the user from
|
||||
| quickly generating a very large amount of password reset tokens.
|
||||
|
|
||||
*/
|
||||
|
||||
'passwords' => [
|
||||
'users' => [
|
||||
'provider' => 'users',
|
||||
'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
|
||||
'expire' => 60,
|
||||
'throttle' => 60,
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Confirmation Timeout
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may define the number of seconds before a password confirmation
|
||||
| window expires and users are asked to re-enter their password via the
|
||||
| confirmation screen. By default, the timeout lasts for three hours.
|
||||
|
|
||||
*/
|
||||
|
||||
'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),
|
||||
|
||||
];
|
||||
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Cache Store
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default cache store that will be used by the
|
||||
| framework. This connection is utilized if another isn't explicitly
|
||||
| specified when running a cache operation inside the application.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('CACHE_STORE', 'database'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache Stores
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may define all of the cache "stores" for your application as
|
||||
| well as their drivers. You may even define multiple stores for the
|
||||
| same cache driver to group types of items stored in your caches.
|
||||
|
|
||||
| Supported drivers: "array", "database", "file", "memcached",
|
||||
| "redis", "dynamodb", "octane",
|
||||
| "failover", "null"
|
||||
|
|
||||
*/
|
||||
|
||||
'stores' => [
|
||||
|
||||
'array' => [
|
||||
'driver' => 'array',
|
||||
'serialize' => false,
|
||||
],
|
||||
|
||||
'database' => [
|
||||
'driver' => 'database',
|
||||
'connection' => env('DB_CACHE_CONNECTION'),
|
||||
'table' => env('DB_CACHE_TABLE', 'cache'),
|
||||
'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),
|
||||
'lock_table' => env('DB_CACHE_LOCK_TABLE'),
|
||||
],
|
||||
|
||||
'file' => [
|
||||
'driver' => 'file',
|
||||
'path' => storage_path('framework/cache/data'),
|
||||
'lock_path' => storage_path('framework/cache/data'),
|
||||
],
|
||||
|
||||
'memcached' => [
|
||||
'driver' => 'memcached',
|
||||
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
|
||||
'sasl' => [
|
||||
env('MEMCACHED_USERNAME'),
|
||||
env('MEMCACHED_PASSWORD'),
|
||||
],
|
||||
'options' => [
|
||||
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
|
||||
],
|
||||
'servers' => [
|
||||
[
|
||||
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
|
||||
'port' => env('MEMCACHED_PORT', 11211),
|
||||
'weight' => 100,
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
'redis' => [
|
||||
'driver' => 'redis',
|
||||
'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),
|
||||
'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),
|
||||
],
|
||||
|
||||
'dynamodb' => [
|
||||
'driver' => 'dynamodb',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
|
||||
'endpoint' => env('DYNAMODB_ENDPOINT'),
|
||||
],
|
||||
|
||||
'octane' => [
|
||||
'driver' => 'octane',
|
||||
],
|
||||
|
||||
'failover' => [
|
||||
'driver' => 'failover',
|
||||
'stores' => [
|
||||
'database',
|
||||
'array',
|
||||
],
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache Key Prefix
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When utilizing the APC, database, memcached, Redis, and DynamoDB cache
|
||||
| stores, there might be other applications using the same cache. For
|
||||
| that reason, you may prefix every cache key to avoid collisions.
|
||||
|
|
||||
*/
|
||||
|
||||
'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Serializable Classes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value determines the classes that can be unserialized from cache
|
||||
| storage. By default, no PHP classes will be unserialized from your
|
||||
| cache to prevent gadget chain attacks if your APP_KEY is leaked.
|
||||
|
|
||||
*/
|
||||
|
||||
'serializable_classes' => false,
|
||||
|
||||
];
|
||||
@@ -0,0 +1,184 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
use Pdo\Mysql;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Database Connection Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify which of the database connections below you wish
|
||||
| to use as your default connection for database operations. This is
|
||||
| the connection which will be utilized unless another connection
|
||||
| is explicitly specified when you execute a query / statement.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('DB_CONNECTION', 'sqlite'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Database Connections
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Below are all of the database connections defined for your application.
|
||||
| An example configuration is provided for each database system which
|
||||
| is supported by Laravel. You're free to add / remove connections.
|
||||
|
|
||||
*/
|
||||
|
||||
'connections' => [
|
||||
|
||||
'sqlite' => [
|
||||
'driver' => 'sqlite',
|
||||
'url' => env('DB_URL'),
|
||||
'database' => env('DB_DATABASE', database_path('database.sqlite')),
|
||||
'prefix' => '',
|
||||
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
|
||||
'busy_timeout' => null,
|
||||
'journal_mode' => null,
|
||||
'synchronous' => null,
|
||||
'transaction_mode' => 'DEFERRED',
|
||||
],
|
||||
|
||||
'mysql' => [
|
||||
'driver' => 'mysql',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', '127.0.0.1'),
|
||||
'port' => env('DB_PORT', '3306'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'unix_socket' => env('DB_SOCKET', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8mb4'),
|
||||
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'strict' => true,
|
||||
'engine' => null,
|
||||
'options' => extension_loaded('pdo_mysql') ? array_filter([
|
||||
(PHP_VERSION_ID >= 80500 ? Mysql::ATTR_SSL_CA : PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
|
||||
]) : [],
|
||||
],
|
||||
|
||||
'mariadb' => [
|
||||
'driver' => 'mariadb',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', '127.0.0.1'),
|
||||
'port' => env('DB_PORT', '3306'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'unix_socket' => env('DB_SOCKET', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8mb4'),
|
||||
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'strict' => true,
|
||||
'engine' => null,
|
||||
'options' => extension_loaded('pdo_mysql') ? array_filter([
|
||||
(PHP_VERSION_ID >= 80500 ? Mysql::ATTR_SSL_CA : PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
|
||||
]) : [],
|
||||
],
|
||||
|
||||
'pgsql' => [
|
||||
'driver' => 'pgsql',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', '127.0.0.1'),
|
||||
'port' => env('DB_PORT', '5432'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'search_path' => 'public',
|
||||
'sslmode' => env('DB_SSLMODE', 'prefer'),
|
||||
],
|
||||
|
||||
'sqlsrv' => [
|
||||
'driver' => 'sqlsrv',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', 'localhost'),
|
||||
'port' => env('DB_PORT', '1433'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
// 'encrypt' => env('DB_ENCRYPT', 'yes'),
|
||||
// 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Migration Repository Table
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This table keeps track of all the migrations that have already run for
|
||||
| your application. Using this information, we can determine which of
|
||||
| the migrations on disk haven't actually been run on the database.
|
||||
|
|
||||
*/
|
||||
|
||||
'migrations' => [
|
||||
'table' => 'migrations',
|
||||
'update_date_on_publish' => true,
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Redis Databases
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Redis is an open source, fast, and advanced key-value store that also
|
||||
| provides a richer body of commands than a typical key-value system
|
||||
| such as Memcached. You may define your connection settings here.
|
||||
|
|
||||
*/
|
||||
|
||||
'redis' => [
|
||||
|
||||
'client' => env('REDIS_CLIENT', 'phpredis'),
|
||||
|
||||
'options' => [
|
||||
'cluster' => env('REDIS_CLUSTER', 'redis'),
|
||||
'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'),
|
||||
'persistent' => env('REDIS_PERSISTENT', false),
|
||||
],
|
||||
|
||||
'default' => [
|
||||
'url' => env('REDIS_URL'),
|
||||
'host' => env('REDIS_HOST', '127.0.0.1'),
|
||||
'username' => env('REDIS_USERNAME'),
|
||||
'password' => env('REDIS_PASSWORD'),
|
||||
'port' => env('REDIS_PORT', '6379'),
|
||||
'database' => env('REDIS_DB', '0'),
|
||||
'max_retries' => env('REDIS_MAX_RETRIES', 3),
|
||||
'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
|
||||
'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
|
||||
'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
|
||||
],
|
||||
|
||||
'cache' => [
|
||||
'url' => env('REDIS_URL'),
|
||||
'host' => env('REDIS_HOST', '127.0.0.1'),
|
||||
'username' => env('REDIS_USERNAME'),
|
||||
'password' => env('REDIS_PASSWORD'),
|
||||
'port' => env('REDIS_PORT', '6379'),
|
||||
'database' => env('REDIS_CACHE_DB', '1'),
|
||||
'max_retries' => env('REDIS_MAX_RETRIES', 3),
|
||||
'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
|
||||
'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
|
||||
'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Filesystem Disk
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the default filesystem disk that should be used
|
||||
| by the framework. The "local" disk, as well as a variety of cloud
|
||||
| based disks are available to your application for file storage.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('FILESYSTEM_DISK', 'local'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Filesystem Disks
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Below you may configure as many filesystem disks as necessary, and you
|
||||
| may even configure multiple disks for the same driver. Examples for
|
||||
| most supported storage drivers are configured here for reference.
|
||||
|
|
||||
| Supported drivers: "local", "ftp", "sftp", "s3"
|
||||
|
|
||||
*/
|
||||
|
||||
'disks' => [
|
||||
|
||||
'local' => [
|
||||
'driver' => 'local',
|
||||
'root' => storage_path('app/private'),
|
||||
'serve' => true,
|
||||
'throw' => false,
|
||||
'report' => false,
|
||||
],
|
||||
|
||||
'public' => [
|
||||
'driver' => 'local',
|
||||
'root' => storage_path('app/public'),
|
||||
'url' => rtrim(env('APP_URL', 'http://localhost'), '/').'/storage',
|
||||
'visibility' => 'public',
|
||||
'throw' => false,
|
||||
'report' => false,
|
||||
],
|
||||
|
||||
's3' => [
|
||||
'driver' => 's3',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION'),
|
||||
'bucket' => env('AWS_BUCKET'),
|
||||
'url' => env('AWS_URL'),
|
||||
'endpoint' => env('AWS_ENDPOINT'),
|
||||
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
|
||||
'throw' => false,
|
||||
'report' => false,
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Symbolic Links
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure the symbolic links that will be created when the
|
||||
| `storage:link` Artisan command is executed. The array keys should be
|
||||
| the locations of the links and the values should be their targets.
|
||||
|
|
||||
*/
|
||||
|
||||
'links' => [
|
||||
public_path('storage') => storage_path('app/public'),
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,132 @@
|
||||
<?php
|
||||
|
||||
use Monolog\Handler\NullHandler;
|
||||
use Monolog\Handler\StreamHandler;
|
||||
use Monolog\Handler\SyslogUdpHandler;
|
||||
use Monolog\Processor\PsrLogMessageProcessor;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Log Channel
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option defines the default log channel that is utilized to write
|
||||
| messages to your logs. The value provided here should match one of
|
||||
| the channels present in the list of "channels" configured below.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('LOG_CHANNEL', 'stack'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Deprecations Log Channel
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the log channel that should be used to log warnings
|
||||
| regarding deprecated PHP and library features. This allows you to get
|
||||
| your application ready for upcoming major versions of dependencies.
|
||||
|
|
||||
*/
|
||||
|
||||
'deprecations' => [
|
||||
'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
|
||||
'trace' => env('LOG_DEPRECATIONS_TRACE', false),
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Channels
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure the log channels for your application. Laravel
|
||||
| utilizes the Monolog PHP logging library, which includes a variety
|
||||
| of powerful log handlers and formatters that you're free to use.
|
||||
|
|
||||
| Available drivers: "single", "daily", "slack", "syslog",
|
||||
| "errorlog", "monolog", "custom", "stack"
|
||||
|
|
||||
*/
|
||||
|
||||
'channels' => [
|
||||
|
||||
'stack' => [
|
||||
'driver' => 'stack',
|
||||
'channels' => explode(',', (string) env('LOG_STACK', 'single')),
|
||||
'ignore_exceptions' => false,
|
||||
],
|
||||
|
||||
'single' => [
|
||||
'driver' => 'single',
|
||||
'path' => storage_path('logs/laravel.log'),
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'daily' => [
|
||||
'driver' => 'daily',
|
||||
'path' => storage_path('logs/laravel.log'),
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'days' => env('LOG_DAILY_DAYS', 14),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'slack' => [
|
||||
'driver' => 'slack',
|
||||
'url' => env('LOG_SLACK_WEBHOOK_URL'),
|
||||
'username' => env('LOG_SLACK_USERNAME', env('APP_NAME', 'Laravel')),
|
||||
'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),
|
||||
'level' => env('LOG_LEVEL', 'critical'),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'papertrail' => [
|
||||
'driver' => 'monolog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),
|
||||
'handler_with' => [
|
||||
'host' => env('PAPERTRAIL_URL'),
|
||||
'port' => env('PAPERTRAIL_PORT'),
|
||||
'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),
|
||||
],
|
||||
'processors' => [PsrLogMessageProcessor::class],
|
||||
],
|
||||
|
||||
'stderr' => [
|
||||
'driver' => 'monolog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'handler' => StreamHandler::class,
|
||||
'handler_with' => [
|
||||
'stream' => 'php://stderr',
|
||||
],
|
||||
'formatter' => env('LOG_STDERR_FORMATTER'),
|
||||
'processors' => [PsrLogMessageProcessor::class],
|
||||
],
|
||||
|
||||
'syslog' => [
|
||||
'driver' => 'syslog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'errorlog' => [
|
||||
'driver' => 'errorlog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => NullHandler::class,
|
||||
],
|
||||
|
||||
'emergency' => [
|
||||
'path' => storage_path('logs/laravel.log'),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Mailer
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default mailer that is used to send all email
|
||||
| messages unless another mailer is explicitly specified when sending
|
||||
| the message. All additional mailers can be configured within the
|
||||
| "mailers" array. Examples of each type of mailer are provided.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('MAIL_MAILER', 'log'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Mailer Configurations
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure all of the mailers used by your application plus
|
||||
| their respective settings. Several examples have been configured for
|
||||
| you and you are free to add your own as your application requires.
|
||||
|
|
||||
| Laravel supports a variety of mail "transport" drivers that can be used
|
||||
| when delivering an email. You may specify which one you're using for
|
||||
| your mailers below. You may also add additional mailers if needed.
|
||||
|
|
||||
| Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2",
|
||||
| "postmark", "resend", "log", "array",
|
||||
| "failover", "roundrobin"
|
||||
|
|
||||
*/
|
||||
|
||||
'mailers' => [
|
||||
|
||||
'smtp' => [
|
||||
'transport' => 'smtp',
|
||||
'scheme' => env('MAIL_SCHEME'),
|
||||
'url' => env('MAIL_URL'),
|
||||
'host' => env('MAIL_HOST', '127.0.0.1'),
|
||||
'port' => env('MAIL_PORT', 2525),
|
||||
'username' => env('MAIL_USERNAME'),
|
||||
'password' => env('MAIL_PASSWORD'),
|
||||
'timeout' => null,
|
||||
'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
|
||||
],
|
||||
|
||||
'ses' => [
|
||||
'transport' => 'ses',
|
||||
],
|
||||
|
||||
'postmark' => [
|
||||
'transport' => 'postmark',
|
||||
// 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),
|
||||
// 'client' => [
|
||||
// 'timeout' => 5,
|
||||
// ],
|
||||
],
|
||||
|
||||
'resend' => [
|
||||
'transport' => 'resend',
|
||||
],
|
||||
|
||||
'sendmail' => [
|
||||
'transport' => 'sendmail',
|
||||
'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
|
||||
],
|
||||
|
||||
'log' => [
|
||||
'transport' => 'log',
|
||||
'channel' => env('MAIL_LOG_CHANNEL'),
|
||||
],
|
||||
|
||||
'array' => [
|
||||
'transport' => 'array',
|
||||
],
|
||||
|
||||
'failover' => [
|
||||
'transport' => 'failover',
|
||||
'mailers' => [
|
||||
'smtp',
|
||||
'log',
|
||||
],
|
||||
'retry_after' => 60,
|
||||
],
|
||||
|
||||
'roundrobin' => [
|
||||
'transport' => 'roundrobin',
|
||||
'mailers' => [
|
||||
'ses',
|
||||
'postmark',
|
||||
],
|
||||
'retry_after' => 60,
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Global "From" Address
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| You may wish for all emails sent by your application to be sent from
|
||||
| the same address. Here you may specify a name and address that is
|
||||
| used globally for all emails that are sent by your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'from' => [
|
||||
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
|
||||
'name' => env('MAIL_FROM_NAME', env('APP_NAME', 'Laravel')),
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Queue Connection Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Laravel's queue supports a variety of backends via a single, unified
|
||||
| API, giving you convenient access to each backend using identical
|
||||
| syntax for each. The default queue connection is defined below.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('QUEUE_CONNECTION', 'database'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Queue Connections
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure the connection options for every queue backend
|
||||
| used by your application. An example configuration is provided for
|
||||
| each backend supported by Laravel. You're also free to add more.
|
||||
|
|
||||
| Drivers: "sync", "database", "beanstalkd", "sqs", "redis",
|
||||
| "deferred", "background", "failover", "null"
|
||||
|
|
||||
*/
|
||||
|
||||
'connections' => [
|
||||
|
||||
'sync' => [
|
||||
'driver' => 'sync',
|
||||
],
|
||||
|
||||
'database' => [
|
||||
'driver' => 'database',
|
||||
'connection' => env('DB_QUEUE_CONNECTION'),
|
||||
'table' => env('DB_QUEUE_TABLE', 'jobs'),
|
||||
'queue' => env('DB_QUEUE', 'default'),
|
||||
'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'beanstalkd' => [
|
||||
'driver' => 'beanstalkd',
|
||||
'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),
|
||||
'queue' => env('BEANSTALKD_QUEUE', 'default'),
|
||||
'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),
|
||||
'block_for' => 0,
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'sqs' => [
|
||||
'driver' => 'sqs',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
|
||||
'queue' => env('SQS_QUEUE', 'default'),
|
||||
'suffix' => env('SQS_SUFFIX'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'redis' => [
|
||||
'driver' => 'redis',
|
||||
'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),
|
||||
'queue' => env('REDIS_QUEUE', 'default'),
|
||||
'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),
|
||||
'block_for' => null,
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'deferred' => [
|
||||
'driver' => 'deferred',
|
||||
],
|
||||
|
||||
'background' => [
|
||||
'driver' => 'background',
|
||||
],
|
||||
|
||||
'failover' => [
|
||||
'driver' => 'failover',
|
||||
'connections' => [
|
||||
'database',
|
||||
'deferred',
|
||||
],
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Job Batching
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following options configure the database and table that store job
|
||||
| batching information. These options can be updated to any database
|
||||
| connection and table which has been defined by your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'batching' => [
|
||||
'database' => env('DB_CONNECTION', 'sqlite'),
|
||||
'table' => 'job_batches',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Failed Queue Jobs
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These options configure the behavior of failed queue job logging so you
|
||||
| can control how and where failed jobs are stored. Laravel ships with
|
||||
| support for storing failed jobs in a simple file or in a database.
|
||||
|
|
||||
| Supported drivers: "database-uuids", "dynamodb", "file", "null"
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => [
|
||||
'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
|
||||
'database' => env('DB_CONNECTION', 'sqlite'),
|
||||
'table' => 'failed_jobs',
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Third Party Services
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This file is for storing the credentials for third party services such
|
||||
| as Mailgun, Postmark, AWS and more. This file provides the de facto
|
||||
| location for this type of information, allowing packages to have
|
||||
| a conventional file to locate the various service credentials.
|
||||
|
|
||||
*/
|
||||
|
||||
'postmark' => [
|
||||
'key' => env('POSTMARK_API_KEY'),
|
||||
],
|
||||
|
||||
'resend' => [
|
||||
'key' => env('RESEND_API_KEY'),
|
||||
],
|
||||
|
||||
'ses' => [
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
],
|
||||
|
||||
'slack' => [
|
||||
'notifications' => [
|
||||
'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
|
||||
'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
|
||||
],
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,233 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Session Driver
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option determines the default session driver that is utilized for
|
||||
| incoming requests. Laravel supports a variety of storage options to
|
||||
| persist session data. Database storage is a great default choice.
|
||||
|
|
||||
| Supported: "file", "cookie", "database", "memcached",
|
||||
| "redis", "dynamodb", "array"
|
||||
|
|
||||
*/
|
||||
|
||||
'driver' => env('SESSION_DRIVER', 'cookies'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Lifetime
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the number of minutes that you wish the session
|
||||
| to be allowed to remain idle before it expires. If you want them
|
||||
| to expire immediately when the browser is closed then you may
|
||||
| indicate that via the expire_on_close configuration option.
|
||||
|
|
||||
*/
|
||||
|
||||
'lifetime' => (int) env('SESSION_LIFETIME', 120),
|
||||
|
||||
'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Encryption
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option allows you to easily specify that all of your session data
|
||||
| should be encrypted before it's stored. All encryption is performed
|
||||
| automatically by Laravel and you may use the session like normal.
|
||||
|
|
||||
*/
|
||||
|
||||
'encrypt' => env('SESSION_ENCRYPT', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session File Location
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When utilizing the "file" session driver, the session files are placed
|
||||
| on disk. The default storage location is defined here; however, you
|
||||
| are free to provide another location where they should be stored.
|
||||
|
|
||||
*/
|
||||
|
||||
'files' => storage_path('framework/sessions'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Database Connection
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using the "database" or "redis" session drivers, you may specify a
|
||||
| connection that should be used to manage these sessions. This should
|
||||
| correspond to a connection in your database configuration options.
|
||||
|
|
||||
*/
|
||||
|
||||
'connection' => env('SESSION_CONNECTION'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Database Table
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using the "database" session driver, you may specify the table to
|
||||
| be used to store sessions. Of course, a sensible default is defined
|
||||
| for you; however, you're welcome to change this to another table.
|
||||
|
|
||||
*/
|
||||
|
||||
'table' => env('SESSION_TABLE', 'sessions'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cache Store
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using one of the framework's cache driven session backends, you may
|
||||
| define the cache store which should be used to store the session data
|
||||
| between requests. This must match one of your defined cache stores.
|
||||
|
|
||||
| Affects: "dynamodb", "memcached", "redis"
|
||||
|
|
||||
*/
|
||||
|
||||
'store' => env('SESSION_STORE'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Sweeping Lottery
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Some session drivers must manually sweep their storage location to get
|
||||
| rid of old sessions from storage. Here are the chances that it will
|
||||
| happen on a given request. By default, the odds are 2 out of 100.
|
||||
|
|
||||
*/
|
||||
|
||||
'lottery' => [2, 100],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cookie Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may change the name of the session cookie that is created by
|
||||
| the framework. Typically, you should not need to change this value
|
||||
| since doing so does not grant a meaningful security improvement.
|
||||
|
|
||||
*/
|
||||
|
||||
'cookie' => env(
|
||||
'SESSION_COOKIE',
|
||||
Str::slug((string) env('APP_NAME', 'laravel')).'-session'
|
||||
),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cookie Path
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The session cookie path determines the path for which the cookie will
|
||||
| be regarded as available. Typically, this will be the root path of
|
||||
| your application, but you're free to change this when necessary.
|
||||
|
|
||||
*/
|
||||
|
||||
'path' => env('SESSION_PATH', '/'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cookie Domain
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value determines the domain and subdomains the session cookie is
|
||||
| available to. By default, the cookie will be available to the root
|
||||
| domain without subdomains. Typically, this shouldn't be changed.
|
||||
|
|
||||
*/
|
||||
|
||||
'domain' => env('SESSION_DOMAIN'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| HTTPS Only Cookies
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| By setting this option to true, session cookies will only be sent back
|
||||
| to the server if the browser has a HTTPS connection. This will keep
|
||||
| the cookie from being sent to you when it can't be done securely.
|
||||
|
|
||||
*/
|
||||
|
||||
'secure' => env('SESSION_SECURE_COOKIE'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| HTTP Access Only
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Setting this value to true will prevent JavaScript from accessing the
|
||||
| value of the cookie and the cookie will only be accessible through
|
||||
| the HTTP protocol. It's unlikely you should disable this option.
|
||||
|
|
||||
*/
|
||||
|
||||
'http_only' => env('SESSION_HTTP_ONLY', true),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Same-Site Cookies
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option determines how your cookies behave when cross-site requests
|
||||
| take place, and can be used to mitigate CSRF attacks. By default, we
|
||||
| will set this value to "lax" to permit secure cross-site requests.
|
||||
|
|
||||
| See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
|
||||
|
|
||||
| Supported: "lax", "strict", "none", null
|
||||
|
|
||||
*/
|
||||
|
||||
'same_site' => env('SESSION_SAME_SITE', 'lax'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Partitioned Cookies
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Setting this value to true will tie the cookie to the top-level site for
|
||||
| a cross-site context. Partitioned cookies are accepted by the browser
|
||||
| when flagged "secure" and the Same-Site attribute is set to "none".
|
||||
|
|
||||
*/
|
||||
|
||||
'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Serialization
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value controls the serialization strategy for session data, which
|
||||
| is JSON by default. Setting this to "php" allows the storage of PHP
|
||||
| objects in the session but can make an application vulnerable to
|
||||
| "gadget chain" serialization attacks if the APP_KEY is leaked.
|
||||
|
|
||||
| Supported: "json", "php"
|
||||
|
|
||||
*/
|
||||
|
||||
'serialization' => 'json',
|
||||
|
||||
];
|
||||
@@ -0,0 +1 @@
|
||||
*.sqlite*
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
/**
|
||||
* @extends Factory<User>
|
||||
*/
|
||||
class UserFactory extends Factory
|
||||
{
|
||||
/**
|
||||
* The current password being used by the factory.
|
||||
*/
|
||||
protected static ?string $password;
|
||||
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function definition(): array
|
||||
{
|
||||
return [
|
||||
'name' => fake()->name(),
|
||||
'email' => fake()->unique()->safeEmail(),
|
||||
'email_verified_at' => now(),
|
||||
'password' => static::$password ??= Hash::make('password'),
|
||||
'remember_token' => Str::random(10),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate that the model's email address should be unverified.
|
||||
*/
|
||||
public function unverified(): static
|
||||
{
|
||||
return $this->state(fn (array $attributes) => [
|
||||
'email_verified_at' => null,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
<?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('users', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('email')->unique();
|
||||
$table->timestamp('email_verified_at')->nullable();
|
||||
$table->string('password');
|
||||
$table->rememberToken();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('password_reset_tokens', function (Blueprint $table) {
|
||||
$table->string('email')->primary();
|
||||
$table->string('token');
|
||||
$table->timestamp('created_at')->nullable();
|
||||
});
|
||||
|
||||
Schema::create('sessions', function (Blueprint $table) {
|
||||
$table->string('id')->primary();
|
||||
$table->foreignId('user_id')->nullable()->index();
|
||||
$table->string('ip_address', 45)->nullable();
|
||||
$table->text('user_agent')->nullable();
|
||||
$table->longText('payload');
|
||||
$table->integer('last_activity')->index();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('users');
|
||||
Schema::dropIfExists('password_reset_tokens');
|
||||
Schema::dropIfExists('sessions');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
<?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('cache', function (Blueprint $table) {
|
||||
$table->string('key')->primary();
|
||||
$table->mediumText('value');
|
||||
$table->bigInteger('expiration')->index();
|
||||
});
|
||||
|
||||
Schema::create('cache_locks', function (Blueprint $table) {
|
||||
$table->string('key')->primary();
|
||||
$table->string('owner');
|
||||
$table->bigInteger('expiration')->index();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('cache');
|
||||
Schema::dropIfExists('cache_locks');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,57 @@
|
||||
<?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('jobs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('queue')->index();
|
||||
$table->longText('payload');
|
||||
$table->unsignedTinyInteger('attempts');
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
});
|
||||
|
||||
Schema::create('job_batches', function (Blueprint $table) {
|
||||
$table->string('id')->primary();
|
||||
$table->string('name');
|
||||
$table->integer('total_jobs');
|
||||
$table->integer('pending_jobs');
|
||||
$table->integer('failed_jobs');
|
||||
$table->longText('failed_job_ids');
|
||||
$table->mediumText('options')->nullable();
|
||||
$table->integer('cancelled_at')->nullable();
|
||||
$table->integer('created_at');
|
||||
$table->integer('finished_at')->nullable();
|
||||
});
|
||||
|
||||
Schema::create('failed_jobs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('uuid')->unique();
|
||||
$table->text('connection');
|
||||
$table->text('queue');
|
||||
$table->longText('payload');
|
||||
$table->longText('exception');
|
||||
$table->timestamp('failed_at')->useCurrent();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('jobs');
|
||||
Schema::dropIfExists('job_batches');
|
||||
Schema::dropIfExists('failed_jobs');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,29 @@
|
||||
<?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('ticker_messages', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('language');
|
||||
$table->string('message');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('ticker_messages');
|
||||
}
|
||||
};
|
||||
@@ -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');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,33 @@
|
||||
<?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('blogs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('published_by');
|
||||
$table->foreign('published_by')->references('id')->on('users');
|
||||
$table->string('language');
|
||||
$table->string('title');
|
||||
$table->text('body');
|
||||
$table->boolean('published')->default(false);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('blogs');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
<?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('chaos_events', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('shortname');
|
||||
$table->date('from_date_internal');
|
||||
$table->date('to_date_internal');
|
||||
$table->date('from_date_visible');
|
||||
$table->date('to_date_visible');
|
||||
$table->boolean('active')->default(false);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('chaos_events');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
<?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('pre_applications', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('reference_number')->unique();
|
||||
$table->string('email')->unique();
|
||||
$table->string('passport_type');
|
||||
$table->bigInteger('event_id')->unsigned();
|
||||
$table->foreign('event_id')->references('id')->on('chaos_events')->onDelete('cascade');
|
||||
$table->string('first_name');
|
||||
$table->string('last_name')->nullable();
|
||||
$table->string('location')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('pre_applications');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
<?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::table('pre_applications', function (Blueprint $table) {
|
||||
$table->text('notes')->nullable()->before('created_at');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('pre_applications', function (Blueprint $table) {
|
||||
$table->dropColumn('notes');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class DatabaseSeeder extends Seeder
|
||||
{
|
||||
use WithoutModelEvents;
|
||||
|
||||
/**
|
||||
* Seed the application's database.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// User::factory(10)->create();
|
||||
|
||||
User::factory()->create([
|
||||
'name' => 'Test User',
|
||||
'email' => 'test@example.com',
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,258 @@
|
||||
<?php
|
||||
|
||||
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.',
|
||||
'fediverse' => 'C3Gov im Fediversum',
|
||||
'signed_in_as' => 'Angemeldet als:',
|
||||
'guest' => 'Gastkonto',
|
||||
'news_alt' => 'Neuigkeiten',
|
||||
'progress_flag' => 'LGBTQIA+ Progress-Flagge',
|
||||
'lead_by' => 'Eine von Transgender-Wesen geführte Bezirksregierungsbehörde',
|
||||
'language' => [
|
||||
'en' => 'English',
|
||||
'de' => 'Deutsch',
|
||||
],
|
||||
'nav' => [
|
||||
'about' => 'Über uns',
|
||||
'services' => 'Dienstleistungen',
|
||||
'documents' => 'Dokumente',
|
||||
'news' => 'Neuigkeiten',
|
||||
'contact' => 'Kontakt',
|
||||
'imprint' => 'Impressum',
|
||||
'apply' => 'Jetzt beantragen',
|
||||
'editTicker' => 'Ticker bearbeiten',
|
||||
'editNews' => 'Neuigkeiten bearbeiten',
|
||||
'editApplications' => 'Anträge bearbeiten',
|
||||
'events' => 'C3Gov-Termine',
|
||||
'logout' => 'Abmelden',
|
||||
'login' => 'Anmelden',
|
||||
'register' => 'Registrieren'
|
||||
],
|
||||
'index' => [
|
||||
'welcome' => 'Willkommen auf der Internetpräsenz des C3Gov'
|
||||
],
|
||||
'about' => [
|
||||
'subtitle' => 'Unbeschwertes Einreisen in die stationären sowie temporären CCC Bezirksregionen',
|
||||
'text1' => 'Das C3Gov bietet Ihnen die Ausstellung unserer zertifizierten Reisepässe an, mit denen Sie unbeschwert in die Botschaften [Hackspaces] sowie temporär bestehenden Bezirksregionen des CCC einreisen und Ihren Aufenthalt verifizieren lassen können.',
|
||||
'text2' => 'Unser Team setzt bei dem Ausstellen auf hochqualitative Stempel und neuste Technik. Ob Hacker*innen-Reisepass oder Junghackerpass - unser stets motiviertes Team hilft Ihnen gerne weiter.',
|
||||
'text3' => 'Jetzt neu',
|
||||
'text4' => 'Um unsere Internetpräsenz zu erweitern, können Sie uns jetzt auch im Fediversum besuchen.',
|
||||
'text5' => 'Klicken Sie dafür auf diesen Verweis:',
|
||||
'insertvideo' => '*Hier Werbefilm einfügen*'
|
||||
],
|
||||
'documents' => [
|
||||
'description' => 'Hier finden Sie sowohl unsere Verwaltungsvorschrift und deren Anlagen, sowie jegliche Formblätter für die Ausstellung von Reisepässen.',
|
||||
'verwaltungsvorschrift' => 'Verwaltungsvorschrift',
|
||||
'donation' => 'Spendengebührenverordnung',
|
||||
'fb1' => [
|
||||
'name' => 'Formblatt 1',
|
||||
'description' => 'Antrag auf Erstausstellung eines Hacker*innen-Reisepasses'
|
||||
],
|
||||
'fb1k' => [
|
||||
'name' => 'Formblatt 1k',
|
||||
'description' => 'Antrag auf Erstausstellung eines Junghackerpasses'
|
||||
],
|
||||
'fb2' => [
|
||||
'name' => 'Formblatt 2',
|
||||
'description' => 'Antrag auf Ersatz- oder Zweitausstellungen eines Hacker*innen-Reisepasses'
|
||||
],
|
||||
'fb2k' => [
|
||||
'name' => 'Formblatt 2k',
|
||||
'description' => 'Antrag auf Ersatz- oder Zweitausstellungen eines Junghackerpasses'
|
||||
],
|
||||
'fb3' => [
|
||||
'name' => 'Formblatt 3',
|
||||
'description' => 'Antrag auf Nachlegitimisierung eines Reisepasses durch das C3Gov'
|
||||
],
|
||||
'fb5' => [
|
||||
'name' => 'Formblatt 5',
|
||||
'description' => 'Voranmeldung zur Beantragung eines Reisepasses'
|
||||
],
|
||||
'fb7' => [
|
||||
'name' => 'Formblatt 7',
|
||||
'description' => 'Beschwerdeformular nach §7 Abs. 2 C3GovVerwV'
|
||||
]
|
||||
],
|
||||
'services' => [
|
||||
'title' => 'Unsere Dienstleistungen im Überblick',
|
||||
'alt' => [
|
||||
'first_issue' => 'Erstausstellung eines Reisepasses',
|
||||
'rejected' => 'Abgelehnter Antrag',
|
||||
'replacement' => 'Ersatzpass',
|
||||
'stamps' => 'Offizielle Stempel',
|
||||
],
|
||||
'topic1' => [
|
||||
'title' => 'Ausstellung von Reisepässen',
|
||||
'content' => 'Unser Team kümmert sich um die Ausstellung der Reisepässe.
|
||||
<br />Die Pässe werden durch neuste Technik automatisch bedruckt und mit Ihren Angaben versehen.
|
||||
<br />Um die Echtheit des Passes zu verifizieren, erhält jeder Pass eine Sicherheitsnummer und wird letztendlich abgestempelt.
|
||||
<br />Folgende Formate stehen Ihnen zur Verfügung:
|
||||
<ul><li>Hacker*innen-Reisepass</li>
|
||||
<li>Junghackerpass</li></ul>'
|
||||
],
|
||||
'topic2' => [
|
||||
'title' => 'Nachträgliche Verifizierung der Reisepässe',
|
||||
'content' => 'Sie besitzen bereits ein Reisedokument, welches jedoch noch nicht verifiziert wurde?
|
||||
<br />Wir gehen mit Ihnen die nötigen Schritte durch, um Ihren Pass zu legitimisieren.
|
||||
<br />Völlig unkompliziert.'
|
||||
],
|
||||
'topic3' => [
|
||||
'title' => 'Zweitausstellung bei Verlust oder maximaler Auslastung Ihres Reisepasses',
|
||||
'content' => 'Sollten Sie Ihren Reisepass verlieren oder sollte der Reisepass seine maximle Kapazität ausgereizt haben,
|
||||
<br />stellen wir Ihnen gerne ein Ersatzdomument aus.
|
||||
<br />Leider können Stempel vorheriger Besuche der Botschaften [Hackspaces] des CCC nicht ersetzt werden.'
|
||||
],
|
||||
'topic4' => [
|
||||
'title' => 'Anwesenheitsbestätigung',
|
||||
'content' => 'Sollten Sie eine Bestätigung Ihres Besuchs benötigen, stellen wir Ihnen diese selbstverständlich in Papierform aus.'
|
||||
]
|
||||
],
|
||||
'faq' => [
|
||||
'title' => 'Häufig gestellte Fragen',
|
||||
'q1' => 'Was stellt ihr eigentlich dar?',
|
||||
'a1' => 'Wir stellen durch gelebte Bürokratie Hacker*innen-Reisepässe aus. Manche würden dies als ein Rollenspiel betrachten,
|
||||
aber in unserer C3Gov-Verwaltungsvorschrift stehen keine Informationen bezüglich Rollen, die spielen.',
|
||||
'q2' => 'Wo kann ich mit diesen Reisepässen einreisen?',
|
||||
'a2' => 'Mit den vom C3Gov ausgestellten Reisepässen können Sie problemlos in die Bezirksregion des CCC und dessen Botschaften einreisen.',
|
||||
'q3' => 'Wozu dienen diese Reisepässe noch?',
|
||||
'a3' => 'Die Reisepässe stellen eine bequeme Möglichkeit dar, Ihren Aufenthalt in der Bezirksregion des CCC und dessen Botschaften festzuhalten.
|
||||
Sie können Ihren Aufenthalt durch Stempel oder Sticker der jeweiligen Botschaften bestätigen lassen.',
|
||||
'q4' => 'Gibt es nur diesen einen Reisepass?',
|
||||
'a4' => 'Wir bieten den Hacker*innen-Reisepass sowie den Junghackerpass an. Letzteres jedoch nur in der deutschen Ausgabe.',
|
||||
'q5' => 'Wie kann ich einen Hacker*innen-Reisepass beantragen?',
|
||||
'a5_1' => 'Klicken Sie auf',
|
||||
'a5_2' => 'diesen Verweis',
|
||||
'a5_3' => 'oder auf "Jetzt beantragen" in der Navigationsleiste oder auf die riesige
|
||||
leuchtende Schaltfläche auf der Startseite. Dort befolgen Sie einfach die Anweisungen.'
|
||||
],
|
||||
'imprint' => [
|
||||
'title' => 'Impressum',
|
||||
'alt' => 'Ernsthaftigkeit',
|
||||
'content' => 'Hiermit weisen wir darauf hin, dass es sich bei dieser Plattform um ein Projekt des Chaos Computer Club Essen handelt, welche keine rechtlich geltenden Dokumente ausstellt.
|
||||
<br />Es handelt sich weder um echte Dienstleistungen im gewerblichen Sinne, noch um geschäftsmäßige Dienste.
|
||||
<br />Aus diesem Grund entfällt die Impressumspflicht.
|
||||
<br /><br />Dennoch geben wir freiwillig Kontaktinformationen an:'
|
||||
],
|
||||
'contact' => [
|
||||
'title' => 'Kontakt',
|
||||
'alt' => 'Kontakt',
|
||||
'content' => 'Wenn Sie Fragen haben, kontaktieren Sie uns:',
|
||||
'fediverse' => 'Fediversum:',
|
||||
'email' => 'Elektronische Postadresse:',
|
||||
'phone' => 'Telefon/Fax:'
|
||||
],
|
||||
'preapplication' => [
|
||||
'title' => 'Vorantrag auf Reisepass gem. § 5 C3GovVerwV',
|
||||
'content' => 'Bitte wählen Sie eine (temporäre) Bezirksregion aus, um Ihren Vorantrag auf einen Reisepass zu stellen.
|
||||
<br />Nachdem Sie den Vorantrag abgeschickt haben, erhalten Sie eine Bestätigung via elektronischer Post.',
|
||||
'noevent' => 'Es sind derzeit keine Termine verfügbar.',
|
||||
'region' => 'Bezirksregion',
|
||||
'time_ends' => 'Frist endet am',
|
||||
'passport_type' => 'Reisepass-Typ',
|
||||
'passport' => [
|
||||
'standard' => 'Hacker*innen-Reisepass',
|
||||
'kid' => 'Junghackerpass',
|
||||
],
|
||||
'mail' => 'Elektronische Postadresse',
|
||||
'firstname' => 'Vorname (Nick)',
|
||||
'lastname' => 'Nachname (optional)',
|
||||
'location' => 'Hackspace / Ort (optional)',
|
||||
'notes' => 'Notizen',
|
||||
'reference_number' => 'Bearbeitungsnummer',
|
||||
'created_at' => 'Eingereicht am',
|
||||
'actions' => 'Aktionen',
|
||||
'apply' => 'Vorantrag abschicken',
|
||||
'edit' => [
|
||||
'title' => 'Anträge bearbeiten',
|
||||
'description' => 'Hier können Sie Anträge bearbeiten oder löschen.',
|
||||
'add' => 'Antrag hinzufügen',
|
||||
'save' => 'Speichern',
|
||||
'delete' => 'Löschen',
|
||||
'generated' => 'Wird generiert',
|
||||
'download' => [
|
||||
'title' => 'Voranträge herunterladen',
|
||||
'description' => 'Hier können Sie alle Voranträge eines Bezirksregion-Termines als PDF herunterladen.',
|
||||
'button' => 'PDF generieren'
|
||||
]
|
||||
]
|
||||
],
|
||||
'common' => [
|
||||
'error_occurred' => 'Es ist ein Fehler geschehen: ',
|
||||
'not_permitted' => 'Sie sind nicht berechtigt diese Funktion zu nutzen.',
|
||||
],
|
||||
'login' => [
|
||||
'password_mismatch' => 'Ihr Kennwort stimmt nicht überein.',
|
||||
'registration_success' => 'Sie wurden erfolgreich registriert.',
|
||||
'login_success' => 'Sie wurden erfolgreich angemeldet.',
|
||||
'title' => 'Anmelden',
|
||||
'please_login' => 'Bitte melden Sie sich gefälligst an!',
|
||||
'email' => 'Elektronische Postadresse:',
|
||||
'email_title' => 'Nur echte Adressen der elektronischen Post verwenden!',
|
||||
'password' => 'Kennwort:',
|
||||
'logged_in' => 'Sie sind angemeldet.',
|
||||
'logout' => 'Abmelden',
|
||||
'register_title' => 'Registrieren',
|
||||
'please_register' => 'Bitte registrieren Sie sich.',
|
||||
'username' => 'Name/Nick:',
|
||||
'password_repeat' => 'Kennwort wiederholen:',
|
||||
'registration_token' => 'Registrierungsnummer:',
|
||||
],
|
||||
'blog' => [
|
||||
'confirm_save' => 'Eintrag wirklich speichern?',
|
||||
'confirm_delete' => 'Eintrag wirklich löschen?',
|
||||
'add_post' => 'Post hinzufügen',
|
||||
'edit_delete_posts' => 'Posts ändern/löschen',
|
||||
'published' => 'Veröffentlichen?',
|
||||
'language' => 'Sprache',
|
||||
'title' => 'Titel',
|
||||
'content' => 'Inhalt',
|
||||
'add' => 'Hinzufügen',
|
||||
'save' => 'Speichern',
|
||||
'delete' => 'Löschen',
|
||||
'created_by' => 'Erstellt von',
|
||||
'created_at' => 'Erstellt am',
|
||||
'updated_at' => 'Verändert am',
|
||||
'title_placeholder' => 'Titel eingeben...',
|
||||
'content_placeholder' => 'Text/HTML eingeben...',
|
||||
],
|
||||
'ticker' => [
|
||||
'title' => 'Ticker bearbeiten',
|
||||
'description' => 'Hier kann der Ticker verändert werden.',
|
||||
'active_messages' => 'Aktive Tickernachrichten:',
|
||||
'delete_selected' => 'Ausgewählte Tickernachricht löschen',
|
||||
'create_message' => 'Tickernachricht erstellen:',
|
||||
'add' => 'Tickernachricht hinzufügen',
|
||||
'delete_success' => 'Löschen erfolgreich!',
|
||||
'insert_success' => 'Einfügen erfolgreich!',
|
||||
],
|
||||
'events' => [
|
||||
'description' => 'Hier können Sie Termine hinzufügen oder löschen.',
|
||||
'add' => 'Termin hinzufügen',
|
||||
'delete' => 'Termin löschen',
|
||||
'active' => 'Termin aktiviert (sichtbar)',
|
||||
'name' => 'Terminname',
|
||||
'list' => 'Termine',
|
||||
'setActivity' => 'Aktiv-Status ändern',
|
||||
'shortname' => 'Namenscode',
|
||||
'from_date_internal' => 'Fristanfang',
|
||||
'to_date_internal' => 'Fristende',
|
||||
'from_date_visible' => 'Terminstart',
|
||||
'to_date_visible' => 'Terminende',
|
||||
],
|
||||
'errors' => [
|
||||
'403' => [
|
||||
'title' => '403 - Kein Zutritt',
|
||||
'message' => 'Sie haben keine Berechtigung, diesen Bereich zu betreten. Bitte legitimieren Sie sich ordnungsgemäß.',
|
||||
],
|
||||
'404' => [
|
||||
'title' => '404 - Dokument nicht auffindbar',
|
||||
'message' => 'Das von Ihnen gesuchte Dokument oder die Seite konnte in unseren Archiven nicht gefunden werden.',
|
||||
],
|
||||
'500' => [
|
||||
'title' => '500 - Interner Behördenfehler',
|
||||
'message' => 'Es ist ein unerwarteter Fehler in der Bearbeitung aufgetreten. Bitte versuchen Sie es später erneut.',
|
||||
],
|
||||
]
|
||||
];
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'Diese Anmeldedaten wurden von uns nicht genehmigt.',
|
||||
'password' => 'Dieses Kennwort entspricht nicht der Form.',
|
||||
'throttle' => 'Ihre Frist zur Anmeldung ist abgelaufen. Bitte versuchen Sie es in :seconds Sekunden erneut.',
|
||||
|
||||
];
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'LoginController' => [
|
||||
'not_permitted' => 'Diese Aktion ist nicht zugelassen.',
|
||||
'email_in_use' => 'Diese elektronische Postadresse wird bereits verwendet.',
|
||||
'invalid_token' => 'Machen Sie die Musik aus.',
|
||||
'wrong_credentials' => 'Falsch. Einfach nur falsch.',
|
||||
'unknown_error' => 'Ein unbekannter Fehler ist aufgetreten.',
|
||||
'unknown_error_with_details' => 'Ein unbekannter Fehler ist aufgetreten: :error',
|
||||
],
|
||||
'PreApplicationController' => [
|
||||
'success' => 'Antrag erfolgreich abgeschickt. Bitte überprüfen Sie Ihr elektronisches Postfach.',
|
||||
'already_submitted' => 'Sie haben bereits einen Antrag abgeschickt.',
|
||||
'wrong_passport_type' => 'Falscher Reisepass-Typ',
|
||||
'invalid_email_format' => 'Ungültiges E-Mail-Format',
|
||||
'failed_to_process' => 'Fehler beim Verarbeiten des Antrages: :error',
|
||||
'invalid_characters' => 'Ungültige Zeichen im Namen oder Ort',
|
||||
'event_not_found' => 'Chaos-Event nicht gefunden',
|
||||
'application_not_found' => 'Antrag nicht gefunden',
|
||||
],
|
||||
'BlogController' => [
|
||||
'error_occurred' => 'Ein Fehler ist beim Verarbeiten des Blogs aufgetreten: :error',
|
||||
],
|
||||
'TickerController' => [
|
||||
'error_occurred' => 'Ein Fehler ist beim Verarbeiten des Tickers aufgetreten: :error',
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'preapplication' => [
|
||||
'subject' => 'Ihr Vorantrag auf einen Reisepass',
|
||||
'body1' => "Hallo,<br /><br />Ihr Vorantrag wurde erfolgreich eingereicht.<br />Ihre Bearbeitungsnummer lautet: ",
|
||||
'body2' => "<br /><br />Folgende Daten wurden übermittelt:<br />",
|
||||
'body3' => "<br /><br />Bitte heben Sie diese E-Mail unbedingt auf.<br />Wenn möglich, drucken Sie das Formblatt 5, welches sich im E-Mail-Anhang befindet, aus. Tragen Sie Ihre Bearbeitungsnummer ein und bringen Sie es bei Abholung mit.",
|
||||
'body4' => "<br /><br />Wir bitten ebenfalls um die Beachtung der Spendengebührenverordnung, welche sich ebenfalls im Anhang befindet.",
|
||||
'signature' => "Mit freundlichen Grüßen,<br /><br /><br />Ihr C3Gov - Ihre Behörde in der Bezirksregion CCC"
|
||||
]
|
||||
];
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pagination Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used by the paginator library to build
|
||||
| the simple pagination links. You are free to change them to anything
|
||||
| you want to customize your views to better match your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'previous' => '« Vorherige',
|
||||
'next' => 'Nächste »',
|
||||
|
||||
];
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are the default lines which match reasons
|
||||
| that are given by the password broker for a password update attempt
|
||||
| outcome such as failure due to an invalid password / reset token.
|
||||
|
|
||||
*/
|
||||
|
||||
'reset' => 'Ihr Kennwort wurde zurückgesetzt.',
|
||||
'sent' => 'Wir haben Ihnen ein Kennwortzurücksetz-Internetwebseitenlink per elektronischer Post zugesandt.',
|
||||
'throttled' => 'Ihre Frist ist abgelaufen. Eine erneute Beantragung ist erst später möglich.',
|
||||
'token' => 'Dieser Kennwortzurücksetz-Internetwebseitenlink ist bereits außerhalb der Meldefrist.',
|
||||
'user' => "Diese Adresse der elektronischen Post ist uns nicht bekannt.",
|
||||
|
||||
];
|
||||
@@ -0,0 +1,200 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages here.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => ':attribute müssen akzeptiert werden.',
|
||||
'accepted_if' => ':attribute müssen akzeptiert werden, wenn :other ist :value.',
|
||||
'active_url' => ':attribute muss ein valider Internetseitenlink sein.',
|
||||
'after' => ':attribute muss nach dem :date liegen.',
|
||||
'after_or_equal' => ':attribute muss genau am oder nach dem :date liegen.',
|
||||
'alpha' => ':attribute darf nur Buchstaben enthalten.',
|
||||
'alpha_dash' => ':attribute darf nur Buchstaben, Nummern, Minus und Unterstriche enthalten.',
|
||||
'alpha_num' => ':attribute darf nur Buchstaben und Nummern enthalten.',
|
||||
'any_of' => ':attribute ist nicht valide.',
|
||||
'array' => ':attribute muss ein Array sein.',
|
||||
'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.',
|
||||
'before' => ':attribute vor dem :date liegen.',
|
||||
'before_or_equal' => ':attribute muss genau am oder nach dem :date liegen.',
|
||||
'between' => [
|
||||
'array' => 'The :attribute field must have between :min and :max items.',
|
||||
'file' => 'The :attribute field must be between :min and :max kilobytes.',
|
||||
'numeric' => 'The :attribute field must be between :min and :max.',
|
||||
'string' => 'The :attribute field must be between :min and :max characters.',
|
||||
],
|
||||
'boolean' => 'The :attribute field must be true or false.',
|
||||
'can' => 'The :attribute field contains an unauthorized value.',
|
||||
'confirmed' => 'The :attribute field confirmation does not match.',
|
||||
'contains' => 'The :attribute field is missing a required value.',
|
||||
'current_password' => 'The password is incorrect.',
|
||||
'date' => ':attribute muss ein echtes Datum sein.',
|
||||
'date_equals' => 'The :attribute field must be a date equal to :date.',
|
||||
'date_format' => 'The :attribute field must match the format :format.',
|
||||
'decimal' => 'The :attribute field must have :decimal decimal places.',
|
||||
'declined' => 'The :attribute field must be declined.',
|
||||
'declined_if' => 'The :attribute field must be declined when :other is :value.',
|
||||
'different' => 'The :attribute field and :other must be different.',
|
||||
'digits' => 'The :attribute field must be :digits digits.',
|
||||
'digits_between' => 'The :attribute field must be between :min and :max digits.',
|
||||
'dimensions' => 'The :attribute field has invalid image dimensions.',
|
||||
'distinct' => 'The :attribute field has a duplicate value.',
|
||||
'doesnt_contain' => 'The :attribute field must not contain any of the following: :values.',
|
||||
'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.',
|
||||
'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.',
|
||||
'email' => 'The :attribute field must be a valid email address.',
|
||||
'encoding' => 'The :attribute field must be encoded in :encoding.',
|
||||
'ends_with' => 'The :attribute field must end with one of the following: :values.',
|
||||
'enum' => 'The selected :attribute is invalid.',
|
||||
'exists' => 'The selected :attribute is invalid.',
|
||||
'extensions' => 'The :attribute field must have one of the following extensions: :values.',
|
||||
'file' => 'The :attribute field must be a file.',
|
||||
'filled' => 'The :attribute field must have a value.',
|
||||
'gt' => [
|
||||
'array' => 'The :attribute field must have more than :value items.',
|
||||
'file' => 'The :attribute field must be greater than :value kilobytes.',
|
||||
'numeric' => 'The :attribute field must be greater than :value.',
|
||||
'string' => 'The :attribute field must be greater than :value characters.',
|
||||
],
|
||||
'gte' => [
|
||||
'array' => 'The :attribute field must have :value items or more.',
|
||||
'file' => 'The :attribute field must be greater than or equal to :value kilobytes.',
|
||||
'numeric' => 'The :attribute field must be greater than or equal to :value.',
|
||||
'string' => 'The :attribute field must be greater than or equal to :value characters.',
|
||||
],
|
||||
'hex_color' => 'The :attribute field must be a valid hexadecimal color.',
|
||||
'image' => 'The :attribute field must be an image.',
|
||||
'in' => 'The selected :attribute is invalid.',
|
||||
'in_array' => 'The :attribute field must exist in :other.',
|
||||
'in_array_keys' => 'The :attribute field must contain at least one of the following keys: :values.',
|
||||
'integer' => 'The :attribute field must be an integer.',
|
||||
'ip' => 'The :attribute field must be a valid IP address.',
|
||||
'ipv4' => 'The :attribute field must be a valid IPv4 address.',
|
||||
'ipv6' => 'The :attribute field must be a valid IPv6 address.',
|
||||
'json' => 'The :attribute field must be a valid JSON string.',
|
||||
'list' => 'The :attribute field must be a list.',
|
||||
'lowercase' => 'The :attribute field must be lowercase.',
|
||||
'lt' => [
|
||||
'array' => 'The :attribute field must have less than :value items.',
|
||||
'file' => 'The :attribute field must be less than :value kilobytes.',
|
||||
'numeric' => 'The :attribute field must be less than :value.',
|
||||
'string' => 'The :attribute field must be less than :value characters.',
|
||||
],
|
||||
'lte' => [
|
||||
'array' => 'The :attribute field must not have more than :value items.',
|
||||
'file' => 'The :attribute field must be less than or equal to :value kilobytes.',
|
||||
'numeric' => 'The :attribute field must be less than or equal to :value.',
|
||||
'string' => 'The :attribute field must be less than or equal to :value characters.',
|
||||
],
|
||||
'mac_address' => 'The :attribute field must be a valid MAC address.',
|
||||
'max' => [
|
||||
'array' => 'The :attribute field must not have more than :max items.',
|
||||
'file' => 'The :attribute field must not be greater than :max kilobytes.',
|
||||
'numeric' => 'The :attribute field must not be greater than :max.',
|
||||
'string' => 'The :attribute field must not be greater than :max characters.',
|
||||
],
|
||||
'max_digits' => 'The :attribute field must not have more than :max digits.',
|
||||
'mimes' => 'The :attribute field must be a file of type: :values.',
|
||||
'mimetypes' => 'The :attribute field must be a file of type: :values.',
|
||||
'min' => [
|
||||
'array' => 'The :attribute field must have at least :min items.',
|
||||
'file' => 'The :attribute field must be at least :min kilobytes.',
|
||||
'numeric' => 'The :attribute field must be at least :min.',
|
||||
'string' => 'The :attribute field must be at least :min characters.',
|
||||
],
|
||||
'min_digits' => 'The :attribute field must have at least :min digits.',
|
||||
'missing' => 'The :attribute field must be missing.',
|
||||
'missing_if' => 'The :attribute field must be missing when :other is :value.',
|
||||
'missing_unless' => 'The :attribute field must be missing unless :other is :value.',
|
||||
'missing_with' => 'The :attribute field must be missing when :values is present.',
|
||||
'missing_with_all' => 'The :attribute field must be missing when :values are present.',
|
||||
'multiple_of' => 'The :attribute field must be a multiple of :value.',
|
||||
'not_in' => 'The selected :attribute is invalid.',
|
||||
'not_regex' => 'The :attribute field format is invalid.',
|
||||
'numeric' => 'The :attribute field must be a number.',
|
||||
'password' => [
|
||||
'letters' => 'The :attribute field must contain at least one letter.',
|
||||
'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.',
|
||||
'numbers' => 'The :attribute field must contain at least one number.',
|
||||
'symbols' => 'The :attribute field must contain at least one symbol.',
|
||||
'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',
|
||||
],
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'present_if' => 'The :attribute field must be present when :other is :value.',
|
||||
'present_unless' => 'The :attribute field must be present unless :other is :value.',
|
||||
'present_with' => 'The :attribute field must be present when :values is present.',
|
||||
'present_with_all' => 'The :attribute field must be present when :values are present.',
|
||||
'prohibited' => 'The :attribute field is prohibited.',
|
||||
'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
|
||||
'prohibited_if_accepted' => 'The :attribute field is prohibited when :other is accepted.',
|
||||
'prohibited_if_declined' => 'The :attribute field is prohibited when :other is declined.',
|
||||
'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
|
||||
'prohibits' => 'The :attribute field prohibits :other from being present.',
|
||||
'regex' => 'The :attribute field format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_array_keys' => 'The :attribute field must contain entries for: :values.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
'required_if_accepted' => 'The :attribute field is required when :other is accepted.',
|
||||
'required_if_declined' => 'The :attribute field is required when :other is declined.',
|
||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
||||
'required_with' => 'The :attribute field is required when :values is present.',
|
||||
'required_with_all' => 'The :attribute field is required when :values are present.',
|
||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
||||
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
||||
'same' => 'The :attribute field must match :other.',
|
||||
'size' => [
|
||||
'array' => 'The :attribute field must contain :size items.',
|
||||
'file' => 'The :attribute field must be :size kilobytes.',
|
||||
'numeric' => 'The :attribute field must be :size.',
|
||||
'string' => 'The :attribute field must be :size characters.',
|
||||
],
|
||||
'starts_with' => 'The :attribute field must start with one of the following: :values.',
|
||||
'string' => 'The :attribute field must be a string.',
|
||||
'timezone' => 'The :attribute field must be a valid timezone.',
|
||||
'unique' => 'The :attribute has already been taken.',
|
||||
'uploaded' => 'The :attribute failed to upload.',
|
||||
'uppercase' => 'The :attribute field must be uppercase.',
|
||||
'url' => 'The :attribute field must be a valid URL.',
|
||||
'ulid' => 'The :attribute field must be a valid ULID.',
|
||||
'uuid' => 'The :attribute field must be a valid UUID.',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
'custom' => [
|
||||
'attribute-name' => [
|
||||
'rule-name' => 'custom-message',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap our attribute placeholder
|
||||
| with something more reader friendly such as "E-Mail Address" instead
|
||||
| of "email". This simply helps us make our message more expressive.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,258 @@
|
||||
<?php
|
||||
|
||||
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.',
|
||||
'fediverse' => 'C3Gov on Fediverse',
|
||||
'signed_in_as' => 'Signed in as:',
|
||||
'guest' => 'Guest account',
|
||||
'news_alt' => 'News',
|
||||
'progress_flag' => 'LGBTQIA+ Progress Flag',
|
||||
'lead_by' => 'A district government authority run by transgender beings',
|
||||
'language' => [
|
||||
'en' => 'English',
|
||||
'de' => 'Deutsch',
|
||||
],
|
||||
'nav' => [
|
||||
'about' => 'About us',
|
||||
'services' => 'Services',
|
||||
'news' => 'News',
|
||||
'documents' => 'Documents',
|
||||
'contact' => 'Contact',
|
||||
'imprint' => 'Imprint',
|
||||
'apply' => 'Apply now',
|
||||
'editTicker' => 'Edit ticker',
|
||||
'editNews' => 'Edit news',
|
||||
'editApplications' => 'Edit applications',
|
||||
'events' => 'C3Gov appointments',
|
||||
'logout' => 'Logout',
|
||||
'login' => 'Log in',
|
||||
'register' => 'Register'
|
||||
],
|
||||
'index' => [
|
||||
'welcome' => 'Welcome to the Internet presence of the C3Gov'
|
||||
],
|
||||
'about' => [
|
||||
'subtitle' => 'Hassle-Free Entry into CCC\'s Permanent and Temporary District Regions',
|
||||
'text1' => 'C3Gov offers you the issuance of our certified travel documents, which allow you to enter the CCC\'s permanent and temporary district regions hassle-free and have your stay verified.',
|
||||
'text2' => 'Our team uses high-quality stamps and the latest technology when issuing these documents.',
|
||||
'text3' => 'NEW!!!',
|
||||
'text4' => 'To expand our online presence, you can now also visit us on the Fediverse.',
|
||||
'text5' => 'To do so, click on this link:',
|
||||
'insertvideo' => '*Insert promotional video here*'
|
||||
],
|
||||
'documents' => [
|
||||
'description' => 'Here you can find our administration regulations and their attachments as well as any forms concerning the issuance of travel documents.',
|
||||
'verwaltungsvorschrift' => 'Administration Regulations',
|
||||
'donation' => 'Donation Fee Regulations',
|
||||
'fb1' => [
|
||||
'name' => 'Form 1',
|
||||
'description' => 'Application for the initial issuance of a hacker passport'
|
||||
],
|
||||
'fb1k' => [
|
||||
'name' => 'Form 1k',
|
||||
'description' => 'Antrag auf Erstausstellung eines Junghacker*innen-Reisepasses'
|
||||
],
|
||||
'fb2' => [
|
||||
'name' => 'Form 2',
|
||||
'description' => 'Application for the replacement or reissuance of a hacker passport'
|
||||
],
|
||||
'fb2k' => [
|
||||
'name' => 'Form 2k (German only!)',
|
||||
'description' => 'Antrag auf Ersatz- oder Zweitausstellungen eines Junghacker*innen-Reisepasses'
|
||||
],
|
||||
'fb3' => [
|
||||
'name' => 'Form 3',
|
||||
'description' => 'Application for the retroactive validation of a hacker passport'
|
||||
],
|
||||
'fb5' => [
|
||||
'name' => 'Form 5',
|
||||
'description' => 'Pre-registration for a passport application'
|
||||
],
|
||||
'fb7' => [
|
||||
'name' => 'Form 7',
|
||||
'description' => 'Complaint Form in accordance with §7 (2) C3GovVerwV'
|
||||
]
|
||||
],
|
||||
'services' => [
|
||||
'title' => 'Our Services',
|
||||
'alt' => [
|
||||
'first_issue' => 'First issue of a passport',
|
||||
'rejected' => 'Rejected application',
|
||||
'replacement' => 'Replacement passport',
|
||||
'stamps' => 'Official stamps',
|
||||
],
|
||||
'topic1' => [
|
||||
'title' => 'Issuance of Hacker Passports',
|
||||
'content' => 'Our team handles the issuance of travel documents.
|
||||
<br />The passports are automatically printed using the latest technology - personalised with your details.
|
||||
<br />To verify the authenticity of the passport, each one is assigned a security number and finally stamped.
|
||||
<br />The following formats are available:
|
||||
<ul><li>Hacker Passport</li>
|
||||
<li>Junghackerpass [German only]</li></ul>'
|
||||
],
|
||||
'topic2' => [
|
||||
'title' => 'Retrospective Verification of Passports',
|
||||
'content' => 'Do you already have a passport that has not yet been verified?
|
||||
<br />We will guide you through the necessary steps to validate your passport.
|
||||
<br />Simple and clean.'
|
||||
],
|
||||
'topic3' => [
|
||||
'title' => 'Replacement Passport issued in the Event of Loss or when your Passport is full',
|
||||
'content' => 'Should you lose your passport or should your passport have reached its maximum capacity,
|
||||
<br />we will be happy to issue you with a replacement document.
|
||||
<br />Unfortunately, stamps from previous visits to the CCC\'s embassies [hackspaces] cannot be replaced.'
|
||||
],
|
||||
'topic4' => [
|
||||
'title' => 'Certification of Attendance',
|
||||
'content' => 'Should you require certification of your visit, we will of course provide you with an official document.'
|
||||
]
|
||||
],
|
||||
'faq' => [
|
||||
'title' => 'Frequently Asked Questions',
|
||||
'q1' => 'What exactly do you do?',
|
||||
'a1' => 'We issue hacker passports through the practice of bureaucracy. Some might view this as a role-playing game,
|
||||
but our C3Gov administrative regulations contain no information regarding roles which are playing.',
|
||||
'q2' => 'Where can I enter with these passports?',
|
||||
'a2' => 'With the passports issued by C3Gov, you can easily enter the CCC district region and its embassies.',
|
||||
'q3' => 'What else are these passports used for?',
|
||||
'a3' => 'The passports provide a convenient way to document your stay in the CCC district region and its embassies.
|
||||
You can have your stay confirmed with stamps or stickers from the respective embassies.',
|
||||
'q4' => 'Is this the only passport available?',
|
||||
'a4' => 'We offer the Hacker Passport and the Young Hacker Passport. The latter, however, is only available in the German edition.',
|
||||
'q5' => 'How can I apply for a Hacker Passport?',
|
||||
'a5_1' => 'Click on',
|
||||
'a5_2' => 'this link',
|
||||
'a5_3' => ', or on “Apply Now” in the navigation bar, or on the large
|
||||
glowing button on the homepage. There, simply follow the instructions.'
|
||||
],
|
||||
'imprint' => [
|
||||
'title' => 'Imprint',
|
||||
'alt' => 'Serious business',
|
||||
'content' => 'We hereby inform you that this platform is a project of the Chaos Computer Club Essen and does not issue any legally binding documents.
|
||||
<br />It does not constitute genuine commercial services or business-related services.
|
||||
<br />Therefore, the legal requirement to provide an imprint does not apply.
|
||||
<br /><br />However, we are happy to provide you with contact information:'
|
||||
],
|
||||
'contact' => [
|
||||
'title' => 'Contact',
|
||||
'alt' => 'Contact',
|
||||
'content' => 'If you have any questions, please contact us:',
|
||||
'fediverse' => 'Fediverse:',
|
||||
'email' => 'Electronic mail address:',
|
||||
'phone' => 'Telephone/Fax:'
|
||||
],
|
||||
'preapplication' => [
|
||||
'title' => 'Pre-application for Passport according to § 5 C3GovVerwV',
|
||||
'content' => 'Please select a (temporary) district region to submit your pre-application for a passport.
|
||||
<br />After you have submitted the pre-application, you will receive a confirmation by e-mail.',
|
||||
'noevent' => 'Currently, there are no open appointment slots available.',
|
||||
'region' => 'District region',
|
||||
'time_ends' => 'Time ends on',
|
||||
'passport_type' => 'Passport type',
|
||||
'passport' => [
|
||||
'standard' => 'Hacker Passport',
|
||||
'kid' => 'Junghackerpass [German only]',
|
||||
],
|
||||
'mail' => 'E-mail address',
|
||||
'firstname' => 'First name (Nickname)',
|
||||
'lastname' => 'Last name (optional)',
|
||||
'location' => 'Hackspace / Location (optional)',
|
||||
'notes' => 'Notes',
|
||||
'reference_number' => 'Reference number',
|
||||
'created_at' => 'Submitted at',
|
||||
'actions' => 'Actions',
|
||||
'apply' => 'Submit pre-application',
|
||||
'edit' => [
|
||||
'title' => 'Edit applications',
|
||||
'description' => 'Here you can edit or delete applications.',
|
||||
'add' => 'Add application',
|
||||
'save' => 'Save',
|
||||
'delete' => 'Delete',
|
||||
'generated' => 'Generated',
|
||||
'download' => [
|
||||
'title' => 'Download pre-applications',
|
||||
'description' => 'Here you can download all pre-applications of a district region appointment as a PDF.',
|
||||
'button' => 'Generate PDF'
|
||||
]
|
||||
]
|
||||
],
|
||||
'common' => [
|
||||
'error_occurred' => 'An error occurred: ',
|
||||
'not_permitted' => 'You are not authorized to use this function.',
|
||||
],
|
||||
'login' => [
|
||||
'password_mismatch' => 'Your password does not match.',
|
||||
'registration_success' => 'You have been successfully registered.',
|
||||
'login_success' => 'You have been successfully logged in.',
|
||||
'title' => 'Log in',
|
||||
'please_login' => 'Please log in!',
|
||||
'email' => 'Electronic email address:',
|
||||
'email_title' => 'Only use real electronic mail addresses!',
|
||||
'password' => 'Password:',
|
||||
'logged_in' => 'You are logged in.',
|
||||
'logout' => 'Log out',
|
||||
'register_title' => 'Register',
|
||||
'please_register' => 'Please register.',
|
||||
'username' => 'Name/Nick:',
|
||||
'password_repeat' => 'Repeat password:',
|
||||
'registration_token' => 'Registration token:',
|
||||
],
|
||||
'blog' => [
|
||||
'confirm_save' => 'Do you really want to save this entry?',
|
||||
'confirm_delete' => 'Do you really want to delete this entry?',
|
||||
'add_post' => 'Add post',
|
||||
'edit_delete_posts' => 'Change/delete posts',
|
||||
'published' => 'Published?',
|
||||
'language' => 'Language',
|
||||
'title' => 'Title',
|
||||
'content' => 'Content',
|
||||
'add' => 'Add',
|
||||
'save' => 'Save',
|
||||
'delete' => 'Delete',
|
||||
'created_by' => 'Created by',
|
||||
'created_at' => 'Created at',
|
||||
'updated_at' => 'Updated at',
|
||||
'title_placeholder' => 'Enter title...',
|
||||
'content_placeholder' => 'Enter text/HTML...',
|
||||
],
|
||||
'ticker' => [
|
||||
'title' => 'Edit ticker',
|
||||
'description' => 'Here the ticker can be modified.',
|
||||
'active_messages' => 'Active ticker messages:',
|
||||
'delete_selected' => 'Delete selected ticker message',
|
||||
'create_message' => 'Create ticker message:',
|
||||
'add' => 'Add ticker message',
|
||||
'delete_success' => 'Deleted successfully!',
|
||||
'insert_success' => 'Inserted successfully!',
|
||||
],
|
||||
'events' => [
|
||||
'description' => 'Here you can add or delete appointments.',
|
||||
'add' => 'Add appointment',
|
||||
'delete' => 'Delete appointment',
|
||||
'active' => 'Appointment active (visible)',
|
||||
'name' => 'Name of appointment',
|
||||
'list' => 'Appointments',
|
||||
'setActivity' => 'Change activity status',
|
||||
'shortname' => 'Shortcode',
|
||||
'from_date_internal' => 'Start date for pre-applications',
|
||||
'to_date_internal' => 'End date for pre-applications',
|
||||
'from_date_visible' => 'Start date of appointment',
|
||||
'to_date_visible' => 'End date of appointment',
|
||||
],
|
||||
'errors' => [
|
||||
'403' => [
|
||||
'title' => '403 - No Admission',
|
||||
'message' => 'You are not authorized to access this area. Please provide proper identification.',
|
||||
],
|
||||
'404' => [
|
||||
'title' => '404 - Document not found',
|
||||
'message' => 'The document or page you were looking for could not be found in our archives.',
|
||||
],
|
||||
'500' => [
|
||||
'title' => '500 - Internal Authority Error',
|
||||
'message' => 'An unexpected processing error has occurred. Please try again later.',
|
||||
],
|
||||
]
|
||||
];
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'These credentials do not match our records.',
|
||||
'password' => 'The provided password is incorrect.',
|
||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
||||
|
||||
];
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'LoginController' => [
|
||||
'not_permitted' => 'This action is not permitted.',
|
||||
'email_in_use' => 'This email address is already in use.',
|
||||
'invalid_token' => 'Invalid token.',
|
||||
'wrong_credentials' => 'Wrong credentials.',
|
||||
'unknown_error' => 'An unknown error occurred.',
|
||||
'unknown_error_with_details' => 'An unknown error occurred: :error',
|
||||
],
|
||||
'PreApplicationController' => [
|
||||
'success' => 'Application submitted successfully. Please check your email inbox.',
|
||||
'already_submitted' => 'You have already submitted an application.',
|
||||
'wrong_passport_type' => 'Wrong passport type',
|
||||
'invalid_email_format' => 'Invalid email format',
|
||||
'failed_to_process' => 'Failed to process application: :error',
|
||||
'invalid_characters' => 'Invalid characters in name or location',
|
||||
'event_not_found' => 'Chaos event not found',
|
||||
'application_not_found' => 'Application not found'
|
||||
],
|
||||
'BlogController' => [
|
||||
'error_occurred' => 'An error occurred while processing the blog: :error',
|
||||
],
|
||||
'TickerController' => [
|
||||
'error_occurred' => 'An error occurred while processing the ticker: :error',
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'preapplication' => [
|
||||
'subject' => 'Your pre-applicaction for issuing a hacker passport',
|
||||
'body1' => "Hello,<br /><br />Your preliminary application has been successfully submitted.<br />Your reference number is:",
|
||||
'body2' => "<br /><br />The following data has been submitted:<br />",
|
||||
'body3' => "<br /><br />Please keep this email for your records. <br />If possible, print out form 5, which is attached to the email. Fill in your reference number and bring it with you when you pick up your hacker passport.",
|
||||
'body4' => "<br /><br />We also ask you to observe the donation regulation, which is also attached.",
|
||||
'signature' => "Sincerely,<br /><br /><br />Your C3Gov – Your government authority in the CCC district region"
|
||||
]
|
||||
];
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pagination Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used by the paginator library to build
|
||||
| the simple pagination links. You are free to change them to anything
|
||||
| you want to customize your views to better match your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'previous' => '« Previous',
|
||||
'next' => 'Next »',
|
||||
|
||||
];
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are the default lines which match reasons
|
||||
| that are given by the password broker for a password update attempt
|
||||
| outcome such as failure due to an invalid password / reset token.
|
||||
|
|
||||
*/
|
||||
|
||||
'reset' => 'Your password has been reset.',
|
||||
'sent' => 'We have emailed your password reset link.',
|
||||
'throttled' => 'Please wait before retrying.',
|
||||
'token' => 'This password reset token is invalid.',
|
||||
'user' => "We can't find a user with that email address.",
|
||||
|
||||
];
|
||||
@@ -0,0 +1,200 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages here.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => 'The :attribute field must be accepted.',
|
||||
'accepted_if' => 'The :attribute field must be accepted when :other is :value.',
|
||||
'active_url' => 'The :attribute field must be a valid URL.',
|
||||
'after' => 'The :attribute field must be a date after :date.',
|
||||
'after_or_equal' => 'The :attribute field must be a date after or equal to :date.',
|
||||
'alpha' => 'The :attribute field must only contain letters.',
|
||||
'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.',
|
||||
'alpha_num' => 'The :attribute field must only contain letters and numbers.',
|
||||
'any_of' => 'The :attribute field is invalid.',
|
||||
'array' => 'The :attribute field must be an array.',
|
||||
'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.',
|
||||
'before' => 'The :attribute field must be a date before :date.',
|
||||
'before_or_equal' => 'The :attribute field must be a date before or equal to :date.',
|
||||
'between' => [
|
||||
'array' => 'The :attribute field must have between :min and :max items.',
|
||||
'file' => 'The :attribute field must be between :min and :max kilobytes.',
|
||||
'numeric' => 'The :attribute field must be between :min and :max.',
|
||||
'string' => 'The :attribute field must be between :min and :max characters.',
|
||||
],
|
||||
'boolean' => 'The :attribute field must be true or false.',
|
||||
'can' => 'The :attribute field contains an unauthorized value.',
|
||||
'confirmed' => 'The :attribute field confirmation does not match.',
|
||||
'contains' => 'The :attribute field is missing a required value.',
|
||||
'current_password' => 'The password is incorrect.',
|
||||
'date' => 'The :attribute field must be a valid date.',
|
||||
'date_equals' => 'The :attribute field must be a date equal to :date.',
|
||||
'date_format' => 'The :attribute field must match the format :format.',
|
||||
'decimal' => 'The :attribute field must have :decimal decimal places.',
|
||||
'declined' => 'The :attribute field must be declined.',
|
||||
'declined_if' => 'The :attribute field must be declined when :other is :value.',
|
||||
'different' => 'The :attribute field and :other must be different.',
|
||||
'digits' => 'The :attribute field must be :digits digits.',
|
||||
'digits_between' => 'The :attribute field must be between :min and :max digits.',
|
||||
'dimensions' => 'The :attribute field has invalid image dimensions.',
|
||||
'distinct' => 'The :attribute field has a duplicate value.',
|
||||
'doesnt_contain' => 'The :attribute field must not contain any of the following: :values.',
|
||||
'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.',
|
||||
'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.',
|
||||
'email' => 'The :attribute field must be a valid email address.',
|
||||
'encoding' => 'The :attribute field must be encoded in :encoding.',
|
||||
'ends_with' => 'The :attribute field must end with one of the following: :values.',
|
||||
'enum' => 'The selected :attribute is invalid.',
|
||||
'exists' => 'The selected :attribute is invalid.',
|
||||
'extensions' => 'The :attribute field must have one of the following extensions: :values.',
|
||||
'file' => 'The :attribute field must be a file.',
|
||||
'filled' => 'The :attribute field must have a value.',
|
||||
'gt' => [
|
||||
'array' => 'The :attribute field must have more than :value items.',
|
||||
'file' => 'The :attribute field must be greater than :value kilobytes.',
|
||||
'numeric' => 'The :attribute field must be greater than :value.',
|
||||
'string' => 'The :attribute field must be greater than :value characters.',
|
||||
],
|
||||
'gte' => [
|
||||
'array' => 'The :attribute field must have :value items or more.',
|
||||
'file' => 'The :attribute field must be greater than or equal to :value kilobytes.',
|
||||
'numeric' => 'The :attribute field must be greater than or equal to :value.',
|
||||
'string' => 'The :attribute field must be greater than or equal to :value characters.',
|
||||
],
|
||||
'hex_color' => 'The :attribute field must be a valid hexadecimal color.',
|
||||
'image' => 'The :attribute field must be an image.',
|
||||
'in' => 'The selected :attribute is invalid.',
|
||||
'in_array' => 'The :attribute field must exist in :other.',
|
||||
'in_array_keys' => 'The :attribute field must contain at least one of the following keys: :values.',
|
||||
'integer' => 'The :attribute field must be an integer.',
|
||||
'ip' => 'The :attribute field must be a valid IP address.',
|
||||
'ipv4' => 'The :attribute field must be a valid IPv4 address.',
|
||||
'ipv6' => 'The :attribute field must be a valid IPv6 address.',
|
||||
'json' => 'The :attribute field must be a valid JSON string.',
|
||||
'list' => 'The :attribute field must be a list.',
|
||||
'lowercase' => 'The :attribute field must be lowercase.',
|
||||
'lt' => [
|
||||
'array' => 'The :attribute field must have less than :value items.',
|
||||
'file' => 'The :attribute field must be less than :value kilobytes.',
|
||||
'numeric' => 'The :attribute field must be less than :value.',
|
||||
'string' => 'The :attribute field must be less than :value characters.',
|
||||
],
|
||||
'lte' => [
|
||||
'array' => 'The :attribute field must not have more than :value items.',
|
||||
'file' => 'The :attribute field must be less than or equal to :value kilobytes.',
|
||||
'numeric' => 'The :attribute field must be less than or equal to :value.',
|
||||
'string' => 'The :attribute field must be less than or equal to :value characters.',
|
||||
],
|
||||
'mac_address' => 'The :attribute field must be a valid MAC address.',
|
||||
'max' => [
|
||||
'array' => 'The :attribute field must not have more than :max items.',
|
||||
'file' => 'The :attribute field must not be greater than :max kilobytes.',
|
||||
'numeric' => 'The :attribute field must not be greater than :max.',
|
||||
'string' => 'The :attribute field must not be greater than :max characters.',
|
||||
],
|
||||
'max_digits' => 'The :attribute field must not have more than :max digits.',
|
||||
'mimes' => 'The :attribute field must be a file of type: :values.',
|
||||
'mimetypes' => 'The :attribute field must be a file of type: :values.',
|
||||
'min' => [
|
||||
'array' => 'The :attribute field must have at least :min items.',
|
||||
'file' => 'The :attribute field must be at least :min kilobytes.',
|
||||
'numeric' => 'The :attribute field must be at least :min.',
|
||||
'string' => 'The :attribute field must be at least :min characters.',
|
||||
],
|
||||
'min_digits' => 'The :attribute field must have at least :min digits.',
|
||||
'missing' => 'The :attribute field must be missing.',
|
||||
'missing_if' => 'The :attribute field must be missing when :other is :value.',
|
||||
'missing_unless' => 'The :attribute field must be missing unless :other is :value.',
|
||||
'missing_with' => 'The :attribute field must be missing when :values is present.',
|
||||
'missing_with_all' => 'The :attribute field must be missing when :values are present.',
|
||||
'multiple_of' => 'The :attribute field must be a multiple of :value.',
|
||||
'not_in' => 'The selected :attribute is invalid.',
|
||||
'not_regex' => 'The :attribute field format is invalid.',
|
||||
'numeric' => 'The :attribute field must be a number.',
|
||||
'password' => [
|
||||
'letters' => 'The :attribute field must contain at least one letter.',
|
||||
'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.',
|
||||
'numbers' => 'The :attribute field must contain at least one number.',
|
||||
'symbols' => 'The :attribute field must contain at least one symbol.',
|
||||
'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',
|
||||
],
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'present_if' => 'The :attribute field must be present when :other is :value.',
|
||||
'present_unless' => 'The :attribute field must be present unless :other is :value.',
|
||||
'present_with' => 'The :attribute field must be present when :values is present.',
|
||||
'present_with_all' => 'The :attribute field must be present when :values are present.',
|
||||
'prohibited' => 'The :attribute field is prohibited.',
|
||||
'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
|
||||
'prohibited_if_accepted' => 'The :attribute field is prohibited when :other is accepted.',
|
||||
'prohibited_if_declined' => 'The :attribute field is prohibited when :other is declined.',
|
||||
'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
|
||||
'prohibits' => 'The :attribute field prohibits :other from being present.',
|
||||
'regex' => 'The :attribute field format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_array_keys' => 'The :attribute field must contain entries for: :values.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
'required_if_accepted' => 'The :attribute field is required when :other is accepted.',
|
||||
'required_if_declined' => 'The :attribute field is required when :other is declined.',
|
||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
||||
'required_with' => 'The :attribute field is required when :values is present.',
|
||||
'required_with_all' => 'The :attribute field is required when :values are present.',
|
||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
||||
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
||||
'same' => 'The :attribute field must match :other.',
|
||||
'size' => [
|
||||
'array' => 'The :attribute field must contain :size items.',
|
||||
'file' => 'The :attribute field must be :size kilobytes.',
|
||||
'numeric' => 'The :attribute field must be :size.',
|
||||
'string' => 'The :attribute field must be :size characters.',
|
||||
],
|
||||
'starts_with' => 'The :attribute field must start with one of the following: :values.',
|
||||
'string' => 'The :attribute field must be a string.',
|
||||
'timezone' => 'The :attribute field must be a valid timezone.',
|
||||
'unique' => 'The :attribute has already been taken.',
|
||||
'uploaded' => 'The :attribute failed to upload.',
|
||||
'uppercase' => 'The :attribute field must be uppercase.',
|
||||
'url' => 'The :attribute field must be a valid URL.',
|
||||
'ulid' => 'The :attribute field must be a valid ULID.',
|
||||
'uuid' => 'The :attribute field must be a valid UUID.',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
'custom' => [
|
||||
'attribute-name' => [
|
||||
'rule-name' => 'custom-message',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap our attribute placeholder
|
||||
| with something more reader friendly such as "E-Mail Address" instead
|
||||
| of "email". This simply helps us make our message more expressive.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"$schema": "https://www.schemastore.org/package.json",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "vite build",
|
||||
"dev": "vite"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/vite": "^4.0.0",
|
||||
"axios": "^1.11.0",
|
||||
"concurrently": "^9.0.1",
|
||||
"laravel-vite-plugin": "^3.0.0",
|
||||
"tailwindcss": "^4.0.0",
|
||||
"vite": "^8.0.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true"
|
||||
>
|
||||
<testsuites>
|
||||
<testsuite name="Unit">
|
||||
<directory>tests/Unit</directory>
|
||||
</testsuite>
|
||||
<testsuite name="Feature">
|
||||
<directory>tests/Feature</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<source>
|
||||
<include>
|
||||
<directory>app</directory>
|
||||
</include>
|
||||
</source>
|
||||
<php>
|
||||
<env name="APP_ENV" value="testing"/>
|
||||
<env name="APP_MAINTENANCE_DRIVER" value="file"/>
|
||||
<env name="BCRYPT_ROUNDS" value="4"/>
|
||||
<env name="BROADCAST_CONNECTION" value="null"/>
|
||||
<env name="CACHE_STORE" value="array"/>
|
||||
<env name="DB_CONNECTION" value="sqlite"/>
|
||||
<env name="DB_DATABASE" value=":memory:"/>
|
||||
<env name="DB_URL" value=""/>
|
||||
<env name="MAIL_MAILER" value="array"/>
|
||||
<env name="QUEUE_CONNECTION" value="sync"/>
|
||||
<env name="SESSION_DRIVER" value="array"/>
|
||||
<env name="PULSE_ENABLED" value="false"/>
|
||||
<env name="TELESCOPE_ENABLED" value="false"/>
|
||||
<env name="NIGHTWATCH_ENABLED" value="false"/>
|
||||
</php>
|
||||
</phpunit>
|
||||
@@ -0,0 +1,25 @@
|
||||
<IfModule mod_rewrite.c>
|
||||
<IfModule mod_negotiation.c>
|
||||
Options -MultiViews -Indexes
|
||||
</IfModule>
|
||||
|
||||
RewriteEngine On
|
||||
|
||||
# Handle Authorization Header
|
||||
RewriteCond %{HTTP:Authorization} .
|
||||
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
||||
|
||||
# Handle X-XSRF-Token Header
|
||||
RewriteCond %{HTTP:x-xsrf-token} .
|
||||
RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}]
|
||||
|
||||
# Redirect Trailing Slashes If Not A Folder...
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_URI} (.+)/$
|
||||
RewriteRule ^ %1 [L,R=301]
|
||||
|
||||
# Send Requests To Front Controller...
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteRule ^ index.php [L]
|
||||
</IfModule>
|
||||
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="762" viewBox="0 0 6000 3810" style="--vh: 16.59px;">
|
||||
<path fill="#6d2380" d="M0 0h6000v3810H0z"/>
|
||||
<path fill="#2c58a4" d="M0 0h6000v3175H0z"/>
|
||||
<path fill="#78b82a" d="M0 0h6000v2540H0z"/>
|
||||
<path fill="#efe524" d="M0 0h6000v1905H0z"/>
|
||||
<path fill="#f28917" d="M0 0h6000v1270H0z"/>
|
||||
<path fill="#e22016" d="M0 0h6000v635H0z"/>
|
||||
<path d="M0 0h1577l1764 1905-1764 1905H0z"/>
|
||||
<path fill="#945516" d="M0 0h1209l1764 1905-1764 1905H0z"/>
|
||||
<path fill="#7bcce5" d="M0 0h844l1764 1905L844 3810H0z"/>
|
||||
<path fill="#f4aec8" d="M0 0h477l1764 1905L477 3810H0z"/>
|
||||
<path fill="#fff" d="M0 0h111l1763 1905L111 3810H0z"/>
|
||||
<path fill="#fdd817" d="m0 278 1507 1627L0 3532z"/>
|
||||
<circle cx="556" cy="1905" r="404" fill="none" stroke="#66338b" stroke-width="95"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 893 B |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 300 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 1.3 MiB |
@@ -0,0 +1,9 @@
|
||||
.notes-input {
|
||||
width: 100%;
|
||||
min-width: 150px;
|
||||
height: 4em;
|
||||
}
|
||||
.first-name-input, .last-name-input, .location-input {
|
||||
width: 100%;
|
||||
min-width: 80px;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
.blogEdit {
|
||||
padding: 0.5em;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
.blogEdit button {
|
||||
padding: 0.7em;
|
||||
font-size: 1em;
|
||||
background-color: #ccc;
|
||||
}
|
||||
|
||||
.blogEdit input[type=text] {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.blogEdit textarea {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
@keyframes fadeAndScale {
|
||||
0% {
|
||||
opacity: 0;
|
||||
/*transform: scale(1);*/
|
||||
}
|
||||
100% {
|
||||
opacity: 0.25;
|
||||
/*transform: scale(1);*/
|
||||
}
|
||||
}
|
||||
.funny-gift {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
object-fit: cover;
|
||||
z-index: 9999;
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
animation: fadeAndScale 20s linear forwards;
|
||||
animation-delay: 2s;
|
||||
}
|
||||
@@ -0,0 +1,311 @@
|
||||
html, body {
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
min-height: 100vh;
|
||||
background-color: #4b0600;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
select {
|
||||
font-size: 1em;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
|
||||
*, *:before, *:after {
|
||||
box-sizing: inherit;
|
||||
}
|
||||
|
||||
.ticker {
|
||||
background-color: #0c0;
|
||||
height: 3vh;
|
||||
min-height: 24px;
|
||||
flex-shrink: 0;
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
.header {
|
||||
background-color: #999;
|
||||
min-height: 20vh;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.header-main {
|
||||
width: 200px;
|
||||
height: 20vh;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.banner {
|
||||
flex-grow: 1;
|
||||
height: 20vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.banner img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.language-area {
|
||||
width: 200px;
|
||||
height: 20vh;
|
||||
background-color: #ccc;
|
||||
padding: 10px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.language {
|
||||
margin: 5px;
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.language img {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.login-status {
|
||||
text-align: center;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
#logo {
|
||||
max-width: 90%;
|
||||
max-height: 18vh;
|
||||
}
|
||||
|
||||
.main {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin: 0;
|
||||
flex-grow: 1;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
background-color: #ccc;
|
||||
width: 200px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.content {
|
||||
background-color: #dcccaa;
|
||||
flex-grow: 1;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.content-img {
|
||||
width: 33%;
|
||||
height: 150px;
|
||||
display: block;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.navbar ul {
|
||||
list-style-type: none;
|
||||
padding: 10px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.navbar li {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.navbar a {
|
||||
text-decoration: none;
|
||||
color: #333;
|
||||
display: block;
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.navbar a:hover {
|
||||
background-color: #bbb;
|
||||
}
|
||||
|
||||
.navbar-no-hover-effect a:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@media (max-width: 1024px) {
|
||||
.header {
|
||||
flex-direction: column;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.header-main, .banner, .language-area {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.main {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.navbar ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.content {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#logo {
|
||||
max-height: 100px;
|
||||
}
|
||||
|
||||
.banner img {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.eingabemaske {
|
||||
border: 5px inset;
|
||||
padding: 0.5em;
|
||||
overflow-x: auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@media (min-width: 1025px) {
|
||||
.eingabemaske {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1024px) {
|
||||
.eingabemaske {
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
.eingabemaske input, .eingabemaske select, .eingabemaske textarea, .eingabemaske button {
|
||||
font-size: 0.9em;
|
||||
padding: 0.2em;
|
||||
}
|
||||
}
|
||||
|
||||
.eingabemaske table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.eingabemaske table, th, td {
|
||||
border: 4px outset;
|
||||
}
|
||||
|
||||
.eingabemaske th, .eingabemaske td {
|
||||
padding: 0.3em;
|
||||
}
|
||||
|
||||
.eingabemaske input {
|
||||
font-size: 1em;
|
||||
padding: 0.5em;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.eingabemaske input[type=checkbox] {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.eingabemaske button {
|
||||
padding: 1em;
|
||||
border: 4px outset;
|
||||
font-size: 1.2em;
|
||||
background-color: #ccc;
|
||||
}
|
||||
|
||||
#fehlermeldung {
|
||||
border: 4px outset;
|
||||
width: 100%;
|
||||
max-width: 500px;
|
||||
}
|
||||
|
||||
nav {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.w-5 {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
.h-5 {
|
||||
height: 5vh;
|
||||
}
|
||||
|
||||
.footer {
|
||||
width: 100%;
|
||||
background-color: #999;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
flex-shrink: 0;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.split-left {
|
||||
float: left;
|
||||
width: 50%;
|
||||
}
|
||||
.split-right {
|
||||
float: left;
|
||||
width: 50%;
|
||||
border-left: 1px dotted #000;
|
||||
padding-left: 30px;
|
||||
}
|
||||
.content::after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.progress-flag {
|
||||
height: 13px;
|
||||
}
|
||||
|
||||
.apply-button {
|
||||
font-size: 2.5em;
|
||||
padding: 20px 40px;
|
||||
border: 5px solid cyan;
|
||||
border-radius: 10px;
|
||||
cursor: pointer;
|
||||
font-weight: bold;
|
||||
animation: blink 2s infinite;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
0%, 100% {
|
||||
background-color: white;
|
||||
color: #4b0600;
|
||||
}
|
||||
50% {
|
||||
background-color: cyan;
|
||||
color: black;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
// Determine if the application is in maintenance mode...
|
||||
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
|
||||
require $maintenance;
|
||||
}
|
||||
|
||||
// Register the Composer autoloader...
|
||||
require __DIR__.'/../vendor/autoload.php';
|
||||
|
||||
// Bootstrap Laravel and handle the request...
|
||||
/** @var Application $app */
|
||||
$app = require_once __DIR__.'/../bootstrap/app.php';
|
||||
|
||||
$app->handleRequest(Request::capture());
|
||||
@@ -0,0 +1,95 @@
|
||||
$(function() {
|
||||
$('select[autocomplete="off"]').each(function() {
|
||||
let selectedValue = $(this).find('option[selected]').val();
|
||||
if (selectedValue) {
|
||||
$(this).val(selectedValue);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function addBlog(){
|
||||
|
||||
let b = {};
|
||||
b.title = $('#blogTitle_new').val();
|
||||
b.body = $('#blogBody_new').val();
|
||||
b.published = $('#blogPublished_new').is(":checked") ? "1" : "0";
|
||||
b.language = $('#blogLanguage_new').val();
|
||||
|
||||
console.log(b);
|
||||
|
||||
if(window.confirm(i18n.blog.confirm_save)){
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/intern/nachrichten/add",
|
||||
data: b,
|
||||
dataType: "json",
|
||||
success:function(r){
|
||||
if(r.messageStatus === "success"){
|
||||
$('#blogTitle_new').val("");
|
||||
$('#blogBody_new').val("");
|
||||
$('#blogLanguage_new').val("de");
|
||||
location.reload();
|
||||
} else {
|
||||
alert(r.errorMessage);
|
||||
}
|
||||
},
|
||||
error:function(r, a, e){
|
||||
alert(i18n.common.error_occurred + e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function editBlog(blogId){
|
||||
let b = {};
|
||||
b.id = blogId;
|
||||
b.title = $('#blogTitle_'+blogId).val();
|
||||
b.body = $('#blogBody_'+blogId).val();
|
||||
b.published = $('#blogPublished_'+blogId).is(":checked") ? "1" : "0";
|
||||
b.language = $('#blogLanguage_'+blogId).val();
|
||||
|
||||
if(window.confirm(i18n.blog.confirm_save)){
|
||||
$.ajax({
|
||||
type: "PUT",
|
||||
url: "/intern/nachrichten/edit",
|
||||
data: b,
|
||||
dataType: "json",
|
||||
success:function(r){
|
||||
if(r.messageStatus === "success"){
|
||||
location.reload();
|
||||
} else {
|
||||
alert(r.errorMessage);
|
||||
}
|
||||
},
|
||||
error:function(r, a, e){
|
||||
alert(i18n.common.error_occurred + e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function deleteBlog(blogId){
|
||||
let b = {};
|
||||
b.id = blogId;
|
||||
|
||||
if(window.confirm(i18n.blog.confirm_delete)){
|
||||
$.ajax({
|
||||
type:"DELETE",
|
||||
url:"/intern/nachrichten/delete",
|
||||
data:b,
|
||||
dataType:"json",
|
||||
success:function(r){
|
||||
if(r.messageStatus === "success"){
|
||||
$('#blogDelete_' + blogId).closest('.blogEdit').fadeOut(300, function() {
|
||||
$(this).remove();
|
||||
});
|
||||
} else {
|
||||
alert(r.errorMessage);
|
||||
}
|
||||
},
|
||||
error:function(r, a, e){
|
||||
alert(i18n.common.error_occurred + e);
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||