TenantAtlas/resources/views/filament/infolists/entries/restore-results.blade.php
ahmido 321312d446 dev-merges/c709b36 (#3)
## Summary
<!-- Kurz: Was ändert sich und warum? -->

## Spec-Driven Development (SDD)
- [ ] Es gibt eine Spec unter `specs/<NNN>-<feature>/`
- [ ] Enthaltene Dateien: `plan.md`, `tasks.md`, `spec.md`
- [ ] Spec beschreibt Verhalten/Acceptance Criteria (nicht nur Implementation)
- [ ] Wenn sich Anforderungen während der Umsetzung geändert haben: Spec/Plan/Tasks wurden aktualisiert

## Implementation
- [ ] Implementierung entspricht der Spec
- [ ] Edge cases / Fehlerfälle berücksichtigt
- [ ] Keine unbeabsichtigten Änderungen außerhalb des Scopes

## Tests
- [ ] Tests ergänzt/aktualisiert (Pest/PHPUnit)
- [ ] Relevante Tests lokal ausgeführt (`./vendor/bin/sail artisan test` oder `php artisan test`)

## Migration / Config / Ops (falls relevant)
- [ ] Migration(en) enthalten und getestet
- [ ] Rollback bedacht (rückwärts kompatibel, sichere Migration)
- [ ] Neue Env Vars dokumentiert (`.env.example` / Doku)
- [ ] Queue/cron/storage Auswirkungen geprüft

## UI (Filament/Livewire) (falls relevant)
- [ ] UI-Flows geprüft
- [ ] Screenshots/Notizen hinzugefügt

## Notes
<!-- Links, Screenshots, Follow-ups, offene Punkte -->

Co-authored-by: Ahmed Darrazi <ahmeddarrazi@adsmac.local>
Reviewed-on: #3
2025-12-21 23:15:12 +00:00

166 lines
9.3 KiB
PHP

@php
$results = $getState() ?? [];
@endphp
@if (empty($results))
<p class="text-sm text-gray-600">No results recorded.</p>
@else
@php
$needsAttention = collect($results)->contains(function ($item) {
$status = $item['status'] ?? null;
return in_array($status, ['partial', 'manual_required'], true);
});
@endphp
<div class="space-y-3">
@if ($needsAttention)
<div class="rounded border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900">
Some settings could not be applied automatically. Review the per-setting details below.
</div>
@endif
@foreach ($results as $item)
<div class="rounded border border-gray-200 bg-white p-3 shadow-sm">
<div class="flex items-center justify-between text-sm">
<div class="font-semibold text-gray-900">
{{ $item['policy_identifier'] ?? $item['policy_id'] ?? 'Policy' }}
<span class="ml-2 text-xs text-gray-500">{{ $item['policy_type'] ?? '' }}</span>
</div>
@php
$status = $item['status'] ?? 'unknown';
$statusColor = match ($status) {
'applied' => 'text-green-700 bg-green-100 border-green-200',
'dry_run' => 'text-blue-700 bg-blue-100 border-blue-200',
'partial' => 'text-amber-900 bg-amber-50 border-amber-200',
'manual_required' => 'text-amber-900 bg-amber-100 border-amber-200',
'failed' => 'text-red-700 bg-red-100 border-red-200',
default => 'text-gray-700 bg-gray-100 border-gray-200',
};
@endphp
<span class="rounded border px-2 py-0.5 text-xs font-semibold uppercase tracking-wide {{ $statusColor }}">
{{ $status }}
</span>
</div>
@if (! empty($item['reason']))
<div class="mt-2 text-sm text-gray-800">
{{ $item['reason'] }}
</div>
@endif
@if (! empty($item['created_policy_id']))
@php
$createdMode = $item['created_policy_mode'] ?? null;
$createdMessage = $createdMode === 'metadata_only'
? 'New policy created (metadata only). Apply settings manually.'
: 'New policy created (manual cleanup required).';
@endphp
<div class="mt-2 text-xs text-amber-800">
{{ $createdMessage }} ID: {{ $item['created_policy_id'] }}
</div>
@endif
@if (! empty($item['graph_error_message']) || ! empty($item['graph_error_code']))
<div class="mt-2 rounded border border-amber-200 bg-amber-50 px-2 py-1 text-xs text-amber-900">
<div class="font-semibold">Graph error</div>
<div>{{ $item['graph_error_message'] ?? 'Unknown error' }}</div>
@if (! empty($item['graph_error_code']))
<div class="mt-1 text-[11px] text-amber-800">Code: {{ $item['graph_error_code'] }}</div>
@endif
@if (! empty($item['graph_request_id']) || ! empty($item['graph_client_request_id']))
<details class="mt-1">
<summary class="cursor-pointer text-[11px] font-semibold text-amber-800">Details</summary>
<div class="mt-1 space-y-0.5 text-[11px] text-amber-800">
@if (! empty($item['graph_request_id']))
<div>request-id: {{ $item['graph_request_id'] }}</div>
@endif
@if (! empty($item['graph_client_request_id']))
<div>client-request-id: {{ $item['graph_client_request_id'] }}</div>
@endif
</div>
</details>
@endif
</div>
@endif
@if (! empty($item['settings_apply']) && is_array($item['settings_apply']))
@php
$apply = $item['settings_apply'];
$total = (int) ($apply['total'] ?? 0);
$applied = (int) ($apply['applied'] ?? 0);
$failed = (int) ($apply['failed'] ?? 0);
$manual = (int) ($apply['manual_required'] ?? 0);
$issues = $apply['issues'] ?? [];
@endphp
<div class="mt-2 text-xs text-gray-700">
Settings applied: {{ $applied }}/{{ $total }}
@if ($failed > 0 || $manual > 0)
{{ $failed }} failed {{ $manual }} manual
@endif
</div>
@if (! empty($issues))
<details class="mt-2 rounded border border-amber-200 bg-amber-50 px-2 py-1 text-xs text-amber-900">
<summary class="cursor-pointer font-semibold">Settings requiring attention</summary>
<div class="mt-2 space-y-2">
@foreach ($issues as $issue)
@php
$issueStatus = $issue['status'] ?? 'unknown';
$issueColor = match ($issueStatus) {
'failed' => 'text-red-700 bg-red-100 border-red-200',
'manual_required' => 'text-amber-900 bg-amber-100 border-amber-200',
default => 'text-gray-700 bg-gray-100 border-gray-200',
};
@endphp
<div class="rounded border border-amber-200 bg-white p-2">
<div class="flex items-center justify-between">
<div class="font-semibold text-gray-900">
Setting {{ $issue['setting_id'] ?? 'unknown' }}
</div>
<span class="rounded border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide {{ $issueColor }}">
{{ $issueStatus }}
</span>
</div>
@if (! empty($issue['reason']))
<div class="mt-1 text-[11px] text-gray-800">
{{ $issue['reason'] }}
</div>
@endif
@if (! empty($issue['graph_error_message']) || ! empty($issue['graph_error_code']))
<div class="mt-1 text-[11px] text-amber-900">
<div>{{ $issue['graph_error_message'] ?? 'Unknown error' }}</div>
@if (! empty($issue['graph_error_code']))
<div class="mt-0.5 text-amber-800">Code: {{ $issue['graph_error_code'] }}</div>
@endif
@if (! empty($issue['graph_request_id']) || ! empty($issue['graph_client_request_id']))
<div class="mt-0.5 space-y-0.5 text-amber-800">
@if (! empty($issue['graph_request_id']))
<div>request-id: {{ $issue['graph_request_id'] }}</div>
@endif
@if (! empty($issue['graph_client_request_id']))
<div>client-request-id: {{ $issue['graph_client_request_id'] }}</div>
@endif
</div>
@endif
</div>
@endif
</div>
@endforeach
</div>
</details>
@endif
@endif
@if (! empty($item['platform']))
<div class="mt-2 text-[11px] text-gray-500">
Platform: {{ $item['platform'] }}
</div>
@endif
</div>
@endforeach
</div>
@endif