Added security check report settings and templating
This commit is contained in:
@@ -24,7 +24,10 @@ final class SecurityReportPdfService
|
||||
public function __construct(
|
||||
private readonly SecurityCheckProcess $process,
|
||||
private readonly BrandingLogoService $brandingLogoService,
|
||||
private readonly ?TenantLogoService $tenantLogoService = null
|
||||
private readonly ?TenantLogoService $tenantLogoService = null,
|
||||
private readonly ?SecurityReportSettingsGateway $reportSettings = null,
|
||||
private readonly ?SecurityReportTemplateService $templateService = null,
|
||||
private readonly ?SecurityReportLogoService $reportLogoService = null
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -46,7 +49,7 @@ final class SecurityReportPdfService
|
||||
$report['logo_data_uri'] = $this->resolveLogoDataUri((string) ($options['tenant_uuid'] ?? ''));
|
||||
$report['generated_at'] = date('Y-m-d H:i');
|
||||
|
||||
$html = $this->renderTemplate($report);
|
||||
$html = $this->renderReportHtml($report);
|
||||
if ($html === '') {
|
||||
return '';
|
||||
}
|
||||
@@ -109,6 +112,7 @@ final class SecurityReportPdfService
|
||||
'customer_no' => (string) ($check['debitor_no'] ?? ''),
|
||||
'domain' => (string) ($check['domain_url'] ?? ($check['domain_no'] ?? '')),
|
||||
'product' => (string) ($check['product_name'] ?? ($check['product_code'] ?? '')),
|
||||
'owner' => (string) ($check['owner_name'] ?? ''),
|
||||
'status' => $status,
|
||||
'status_label' => t(SecurityCheckProcess::statusLabel($status)),
|
||||
'summary' => [
|
||||
@@ -196,6 +200,26 @@ final class SecurityReportPdfService
|
||||
return $sections;
|
||||
}
|
||||
|
||||
/**
|
||||
* Produce the report HTML. When a custom template is configured (and the
|
||||
* collaborating services are wired), it is filled with the report context;
|
||||
* otherwise the built-in PHTML default layout is used. Keeping the default
|
||||
* on the proven PHTML path makes the feature purely additive.
|
||||
*
|
||||
* @param array<string, mixed> $report
|
||||
*/
|
||||
private function renderReportHtml(array $report): string
|
||||
{
|
||||
if ($this->reportSettings !== null && $this->templateService !== null) {
|
||||
$template = $this->reportSettings->getTemplateHtml();
|
||||
if ($template !== '') {
|
||||
return $this->templateService->render($template, $report);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->renderTemplate($report);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $report
|
||||
*/
|
||||
@@ -218,16 +242,25 @@ final class SecurityReportPdfService
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve a logo data URI: tenant light-logo → global branding logo →
|
||||
* static brand asset → transparent pixel. Mirrors the core PDF pattern; the
|
||||
* PDF has no theme context, so the light variant is always used.
|
||||
* Resolve a logo data URI: configured report logo → tenant light-logo →
|
||||
* global branding logo → static brand asset → transparent pixel. Mirrors the
|
||||
* core PDF pattern; the PDF has no theme context, so the light variant is
|
||||
* always used.
|
||||
*/
|
||||
private function resolveLogoDataUri(string $tenantUuid): string
|
||||
{
|
||||
$path = '';
|
||||
$mime = '';
|
||||
|
||||
if ($this->tenantLogoService !== null && $tenantUuid !== '' && $this->tenantLogoService->hasLogo($tenantUuid, TenantLogoService::THEME_LIGHT)) {
|
||||
if ($this->reportLogoService !== null && $this->reportLogoService->hasLogo()) {
|
||||
$logoPath = $this->reportLogoService->findLogoPath(256);
|
||||
if ($logoPath && is_file($logoPath)) {
|
||||
$path = $logoPath;
|
||||
$mime = $this->reportLogoService->detectMime($logoPath);
|
||||
}
|
||||
}
|
||||
|
||||
if ($path === '' && $this->tenantLogoService !== null && $tenantUuid !== '' && $this->tenantLogoService->hasLogo($tenantUuid, TenantLogoService::THEME_LIGHT)) {
|
||||
$logoPath = $this->tenantLogoService->findLogoPath($tenantUuid, TenantLogoService::THEME_LIGHT, 128);
|
||||
if ($logoPath && is_file($logoPath)) {
|
||||
$path = $logoPath;
|
||||
|
||||
Reference in New Issue
Block a user