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:
Rhino
2026-03-02 07:30:37 +01:00
commit 2e24a40d68
9633 changed files with 1300799 additions and 0 deletions

View File

@@ -0,0 +1,90 @@
<x-layouts.admin :title="__('admin.list_result_title')">
{{-- Success Banner --}}
<div class="no-print mb-5 bg-green-50 border border-green-200 rounded-lg p-4 flex items-start gap-3">
<svg class="w-5 h-5 text-green-500 mt-0.5 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
<div>
<p class="text-sm font-medium text-green-800">{{ __('admin.list_result_title') }}</p>
<p class="text-xs text-green-600 mt-0.5">{{ __('admin.list_saved_info', ['name' => $file->original_name]) }}</p>
</div>
</div>
{{-- Action Buttons --}}
<div class="no-print mb-5 flex flex-wrap items-center gap-3">
<a href="{{ route('files.download', $file) }}" class="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700 text-sm font-medium inline-flex items-center gap-2">
<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 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/></svg>
{{ __('admin.list_download_pdf') }}
</a>
<a href="{{ route('admin.list-generator.create') }}" class="bg-white border border-gray-300 text-gray-700 px-4 py-2 rounded-md hover:bg-gray-50 text-sm font-medium inline-flex items-center gap-2">
<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_new') }}
</a>
<a href="{{ route('admin.files.index', ['category' => 'allgemein']) }}" class="text-sm text-gray-500 hover:text-gray-700 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="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"/></svg>
{{ __('admin.list_to_library') }}
</a>
</div>
{{-- Preview Card --}}
<div class="bg-white rounded-lg shadow overflow-hidden">
{{-- Card Header --}}
<div class="bg-gray-800 px-6 py-4">
<h1 class="text-xl font-bold text-white">{{ $title }}</h1>
@if ($subtitle)
<p class="text-gray-300 text-sm mt-0.5">{{ $subtitle }}</p>
@endif
</div>
{{-- Notes --}}
@if ($notes)
<div class="px-6 py-3 bg-gray-50 border-b border-gray-200">
<p class="text-sm text-gray-600">{{ $notes }}</p>
</div>
@endif
{{-- Table --}}
<div class="overflow-x-auto">
<table class="w-full text-sm">
<thead>
<tr class="bg-gray-100 border-b border-gray-200">
<th class="px-4 py-2.5 text-left text-xs font-semibold text-gray-500 uppercase tracking-wider w-10">#</th>
@foreach ($columns as $key => $header)
<th class="px-4 py-2.5 text-left text-xs font-semibold text-gray-500 uppercase tracking-wider">{{ $header }}</th>
@endforeach
</tr>
</thead>
<tbody class="divide-y divide-gray-100">
@forelse ($rows as $i => $row)
<tr class="hover:bg-blue-50/50 transition-colors">
<td class="px-4 py-2 text-gray-400 text-xs font-mono">{{ $i + 1 }}</td>
@foreach ($columns as $key => $header)
<td class="px-4 py-2 {{ ($row[$key] ?? '') === '' ? 'text-gray-300' : 'text-gray-700' }}">
@if (($key === 'email') && !empty($row[$key]))
<a href="mailto:{{ $row[$key] }}" class="text-blue-600 hover:underline">{{ $row[$key] }}</a>
@elseif (($key === 'phone') && !empty($row[$key]) && $row[$key] !== '')
<a href="tel:{{ $row[$key] }}" class="text-blue-600 hover:underline">{{ $row[$key] }}</a>
@elseif (($row[$key] ?? '') === '')
<span class="text-gray-300">&mdash;</span>
@else
{{ $row[$key] }}
@endif
</td>
@endforeach
</tr>
@empty
<tr>
<td colspan="{{ count($columns) + 1 }}" class="px-4 py-8 text-center text-gray-400">
{{ __('admin.no_entries') }}
</td>
</tr>
@endforelse
</tbody>
</table>
</div>
{{-- Card Footer --}}
<div class="px-6 py-3 bg-gray-50 border-t border-gray-200 flex items-center justify-between">
<span class="text-xs text-gray-400">{{ count($rows) }} {{ __('admin.list_entries_count') }}</span>
<span class="text-xs text-gray-400">{{ __('admin.list_generated_at') }}: {{ now()->translatedFormat(__('ui.date_format')) }}</span>
</div>
</div>
</x-layouts.admin>