101 lines
5.0 KiB
PHP
101 lines
5.0 KiB
PHP
<div class="mx-auto max-w-3xl space-y-6">
|
|
<div class="animate-rise">
|
|
<h1 class="text-2xl font-bold tracking-tight text-ink">{{ __('mail_settings.title') }}</h1>
|
|
<p class="mt-1 text-sm text-muted">{{ __('mail_settings.subtitle') }}</p>
|
|
</div>
|
|
|
|
@if (! $usable)
|
|
<x-ui.alert variant="warning">{{ __('mail_settings.no_key') }}</x-ui.alert>
|
|
@endif
|
|
|
|
{{-- 1. The server. One of it, so one card. --}}
|
|
<x-ui.card>
|
|
<h2 class="text-lg font-semibold text-ink">{{ __('mail_settings.server_title') }}</h2>
|
|
<p class="mt-1 text-sm text-muted">{{ __('mail_settings.server_hint') }}</p>
|
|
|
|
<div class="mt-5 grid gap-4 sm:grid-cols-3">
|
|
<x-ui.input name="host" wire:model="host" :label="__('mail_settings.host')" />
|
|
<x-ui.input name="port" type="number" wire:model="port" :label="__('mail_settings.port')" />
|
|
<div>
|
|
<label for="encryption" class="text-sm font-medium text-ink">{{ __('mail_settings.encryption') }}</label>
|
|
<select id="encryption" wire:model="encryption"
|
|
class="mt-1.5 w-full rounded-md border border-line-strong bg-surface px-3 py-2 text-sm text-body">
|
|
<option value="tls">TLS</option>
|
|
<option value="ssl">SSL</option>
|
|
<option value="none">{{ __('mail_settings.encryption_none') }}</option>
|
|
</select>
|
|
@error('encryption')<p class="mt-1 text-xs text-danger">{{ $message }}</p>@enderror
|
|
</div>
|
|
</div>
|
|
|
|
<x-ui.button wire:click="saveServer" variant="primary" size="md" class="mt-5">
|
|
{{ __('mail_settings.save') }}
|
|
</x-ui.button>
|
|
</x-ui.card>
|
|
|
|
{{-- 2. The mailboxes. NO input field inside a <td> — R20. --}}
|
|
<x-ui.card>
|
|
<h2 class="text-lg font-semibold text-ink">{{ __('mail_settings.boxes_title') }}</h2>
|
|
|
|
<table class="mt-5 w-full text-sm">
|
|
<thead>
|
|
<tr class="border-b border-line text-left">
|
|
<th class="lbl pb-2">{{ __('mail_settings.address') }}</th>
|
|
<th class="lbl pb-2">{{ __('mail_settings.last_verified') }}</th>
|
|
<th class="lbl pb-2"></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach ($mailboxes as $box)
|
|
<tr wire:key="mailbox-{{ $box->uuid }}" class="border-b border-line last:border-0">
|
|
<td class="py-3">
|
|
<span class="font-medium text-ink">{{ $box->address }}</span>
|
|
<span class="ml-2 text-muted">{{ $box->key }}</span>
|
|
</td>
|
|
<td class="py-3 text-muted">
|
|
{{ $box->last_verified_at?->local()->isoFormat('DD.MM.YYYY HH:mm') ?? __('mail_settings.never_verified') }}
|
|
</td>
|
|
<td class="py-3 text-right">
|
|
{{-- Edit only (R18: icon beside its text, single line).
|
|
The test-send button belongs to a later task —
|
|
shipping one that cannot yet test anything is a
|
|
promise this page does not keep. --}}
|
|
<x-ui.button size="sm" variant="ghost"
|
|
x-on:click="$dispatch('openModal', { component: 'edit-mailbox', arguments: { uuid: '{{ $box->uuid }}' } })">
|
|
<x-ui.icon name="pencil" class="size-4" />{{ __('mail_settings.edit') }}
|
|
</x-ui.button>
|
|
</td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
</x-ui.card>
|
|
|
|
{{-- 3. The mapping. One <select> per row — R20's stated exception. --}}
|
|
<x-ui.card>
|
|
<h2 class="text-lg font-semibold text-ink">{{ __('mail_settings.purposes_title') }}</h2>
|
|
<p class="mt-1 text-sm text-muted">{{ __('mail_settings.purposes_hint') }}</p>
|
|
|
|
<div class="mt-5 space-y-3">
|
|
@foreach ($purposeList as $purpose)
|
|
<div class="flex items-center justify-between gap-6 border-b border-line py-2">
|
|
<span class="text-sm text-ink">{{ __('mail_settings.purpose.'.$purpose) }}</span>
|
|
<select wire:model="purposes.{{ $purpose }}"
|
|
class="w-64 rounded-md border border-line-strong bg-surface px-3 py-2 text-sm text-body">
|
|
<option value="">—</option>
|
|
@foreach ($mailboxes as $box)
|
|
<option value="{{ $box->key }}">{{ $box->address }}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
|
|
@error('purposes.system')<p class="mt-3 text-xs text-danger">{{ $message }}</p>@enderror
|
|
|
|
<x-ui.button wire:click="savePurposes" variant="primary" size="md" class="mt-5">
|
|
{{ __('mail_settings.save') }}
|
|
</x-ui.button>
|
|
</x-ui.card>
|
|
</div>
|