prepare('SELECT plan_code FROM tenant_billing WHERE tenant_id = ?'); $stmt->execute([$tenantId]); $planCode = $stmt->fetchColumn(); $cache[$tenantId] = $planCode === false ? 'free' : (string)$planCode; } catch (Throwable $e) { // Laesst sich der Tarif nicht lesen, bleibt die Oberflaeche sauber - // ein Wasserzeichen bei einem zahlenden Kunden waere der schlimmere // Fehler als ein fehlendes bei einem kostenlosen. $cache[$tenantId] = 'unknown'; } return $cache[$tenantId]; } /** * Zeigt dieser Mandant das Wasserzeichen? Nur der kostenlose Tarif tut das. */ function plan_watermark_visible(PDO $pdo, int $tenantId): bool { if ($tenantId <= 0) { return false; } return plan_watermark_plan_code($pdo, $tenantId) === 'free'; } /** * Wortmarke der Kaffeeliste als Inline-SVG. Als Inline-Grafik statt als * Bilddatei, damit das Wasserzeichen ohne zusaetzlichen Request auskommt, * auf jedem Bildschirm scharf bleibt und die Farbe der Umgebung uebernimmt. */ function plan_watermark_logo_svg(): string { return ''; } /** * Markup des Wasserzeichens. Ohne erreichbare Marketing-Domain (CLI, * ungewoehnliche Hosts) bleibt es bei Logo und Namen ohne Link - ein * Verweis ins Leere waere schlechter als keiner. */ function plan_watermark_html(): string { $url = app_marketing_url(); $label = $url !== '' ? preg_replace('#^https?://#i', '', $url) : 'Kaffeeliste'; $inner = plan_watermark_logo_svg() . '' . htmlspecialchars($label, ENT_QUOTES, 'UTF-8') . ''; if ($url === '') { return '
' . $inner . '
'; } return '' . $inner . ''; }