diff --git a/app/Http/Controllers/EventController.php b/app/Http/Controllers/EventController.php new file mode 100644 index 0000000..39d74f7 --- /dev/null +++ b/app/Http/Controllers/EventController.php @@ -0,0 +1,79 @@ +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); + } +} diff --git a/app/Http/Controllers/WebsiteController.php b/app/Http/Controllers/WebsiteController.php index 12064a3..42e0024 100644 --- a/app/Http/Controllers/WebsiteController.php +++ b/app/Http/Controllers/WebsiteController.php @@ -82,4 +82,13 @@ class WebsiteController extends Controller 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); + } + } diff --git a/lang/de/app.php b/lang/de/app.php index 46d5858..ee28d5c 100644 --- a/lang/de/app.php +++ b/lang/de/app.php @@ -23,6 +23,7 @@ return [ 'editTicker' => 'Ticker bearbeiten', 'editNews' => 'Neuigkeiten bearbeiten', 'editApplications' => 'Anträge bearbeiten', + 'events' => 'C3Gov-Termine', 'logout' => 'Abmelden' ], 'index' => [ @@ -165,4 +166,19 @@ return [ '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' => 'Löschen', + 'active' => 'Aktiv', + 'name' => 'Name', + 'list' => 'Termine', + 'setActivity' => 'Aktiv-Status ändern', + 'shortname' => 'Namenscode', + 'from_date_internal' => 'Fristanfang', + 'to_date_internal' => 'Fristende', + 'from_date_visible' => 'Terminstart', + 'to_date_visible' => 'Terminende', + + ] ]; diff --git a/public/js/events/events.js b/public/js/events/events.js new file mode 100644 index 0000000..2ebea55 --- /dev/null +++ b/public/js/events/events.js @@ -0,0 +1,87 @@ +function addEvent(){ + let data = {}; + data.name = $("#name").val(); + data.shortname = $("#shortname").val(); + data.from_date_internal = $("#from_date_internal").val(); + data.to_date_internal = $("#to_date_internal").val(); + data.from_date_visible = $("#from_date_visible").val(); + data.to_date_visible = $("#to_date_visible").val(); + data.active = $("#active").is(":checked") ? "1" : "0"; + + if(window.confirm(i18n.blog.confirm_save)) { + $.ajax({ + type: 'POST', + url: '/intern/events/hinzufuegen', + data: data, + dataType: 'json', + success: function (r) { + if (r.messageStatus === "success") { + $('#name').val(""); + $('#shortname').val(""); + $('#from_date_internal').val(""); + $('#to_date_internal').val(""); + $('#from_date_visible').val(""); + $('#to_date_visible').val(""); + $('#active').prop('checked', false); + location.reload(); + } else { + alert(r.errorMessage); + } + }, + error: function (r, a, e) { + alert(i18n.common.error_occurred + e); + } + }); + } +} + +function setActivity(id) { + let data = {}; + data.id = id; + data.active = $("#active_" + id).is(":checked") ? "1" : "0"; + + if(window.confirm(i18n.blog.confirm_save)) { + $.ajax({ + type: 'PATCH', + url: '/intern/events/setActivity', + data: data, + 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 deleteEvent(id) { + let data = {}; + data.id = id; + + if(window.confirm(i18n.blog.confirm_delete)) { + $.ajax({ + type: 'DELETE', + url: '/intern/events/loeschen', + data: data, + dataType: 'json', + success: function (r) { + if (r.messageStatus === "success") { + $('#delete_' + id).closest('#eingabemaske_' + id).fadeOut(300, function () { + $(this).remove(); + }); + } else { + alert(r.errorMessage); + } + }, + error: function (r, a, e) { + alert(i18n.common.error_occurred + e); + } + }); + } +} diff --git a/resources/views/events/edit.blade.php b/resources/views/events/edit.blade.php new file mode 100644 index 0000000..af6f5a8 --- /dev/null +++ b/resources/views/events/edit.blade.php @@ -0,0 +1,97 @@ +@extends('layout.app') +@section('scripts') + + +@endsection +@section('content') +

{{ __('app.nav.events') }}

+

{{ __('app.events.description') }}

+ +

{{ __('app.events.add') }}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{ __('app.events.name') }}:
{{ __('app.events.shortname') }}:
{{ __('app.events.from_date_internal') }}:
{{ __('app.events.to_date_internal') }}:
{{ __('app.events.from_date_visible') }}:
{{ __('app.events.to_date_visible') }}:
{{ __('app.events.active') }}:
+ +
+

+ +

{{ __('app.events.list') }}

+ @foreach($events as $event) +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{ __('app.events.name') }}:{{ $event->name }}
{{ __('app.events.shortname') }}:{{ $event->shortname }}
{{ __('app.events.from_date_internal') }}:{{ $event->from_date_internal->format('Y-m-d') }}
{{ __('app.events.to_date_internal') }}:{{ $event->to_date_internal->format('Y-m-d') }}
{{ __('app.events.from_date_visible') }}:{{ $event->from_date_visible->format('Y-m-d') }}
{{ __('app.events.to_date_visible') }}:{{ $event->to_date_visible->format('Y-m-d') }}
{{ __('app.events.active') }}:active) checked @endif>
+ + +
+

+ @endforeach + + {{ $events->links() }} +@endsection diff --git a/resources/views/layout/app.blade.php b/resources/views/layout/app.blade.php index 3b6bc08..a1c5b6a 100644 --- a/resources/views/layout/app.blade.php +++ b/resources/views/layout/app.blade.php @@ -49,6 +49,7 @@
  • {{ __('app.nav.editTicker') }}
  • {{ __('app.nav.editNews') }}
  • {{ __('app.nav.editApplications') }}
  • +
  • {{ __('app.nav.events') }}
  • {{ __('app.nav.logout') }}
  • @endauth diff --git a/routes/web.php b/routes/web.php index ee3ba97..b773eee 100644 --- a/routes/web.php +++ b/routes/web.php @@ -5,6 +5,7 @@ use App\Http\Controllers\LoginController; use App\Http\Controllers\PreApplicationController; use App\Http\Controllers\WebsiteController; use App\Http\Controllers\TickerController; +use App\Http\Controllers\EventController; use Illuminate\Support\Facades\Route; @@ -45,3 +46,8 @@ Route::get('/intern/antraege', [WebsiteController::class, 'editApplications'])-> Route::post('/intern/antraege/hinzufuegen', [PreApplicationController::class, 'addApplication']); Route::delete('/intern/antraege/loeschen', [PreApplicationController::class, 'deleteApplication']); Route::put('/intern/antraege/bearbeiten', [PreApplicationController::class, 'editApplication']); + +Route::get('/intern/events', [WebsiteController::class, 'editEvents'])->name('editEvents'); +Route::post('/intern/events/hinzufuegen', [EventController::class, 'addEvent']); +Route::delete('/intern/events/loeschen', [EventController::class, 'deleteEvent']); +Route::patch('/intern/events/setActivity', [EventController::class, 'setActivity']);