Implementiert ein Dialog-basiertes UI zum Bearbeiten des Security Levels mit optionaler Notiz-Funktion für Helpdesk-Domains. Backend: - DomainSecurityLevelRepository: CRUD für security_levels mit note-Spalte - DomainSecurityLevelService: Business-Logik mit Batch-Enrichment - security-level-data() Endpoint: AJAX + Full-Page POST mit CSRF - Migration 010: note TEXT-Spalte hinzugefügt - Bugfix: findByTenantAndDomainNo gibt null bei leerem Array zurück Frontend (Domain-Liste): - Badge in Grid klickbar → öffnet Modal-Dialog - Dialog mit Level-Select + Notiz-Textarea - AJAX-Save mit Live-Badge-Update ohne Reload - Event-Delegation für dynamische Grid-Inhalte Frontend (Domain-Detail): - Notiz-Feld im Security-Level-Formular - PRG-Pattern mit Flash-Messages Core: - app-http.js: DEFAULT_HEADERS auf XMLHttpRequest für CSRF-Kompatibilität i18n: - Keys: Priority, Note, Optional note, Security level updated Tests: - DomainSecurityLevelServiceTest: CRUD + Batch-Enrichment
37 lines
1.3 KiB
PHP
37 lines
1.3 KiB
PHP
<?php
|
|
|
|
use MintyPHP\Http\SessionStoreInterface;
|
|
use MintyPHP\Module\Helpdesk\HelpdeskAuthorizationPolicy;
|
|
use MintyPHP\Module\Helpdesk\Service\DomainDetailService;
|
|
use MintyPHP\Module\Helpdesk\Service\DomainSecurityLevelService;
|
|
use MintyPHP\Router;
|
|
use MintyPHP\Support\Guard;
|
|
|
|
Guard::requireLogin();
|
|
Guard::requireAbilityOrForbidden(HelpdeskAuthorizationPolicy::ABILITY_ACCESS);
|
|
gridRequireGetRequest();
|
|
|
|
$request = requestInput();
|
|
$domainNo = trim((string) $request->query('domainNo', ''));
|
|
$customerNo = trim((string) $request->query('customerNo', ''));
|
|
|
|
if ($domainNo === '') {
|
|
Router::json(['ok' => false, 'error' => 'Missing domain number']);
|
|
|
|
return;
|
|
}
|
|
|
|
$session = app(SessionStoreInterface::class)->all();
|
|
$tenantId = (int) ($session['current_tenant']['id'] ?? 0);
|
|
|
|
$service = app(DomainDetailService::class);
|
|
$result = $service->loadDomainDetails($domainNo, $customerNo, $tenantId);
|
|
|
|
$securityLevelService = app(DomainSecurityLevelService::class);
|
|
$securityDetails = $tenantId > 0 ? $securityLevelService->getDetails($tenantId, $domainNo) : ['level' => 'normal', 'note' => ''];
|
|
$result['security_level'] = $securityDetails['level'];
|
|
$result['security_level_variant'] = DomainSecurityLevelService::getBadgeVariant($securityDetails['level']);
|
|
$result['security_level_note'] = $securityDetails['note'];
|
|
|
|
Router::json($result);
|