Stand: SMTP-Test, Admin-Mail-Tab, Notifiable-Fix, Lazy-Quill
- Fix: Notifiable-Trait zum User-Model hinzugefuegt (behebt notify()-500er) - Installer: SMTP-Verbindungstest mit EsmtpTransport + Ueberspringen-Link - Admin: Neuer E-Mail-Tab mit SMTP-Konfiguration + Verbindungstest - Admin: Lazy Quill-Initialisierung (nur sichtbare Locale wird geladen) - Uebersetzungen: 17 neue Mail-Keys in allen 6 Sprachen Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
166
resources/views/admin/list-generator/create.blade.php
Normal file
166
resources/views/admin/list-generator/create.blade.php
Normal file
@@ -0,0 +1,166 @@
|
||||
<x-layouts.admin :title="__('admin.list_generator_title')">
|
||||
<h1 class="text-2xl font-bold mb-6">{{ __('admin.list_generator_title') }}</h1>
|
||||
|
||||
<form method="POST" action="{{ route('admin.list-generator.store') }}"
|
||||
x-data="{
|
||||
source: @js(old('source', 'players')),
|
||||
customColumns: @js(old('custom_columns', [])),
|
||||
addColumn() { this.customColumns.push('') },
|
||||
removeColumn(i) { this.customColumns.splice(i, 1) }
|
||||
}">
|
||||
@csrf
|
||||
|
||||
<div class="bg-white rounded-lg shadow p-6 space-y-5">
|
||||
{{-- Betreff --}}
|
||||
<div>
|
||||
<label for="title" class="block text-sm font-medium text-gray-700 mb-1">{{ __('admin.list_title') }} *</label>
|
||||
<input type="text" name="title" id="title" value="{{ old('title') }}" required
|
||||
class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm @error('title') border-red-500 @enderror"
|
||||
placeholder="{{ __('admin.list_title') }}">
|
||||
@error('title')<p class="mt-1 text-sm text-red-600">{{ $message }}</p>@enderror
|
||||
</div>
|
||||
|
||||
{{-- Untertitel --}}
|
||||
<div>
|
||||
<label for="subtitle" class="block text-sm font-medium text-gray-700 mb-1">{{ __('admin.list_subtitle') }}</label>
|
||||
<input type="text" name="subtitle" id="subtitle" value="{{ old('subtitle') }}"
|
||||
class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm"
|
||||
placeholder="{{ __('admin.list_subtitle') }}">
|
||||
</div>
|
||||
|
||||
{{-- Notizen --}}
|
||||
<div>
|
||||
<label for="notes" class="block text-sm font-medium text-gray-700 mb-1">{{ __('admin.list_notes') }}</label>
|
||||
<textarea name="notes" id="notes" rows="3"
|
||||
class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm"
|
||||
placeholder="{{ __('admin.list_notes') }}">{{ old('notes') }}</textarea>
|
||||
</div>
|
||||
|
||||
{{-- Team-Filter --}}
|
||||
<div>
|
||||
<label for="team_id" class="block text-sm font-medium text-gray-700 mb-1">{{ __('admin.nav_teams') }}</label>
|
||||
<select name="team_id" id="team_id" class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm">
|
||||
<option value="">{{ __('admin.list_all_teams') }}</option>
|
||||
@foreach ($teams as $team)
|
||||
<option value="{{ $team->id }}" {{ old('team_id') == $team->id ? 'selected' : '' }}>{{ $team->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{-- Zeilen-Quelle --}}
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2">{{ __('admin.list_source') }} *</label>
|
||||
<div class="flex flex-wrap gap-4">
|
||||
<label class="inline-flex items-center gap-2 cursor-pointer">
|
||||
<input type="radio" name="source" value="players" x-model="source" class="text-blue-600">
|
||||
<span class="text-sm">{{ __('admin.list_source_players') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2 cursor-pointer">
|
||||
<input type="radio" name="source" value="parents" x-model="source" class="text-blue-600">
|
||||
<span class="text-sm">{{ __('admin.list_source_parents') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2 cursor-pointer">
|
||||
<input type="radio" name="source" value="freetext" x-model="source" class="text-blue-600">
|
||||
<span class="text-sm">{{ __('admin.list_source_freetext') }}</span>
|
||||
</label>
|
||||
</div>
|
||||
@error('source')<p class="mt-1 text-sm text-red-600">{{ $message }}</p>@enderror
|
||||
</div>
|
||||
|
||||
{{-- Freitext-Feld --}}
|
||||
<div x-show="source === 'freetext'" x-cloak>
|
||||
<label for="freetext_rows" class="block text-sm font-medium text-gray-700 mb-1">{{ __('admin.list_source_freetext') }}</label>
|
||||
<textarea name="freetext_rows" id="freetext_rows" rows="6"
|
||||
class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm font-mono"
|
||||
placeholder="{{ __('admin.list_freetext_hint') }}">{{ old('freetext_rows') }}</textarea>
|
||||
@error('freetext_rows')<p class="mt-1 text-sm text-red-600">{{ $message }}</p>@enderror
|
||||
</div>
|
||||
|
||||
{{-- Spalten: Spieler --}}
|
||||
<div x-show="source === 'players'" x-cloak>
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2">{{ __('admin.list_columns') }}</label>
|
||||
<div class="flex flex-wrap gap-x-6 gap-y-2">
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" checked disabled class="text-blue-600 rounded">
|
||||
<span class="text-sm text-gray-600">{{ __('ui.name') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="team" {{ in_array('team', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.nav_teams') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="jersey_number" {{ in_array('jersey_number', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.jersey_number') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="birth_year" {{ in_array('birth_year', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.birth_year') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="parents" {{ in_array('parents', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.parents') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="photo_permission" {{ in_array('photo_permission', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.photo_permission') }}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Spalten: Eltern --}}
|
||||
<div x-show="source === 'parents'" x-cloak>
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2">{{ __('admin.list_columns') }}</label>
|
||||
<div class="flex flex-wrap gap-x-6 gap-y-2">
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" checked disabled class="text-blue-600 rounded">
|
||||
<span class="text-sm text-gray-600">{{ __('ui.name') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="team" {{ in_array('team', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.nav_teams') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="email" {{ in_array('email', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('ui.email') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="phone" {{ in_array('phone', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.phone') }}</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center gap-2">
|
||||
<input type="checkbox" name="columns[]" value="children" {{ in_array('children', old('columns', [])) ? 'checked' : '' }} class="text-blue-600 rounded">
|
||||
<span class="text-sm">{{ __('admin.children') }}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Zusätzliche Spalten --}}
|
||||
<div x-show="source !== ''" x-cloak>
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2">{{ __('admin.list_custom_columns') }}</label>
|
||||
<div class="space-y-2">
|
||||
<template x-for="(col, index) in customColumns" :key="index">
|
||||
<div class="flex items-center gap-2">
|
||||
<input type="text" :name="'custom_columns[' + index + ']'" x-model="customColumns[index]"
|
||||
class="flex-1 px-3 py-2 border border-gray-300 rounded-md text-sm"
|
||||
:placeholder="'{{ __('admin.list_column_name') }}'">
|
||||
<button type="button" @click="removeColumn(index)" class="text-red-500 hover:text-red-700 p-1">
|
||||
<svg class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/></svg>
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<button type="button" @click="addColumn()" class="mt-2 text-sm text-blue-600 hover:text-blue-800 inline-flex items-center gap-1">
|
||||
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"/></svg>
|
||||
{{ __('admin.list_add_column') }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{{-- Submit --}}
|
||||
<div class="pt-2">
|
||||
<button type="submit" class="bg-blue-600 text-white px-6 py-2 rounded-md hover:bg-blue-700 text-sm font-medium">
|
||||
{{ __('admin.list_generate') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</x-layouts.admin>
|
||||
Reference in New Issue
Block a user