Chaos-Events und Voranmeldungen
This commit is contained in:
@@ -25,7 +25,7 @@ class BlogController extends Controller
|
|||||||
$blog->save();
|
$blog->save();
|
||||||
return ['messageStatus' => 'success', 'errorMessage' => ''];
|
return ['messageStatus' => 'success', 'errorMessage' => ''];
|
||||||
} catch (\Illuminate\Database\QueryException $e) {
|
} catch (\Illuminate\Database\QueryException $e) {
|
||||||
return ['messageStatus' => 'danger', 'errorMessage' => $e->getMessage()];
|
return ['messageStatus' => 'danger', 'errorMessage' => __("controller_messages.BlogController.error_occurred", ["error" => $e->getMessage()])];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
abort(404);
|
abort(404);
|
||||||
@@ -43,7 +43,7 @@ class BlogController extends Controller
|
|||||||
$blog->save();
|
$blog->save();
|
||||||
return ['messageStatus' => 'success', 'errorMessage' => ''];
|
return ['messageStatus' => 'success', 'errorMessage' => ''];
|
||||||
} catch (\Illuminate\Database\QueryException $e) {
|
} catch (\Illuminate\Database\QueryException $e) {
|
||||||
return ['messageStatus' => 'failure', 'errorMessage' => $e->getMessage()];
|
return ['messageStatus' => 'failure', 'errorMessage' => __("controller_messages.BlogController.error_occurred", ["error" => $e->getMessage()])];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
abort(404);
|
abort(404);
|
||||||
@@ -58,7 +58,7 @@ class BlogController extends Controller
|
|||||||
}
|
}
|
||||||
return ['messageStatus' => 'success', 'errorMessage' => ''];
|
return ['messageStatus' => 'success', 'errorMessage' => ''];
|
||||||
} catch(\Exception $e){
|
} catch(\Exception $e){
|
||||||
return ['messageStatus' => 'failure', 'errorMessage' => $e->getMessage()];
|
return ['messageStatus' => 'failure', 'errorMessage' => __("controller_messages.BlogController.error_occurred", ["error" => $e->getMessage()])];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
abort(404);
|
abort(404);
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class LoginController extends Controller
|
|||||||
// messageStatus success|failure|not permitted
|
// messageStatus success|failure|not permitted
|
||||||
|
|
||||||
|
|
||||||
$json = ["messageStatus" => "failure", "errorMessage" => "idk"];
|
$json = ["messageStatus" => "failure", "errorMessage" => __("controller_messages.LoginController.unknown_error")];
|
||||||
|
|
||||||
$mail = $request->input('mail');
|
$mail = $request->input('mail');
|
||||||
$username = $request->input('username');
|
$username = $request->input('username');
|
||||||
@@ -24,14 +24,14 @@ class LoginController extends Controller
|
|||||||
$token = $request->input('token');
|
$token = $request->input('token');
|
||||||
|
|
||||||
if(preg_match('/@c3gov\.de$/', $mail) != 1){
|
if(preg_match('/@c3gov\.de$/', $mail) != 1){
|
||||||
return ["messageStatus" => "not permitted", "errorMessage" => ""];
|
return ["messageStatus" => "not permitted", "errorMessage" => __("controller_messages.LoginController.not_permitted")];
|
||||||
}
|
}
|
||||||
|
|
||||||
$rt = RegisterToken::where('token', $token)->first();
|
$rt = RegisterToken::where('token', $token)->first();
|
||||||
if($rt) {
|
if($rt) {
|
||||||
$u = User::whereEmail($mail)->first();
|
$u = User::whereEmail($mail)->first();
|
||||||
if($u) {
|
if($u) {
|
||||||
return ["messageStatus" => "failure", "errorMessage" => "Diese elektronische Postadresse wird bereits verwendet."];
|
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.LoginController.email_in_use")];
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
$u = new User();
|
$u = new User();
|
||||||
@@ -43,10 +43,10 @@ class LoginController extends Controller
|
|||||||
|
|
||||||
$rt->delete();
|
$rt->delete();
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return ["messageStatus" => "failure", "errorMessage" => $e->getMessage()];
|
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.LoginController.unknown_error_with_details", ["error" => $e->getMessage()])];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return ["messageStatus" => "failure", "errorMessage" => "Machen Sie die Musik aus."];
|
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.LoginController.invalid_token")];
|
||||||
}
|
}
|
||||||
|
|
||||||
return ["messageStatus" => "success", "errorMessage" => ""];
|
return ["messageStatus" => "success", "errorMessage" => ""];
|
||||||
@@ -64,10 +64,10 @@ class LoginController extends Controller
|
|||||||
Auth::login($u);
|
Auth::login($u);
|
||||||
return ["messageStatus" => "success", "errorMessage" => ""];
|
return ["messageStatus" => "success", "errorMessage" => ""];
|
||||||
} else {
|
} else {
|
||||||
return ["messageStatus" => "failure", "errorMessage" => "Falsch. Einfach nur falsch."];
|
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.LoginController.wrong_credentials")];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return ["messageStatus" => "failure", "errorMessage" => "Falsch. Einfach nur falsch."];
|
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.LoginController.wrong_credentials")];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
86
app/Http/Controllers/PreApplicationController.php
Normal file
86
app/Http/Controllers/PreApplicationController.php
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
<?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\Facades\Mail;
|
||||||
|
use Log;
|
||||||
|
use Nette\Utils\Random;
|
||||||
|
|
||||||
|
class PreApplicationController extends Controller
|
||||||
|
{
|
||||||
|
public function send(Request $request){
|
||||||
|
$event = $request->input('event');
|
||||||
|
|
||||||
|
$ce = ChaosEvents::where('id', $event)->where('to_date', '>=', now())->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){
|
||||||
|
|
||||||
|
$free_reference_number = false;
|
||||||
|
while(!$free_reference_number){
|
||||||
|
$reference_number = $ce->shortname . '-' . strtoupper($passport_type) . '-' . Random::generate(4, "0-9") . '-' . Random::generate(4, "0-9") . '-' . Random::generate(4, "0-9");
|
||||||
|
$free_reference_number = !PreApplications::where('reference_number', $reference_number)->exists();
|
||||||
|
}
|
||||||
|
|
||||||
|
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 = $reference_number;
|
||||||
|
$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")];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,7 +19,7 @@ class TickerController extends Controller
|
|||||||
}
|
}
|
||||||
return ["messageStatus" => "success", "errorMessage" => ""];
|
return ["messageStatus" => "success", "errorMessage" => ""];
|
||||||
} catch(\Exception $e){
|
} catch(\Exception $e){
|
||||||
return ["messageStatus" => "failure", "errorMessage" => $e->getMessage()];
|
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.TickerController.error_occurred", ["error" => $e->getMessage()])];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -38,7 +38,7 @@ class TickerController extends Controller
|
|||||||
$ticker->save();
|
$ticker->save();
|
||||||
return ["messageStatus" => "success", "errorMessage" => ""];
|
return ["messageStatus" => "success", "errorMessage" => ""];
|
||||||
} catch(\Exception $e){
|
} catch(\Exception $e){
|
||||||
return ["messageStatus" => "failure", "errorMessage" => $e->getMessage()];
|
return ["messageStatus" => "failure", "errorMessage" => __("controller_messages.TickerController.error_occurred", ["error" => $e->getMessage()])];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
abort(404);
|
abort(404);
|
||||||
|
|||||||
66
app/Mail/PreApplicationMail.php
Normal file
66
app/Mail/PreApplicationMail.php
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
<?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')
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the message envelope.
|
||||||
|
*/
|
||||||
|
public function envelope(): Envelope
|
||||||
|
{
|
||||||
|
return new Envelope(
|
||||||
|
subject: __('mail.preapplication.subject'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the message content definition.
|
||||||
|
*/
|
||||||
|
public function content(): Content
|
||||||
|
{
|
||||||
|
App::setLocale($this->lang);
|
||||||
|
return new Content(
|
||||||
|
view: 'mail.preapplication',
|
||||||
|
with: ['pa' => $this->pa],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the attachments for the message.
|
||||||
|
*
|
||||||
|
* @return array<int, Attachment>
|
||||||
|
*/
|
||||||
|
public function attachments(): array
|
||||||
|
{
|
||||||
|
$lang = match (App::getLocale()) {
|
||||||
|
'de' => 'dk',
|
||||||
|
'en' => 'ek',
|
||||||
|
default => 'dk',
|
||||||
|
};
|
||||||
|
return [
|
||||||
|
Attachment::fromPath(public_path('Dokumente/c3gov_fb5' . $lang . '.pdf'))
|
||||||
|
->withMime('application/pdf'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
18
app/Models/ChaosEvents.php
Normal file
18
app/Models/ChaosEvents.php
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class ChaosEvents extends Model
|
||||||
|
{
|
||||||
|
protected $table = 'chaos_events';
|
||||||
|
|
||||||
|
public function preApplications() {
|
||||||
|
return $this->hasMany('App\Models\PreApplications', 'event_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getActiveEvents(){
|
||||||
|
return self::where('to_date', '>=', now())->where('from_date', '<=', now())->get();
|
||||||
|
}
|
||||||
|
}
|
||||||
15
app/Models/PreApplications.php
Normal file
15
app/Models/PreApplications.php
Normal file
@@ -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');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -65,7 +65,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'timezone' => 'UTC',
|
'timezone' => 'Europe/Berlin',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?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');
|
||||||
|
$table->date('to_date');
|
||||||
|
$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');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -65,5 +65,21 @@ return [
|
|||||||
'title' => 'Kontakt',
|
'title' => 'Kontakt',
|
||||||
'content' => 'Schreiben Sie uns im <a href="https://chaos.social/@c3gov">Fediversum</a>
|
'content' => 'Schreiben Sie uns im <a href="https://chaos.social/@c3gov">Fediversum</a>
|
||||||
<br />oder per elektronischer Post an: <a href="mailto:Dezernat7Zustaendigkeit@C3Gov.De">Dezernat7Zustaendigkeit@C3Gov.De</a>'
|
<br />oder per elektronischer Post an: <a href="mailto:Dezernat7Zustaendigkeit@C3Gov.De">Dezernat7Zustaendigkeit@C3Gov.De</a>'
|
||||||
]
|
],
|
||||||
|
'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 temporäre Bezirksregionen verfügbar.',
|
||||||
|
'passport_type' => 'Pass-Typ',
|
||||||
|
'passport' => [
|
||||||
|
'standard' => 'Hacker*innen-Reisepass',
|
||||||
|
'kid' => 'Junghackerpass',
|
||||||
|
],
|
||||||
|
'mail' => 'Elektronische Postadresse',
|
||||||
|
'firstname' => 'Vorname (Nick)',
|
||||||
|
'lastname' => 'Nachname (optional)',
|
||||||
|
'location' => 'Hackspace / Ort (optional)',
|
||||||
|
'apply' => 'Vorantrag abschicken'
|
||||||
|
]
|
||||||
];
|
];
|
||||||
|
|||||||
27
lang/de/controller_messages.php
Normal file
27
lang/de/controller_messages.php
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?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' => 'Voranmeldung erfolgreich abgeschickt. Bitte überprüfen Sie Ihr elektronisches Postfach.',
|
||||||
|
'already_submitted' => 'Sie haben bereits einen Vorantrag abgeschickt.',
|
||||||
|
'wrong_passport_type' => 'Falscher Passtyp',
|
||||||
|
'invalid_email_format' => 'Ungültiges E-Mail-Format',
|
||||||
|
'failed_to_process' => 'Fehler beim Verarbeiten der Voranmeldung: :error',
|
||||||
|
'invalid_characters' => 'Ungültige Zeichen im Namen oder Ort',
|
||||||
|
'event_not_found' => 'Chaos-Event 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',
|
||||||
|
],
|
||||||
|
];
|
||||||
11
lang/de/mail.php
Normal file
11
lang/de/mail.php
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?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.",
|
||||||
|
'signature' => "Mit freundlichen Grüßen,<br /><br /><br />Ihr C3Gov - Ihr Amt in der Bezirksregion CCC"
|
||||||
|
]
|
||||||
|
];
|
||||||
@@ -65,5 +65,21 @@ return [
|
|||||||
'title' => 'Contact',
|
'title' => 'Contact',
|
||||||
'content' => 'Write us over in the <a href="https://chaos.social/@c3gov">fediverse</a>
|
'content' => 'Write us over in the <a href="https://chaos.social/@c3gov">fediverse</a>
|
||||||
<br />or via email to: <a href="mailto:Dezernat7Zustaendigkeit@C3Gov.De">Dezernat7Zustaendigkeit@C3Gov.De</a>'
|
<br />or via email to: <a href="mailto:Dezernat7Zustaendigkeit@C3Gov.De">Dezernat7Zustaendigkeit@C3Gov.De</a>'
|
||||||
]
|
],
|
||||||
|
'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' => 'There are currently no temporary district regions available.',
|
||||||
|
'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)',
|
||||||
|
'apply' => 'Submit pre-application'
|
||||||
|
]
|
||||||
];
|
];
|
||||||
|
|||||||
27
lang/en/controller_messages.php
Normal file
27
lang/en/controller_messages.php
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?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' => 'Preapplication submitted successfully. Please check your email inbox.',
|
||||||
|
'already_submitted' => 'You have already submitted a preapplication.',
|
||||||
|
'wrong_passport_type' => 'Wrong passport type',
|
||||||
|
'invalid_email_format' => 'Invalid email format',
|
||||||
|
'failed_to_process' => 'Failed to process preapplication: :error',
|
||||||
|
'invalid_characters' => 'Invalid characters in name or location',
|
||||||
|
'event_not_found' => 'Chaos event not found',
|
||||||
|
],
|
||||||
|
'BlogController' => [
|
||||||
|
'error_occurred' => 'An error occurred while processing the blog: :error',
|
||||||
|
],
|
||||||
|
'TickerController' => [
|
||||||
|
'error_occurred' => 'An error occurred while processing the ticker: :error',
|
||||||
|
],
|
||||||
|
];
|
||||||
11
lang/en/mail.php
Normal file
11
lang/en/mail.php
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?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.",
|
||||||
|
'signature' => "Sincerely,<br /><br /><br />Your C3Gov – Your office in the CCC district region"
|
||||||
|
]
|
||||||
|
];
|
||||||
Submodule public/Dokumente updated: 8a14d91484...95ab7f9b4e
43
public/js/preapplication/preapplication.js
Normal file
43
public/js/preapplication/preapplication.js
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
$(function() {
|
||||||
|
$('select[autocomplete="off"]').each(function() {
|
||||||
|
let selectedValue = $(this).find('option[selected]').val();
|
||||||
|
if (selectedValue) {
|
||||||
|
$(this).val(selectedValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function vorantragAbschicken(){
|
||||||
|
|
||||||
|
let data = {};
|
||||||
|
data.event = $('#eventSelect').val();
|
||||||
|
data.passport_type = $('#passport_type').val();
|
||||||
|
data.mail = $('#mail').val();
|
||||||
|
data.first_name = $('#firstname').val();
|
||||||
|
data.last_name = $('#lastname').val();
|
||||||
|
data.location = $('#location').val();
|
||||||
|
|
||||||
|
console.log(data);
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: "/vorbeantragen/absenden",
|
||||||
|
data: data,
|
||||||
|
dataType: "json",
|
||||||
|
success:function(r){
|
||||||
|
if(r.messageStatus === "success"){
|
||||||
|
$('#mail').val("");
|
||||||
|
$('#firstname').val("");
|
||||||
|
$('#lastname').val("");
|
||||||
|
$('#location').val("");
|
||||||
|
alert(r.errorMessage);
|
||||||
|
} else {
|
||||||
|
alert(r.errorMessage);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(r, a, e){
|
||||||
|
alert(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,46 @@
|
|||||||
|
@php use App\Models\ChaosEvents; @endphp
|
||||||
@extends('layout.app')
|
@extends('layout.app')
|
||||||
@section('scripts')
|
@section('scripts')
|
||||||
|
<script src="{{ asset('/js/preapplication/preapplication.js') }}"></script>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
|
<h1>{{ __('app.preapplication.title') }}</h1>
|
||||||
|
|
||||||
|
<p>{!! __('app.preapplication.content') !!}</p>
|
||||||
|
|
||||||
|
@forelse (ChaosEvents::getActiveEvents() as $event)
|
||||||
|
<div class="eingabemaske">
|
||||||
|
<select name="event" id="eventSelect">
|
||||||
|
<option value="{{ $event->id }}">{{ $event->name }}</option>
|
||||||
|
</select>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<label for="passport_type">{{ __('app.preapplication.passport_type') }}</label>
|
||||||
|
<select name="passport_type" id="passport_type">
|
||||||
|
<option value="d">{{ __('app.preapplication.passport.standard') }}</option>
|
||||||
|
<option value="k">{{ __('app.preapplication.passport.kid') }}</option>
|
||||||
|
</select>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<label for="mail">{{ __('app.preapplication.mail') }}:</label>
|
||||||
|
<input type="text" id="mail" name="mail" placeholder="{{ __('app.preapplication.mail') }}" required>
|
||||||
|
<br/>
|
||||||
|
<label for="firstname">{{ __('app.preapplication.firstname') }}:</label>
|
||||||
|
<input type="text" id="firstname" name="firstname" placeholder="{{ __('app.preapplication.firstname') }}"
|
||||||
|
required>
|
||||||
|
<br/>
|
||||||
|
<label for="lastname">{{ __('app.preapplication.lastname') }}:</label>
|
||||||
|
<input type="text" id="lastname" name="lastname" placeholder="{{ __('app.preapplication.lastname') }}">
|
||||||
|
<br/>
|
||||||
|
<label for="location">{{ __('app.preapplication.location') }}:</label>
|
||||||
|
<input type="text" id="location" name="location" placeholder="{{ __('app.preapplication.location') }}">
|
||||||
|
<br /><br />
|
||||||
|
<button id="apply" onclick="vorantragAbschicken()">{{ __('app.preapplication.apply') }}</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@empty
|
||||||
|
<p><b>{{ __('app.preapplication.noevent') }}</b></p>
|
||||||
|
@endforelse
|
||||||
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -26,8 +26,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="language-area">
|
<div class="language-area">
|
||||||
<div class="language">
|
<div class="language">
|
||||||
<img alt="{{ __('app.language.de') }}" onclick="setLanguage('de')" src="{{ asset("Bilder/deutsch.gif") }}">
|
<img alt="{{ __('app.language.de') }}" onclick="setLanguage('de')" src="{{ asset("Bilder/deutschloop.gif") }}">
|
||||||
<img alt="{{ __('app.language.en') }}" onclick="setLanguage('en')" src="{{ asset("Bilder/englisch.gif") }}">
|
<img alt="{{ __('app.language.en') }}" onclick="setLanguage('en')" src="{{ asset("Bilder/englischloop.gif") }}">
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<div class="login-status">{{ __('app.signed_in_as') }} {{Auth::user()->name ?? __("app.guest")}}</div>
|
<div class="login-status">{{ __('app.signed_in_as') }} {{Auth::user()->name ?? __("app.guest")}}</div>
|
||||||
|
|||||||
8
resources/views/mail/preapplication.blade.php
Normal file
8
resources/views/mail/preapplication.blade.php
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{!! __('mail.preapplication.body1') !!}
|
||||||
|
{{ $pa->reference_number }}
|
||||||
|
{!! __('mail.preapplication.body2') !!}
|
||||||
|
{{ __('app.preapplication.firstname') }}: {{ $pa->first_name }}<br />
|
||||||
|
{{ __('app.preapplication.lastname') }}: {{ $pa->last_name }}<br />
|
||||||
|
{{ __('app.preapplication.location') }}: {{ $pa->location }}<br />
|
||||||
|
{!! __('mail.preapplication.body3') !!}<br /><br />
|
||||||
|
{!! __('mail.preapplication.signature') !!}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
@php use App\Models\TickerMessages; @endphp
|
||||||
@extends('layout.app')
|
@extends('layout.app')
|
||||||
@section('scripts')
|
@section('scripts')
|
||||||
<link rel="stylesheet" href="{{ asset("css/ticker/ticker.css") }}">
|
<link rel="stylesheet" href="{{ asset("css/ticker/ticker.css") }}">
|
||||||
@@ -10,39 +11,37 @@
|
|||||||
<div id="fehlermeldung">Hier kann der Ticker verändert werden.</div>
|
<div id="fehlermeldung">Hier kann der Ticker verändert werden.</div>
|
||||||
<div class="split-left">
|
<div class="split-left">
|
||||||
<h2>Deutsch</h2>
|
<h2>Deutsch</h2>
|
||||||
<label for="ticker_de">Aktive Tickernachrichten:</label><br /><br />
|
<label for="ticker_de">Aktive Tickernachrichten:</label><br/><br/>
|
||||||
<select name="ticker_de" id="ticker_de" multiple>
|
<select name="ticker_de" id="ticker_de" multiple>
|
||||||
@foreach(\App\Models\TickerMessages::where('language', 'de')->orderBy('updated_at', 'desc')->get() as $tm)
|
@foreach(TickerMessages::where('language', 'de')->orderBy('updated_at', 'desc')->get() as $tm)
|
||||||
<option value="{{$tm->id}}">{{$tm->message}}</option>
|
<option value="{{$tm->id}}">{{$tm->message}}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<br /><br />
|
<br/><br/>
|
||||||
<button onclick="remove('de')">Ausgewählte Tickernachricht löschen</button>
|
<button onclick="remove('de')">Ausgewählte Tickernachricht löschen</button>
|
||||||
<br /><br /><br />
|
<br/><br/><br/>
|
||||||
|
|
||||||
<label for="insert_de">Tickernachricht erstellen: </label><br />
|
<label for="insert_de">Tickernachricht erstellen: </label><br/>
|
||||||
<input size="32" type="text" id="insert_de">
|
<input size="32" type="text" id="insert_de">
|
||||||
<br /><br />
|
<br/><br/>
|
||||||
<button onclick="insert('de')">Tickernachricht hinzufügen</button>
|
<button onclick="insert('de')">Tickernachricht hinzufügen</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="split-right">
|
<div class="split-right">
|
||||||
<h2>Englisch</h2>
|
<h2>Englisch</h2>
|
||||||
<label for="ticker_en">Aktive Tickernachrichten:</label><br /><br />
|
<label for="ticker_en">Aktive Tickernachrichten:</label><br/><br/>
|
||||||
<select name="ticker_en" id="ticker_en" multiple>
|
<select name="ticker_en" id="ticker_en" multiple>
|
||||||
@foreach(\App\Models\TickerMessages::where('language', 'en')->orderBy('updated_at', 'desc')->get() as $tm)
|
@foreach(TickerMessages::where('language', 'en')->orderBy('updated_at', 'desc')->get() as $tm)
|
||||||
<option value="{{$tm->id}}">{{$tm->message}}</option>
|
<option value="{{$tm->id}}">{{$tm->message}}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
<br /><br />
|
<br/><br/>
|
||||||
<button onclick="remove('en')">Ausgewählte Tickernachricht löschen</button>
|
<button onclick="remove('en')">Ausgewählte Tickernachricht löschen</button>
|
||||||
<br /><br /><br />
|
<br/><br/><br/>
|
||||||
|
|
||||||
<label for="insert_de">Tickernachricht erstellen: </label><br />
|
<label for="insert_de">Tickernachricht erstellen: </label><br/>
|
||||||
<input size="32" type="text" id="insert_en">
|
<input size="32" type="text" id="insert_en">
|
||||||
<br /><br />
|
<br/><br/>
|
||||||
<button onclick="insert('en')">Tickernachricht hinzufügen</button>
|
<button onclick="insert('en')">Tickernachricht hinzufügen</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
use App\Http\Controllers\BlogController;
|
use App\Http\Controllers\BlogController;
|
||||||
use App\Http\Controllers\LoginController;
|
use App\Http\Controllers\LoginController;
|
||||||
|
use App\Http\Controllers\PreApplicationController;
|
||||||
use App\Http\Controllers\WebsiteController;
|
use App\Http\Controllers\WebsiteController;
|
||||||
use App\Http\Controllers\TickerController;
|
use App\Http\Controllers\TickerController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
@@ -14,7 +15,9 @@ Route::get('/kontakt', [WebsiteController::class, 'contact'])->name('contact');
|
|||||||
Route::get('/impressum', [WebsiteController::class, 'imprint'])->name('imprint');
|
Route::get('/impressum', [WebsiteController::class, 'imprint'])->name('imprint');
|
||||||
Route::get('/services', [WebsiteController::class, 'services'])->name('services');
|
Route::get('/services', [WebsiteController::class, 'services'])->name('services');
|
||||||
Route::get('/neuigkeiten', [WebsiteController::class, 'news'])->name('news');
|
Route::get('/neuigkeiten', [WebsiteController::class, 'news'])->name('news');
|
||||||
Route::get('/beantragen', [WebsiteController::class, 'apply'])->name('apply');
|
|
||||||
|
Route::get('/vorbeantragen', [WebsiteController::class, 'apply'])->name('apply');
|
||||||
|
Route::post('/vorbeantragen/absenden', [PreApplicationController::class, 'send']);
|
||||||
|
|
||||||
Route::get('/intern/registrieren', [WebsiteController::class, 'showRegister']);
|
Route::get('/intern/registrieren', [WebsiteController::class, 'showRegister']);
|
||||||
Route::post('/intern/registrieren/abschicken', [LoginController::class, 'register']);
|
Route::post('/intern/registrieren/abschicken', [LoginController::class, 'register']);
|
||||||
|
|||||||
Reference in New Issue
Block a user