{{ __('admin_settings.subtitle') }}
{{ __('admin_settings.update_only_releases') }}
@endif {{-- Where it is. "Läuft gerade" alone is what sends an operator to the shell: a queued update does nothing visible until the agent picks it up, and while it runs the site is in maintenance mode and this page is unreachable. Both look identical to "wedged" without a time — hence the live countdown, replacing what used to be a static "spätestens um 17:19" that read as a promise nothing then visibly kept. There is no countdown any more, for either. It was wrong in fact — the target was recomputed on every poll, and where the interval the agent reported was shorter than the timer actually installed on that host it landed in the past every time and reset to a full minute, so it ran backwards a few seconds and jumped, forever. And it was wrong in kind: a check starts nothing, and an update now starts at once. A queued run says so in a sentence; a queued check says nothing beyond its badge. --}} {{-- And the step is NOT shown here. It used to be, in a small bordered block inside this card, and the moment a run began an operator saw it appear and then, up to three seconds later, saw the full-page overlay cover it and say the same thing in a different size. Two windows for one event. The overlay in layouts/admin carries the step, the running time and the log tail — it is the one that survives the restart, so it is the one that keeps them. --}} {{-- The window. Deliberately inside the update card rather than a section of its own: it is the same decision as the button next to it, only taken in advance. --}}{{ $message }}
@enderror{{ $message }}
@enderror{{ $message }}
@enderror@if ($autoUpdate) {{ __('admin_settings.auto_next', [ 'days' => collect($autoDays)->sort()->map(fn ($d) => __('admin_settings.weekday.'.$d))->join(', '), 'from' => $autoFrom, 'to' => $autoTo, ]) }} @else {{ __('admin_settings.auto_off') }} @endif
{{ __('admin_settings.update_last_run', [ 'state' => __('admin_settings.update_state.'.$update['last_state']), 'when' => $update['last_finished_at']?->diffForHumans() ?? '—', ]) }} @if ($update['last_started_at'] && $update['last_finished_at']) · {{ __('admin_settings.update_took', ['duration' => $update['last_started_at']->diffForHumans($update['last_finished_at'], true)]) }} @endif {{-- Only on a failure: on a run that worked the last step is "left maintenance mode", which says nothing. --}} @if ($update['last_state'] === 'failed' && $update['last_phase']) · {{ __('admin_settings.update_failed_at', ['step' => $update['last_phase']]) }} @endif
@endif {{-- Open while it runs: "läuft gerade" on its own tells an operator nothing about whether it is progressing or wedged. --}} @if ($updateLog){{ $updateLog }}
{{ $sitePublic ? __('admin_settings.site_public_body') : __('admin_settings.site_hidden_body') }}
{{ __('admin_settings.site_your_view', ['ip' => request()->ip()]) }} {{ $viewerOnVpn ? __('admin_settings.site_via_vpn') : __('admin_settings.site_not_vpn') }}
{{ __('admin_settings.two_factor_body') }}
@error('requireTwoFactor'){{ $message }}
@enderror{{ $consoleRestricted ? __('admin_settings.console_locked_body') : __('admin_settings.console_open_body') }}
{{ __('admin_settings.console_your_ip', ['ip' => $viewerIp]) }}
{{ __('admin_settings.console_always') }}
@foreach ($consoleVpnRanges as $range){{ __('admin_settings.console_extra') }}
@forelse ($consoleIps as $ip){{ __('admin_settings.console_none') }}
@endforelse {{-- The hint sits under the row, not inside it: as a sibling of the field it made the flex row as tall as field-plus-hint, and the button stretched to match. --}}{{ __('admin_settings.staff_sub') }}
{{ __('admin_settings.invite_hint') }}
@if ($invitedPassword){{ __('admin_settings.temp_title') }}
{{ __('admin_settings.temp_hint') }}
| {{ __('admin_settings.col_person') }} | {{ __('admin_settings.role') }} | {{ __('admin_settings.col_actions') }} |
|---|---|---|
|
{{ $s['name'] }} @if ($s['self'])({{ __('admin_settings.you') }})@endif {{ $s['email'] }} |
@if ($s['self']) {{ __('admin_settings.role_'.\Illuminate\Support\Str::slug($s['role'])) }} @else @endif | {{-- Your own row has no actions — you cannot revoke yourself — and an empty cell reads as a bug rather than as a rule. --}} @if ($s['self']) — @endif @unless ($s['self']) @endunless |