Rechtstexte und B2C-Vertragsabläufe absichern

This commit is contained in:
2026-08-22 14:31:56 +02:00
parent d320a4fd7a
commit a31a235422
58 changed files with 2502 additions and 316 deletions
+21 -5
View File
@@ -67,6 +67,7 @@ if ($canManageSettings) {
$errors = $result['errors'];
$settings = [
'name' => $_POST['tenant_name'] ?? '',
'customer_type' => $_POST['customer_type'] ?? 'unknown',
'timezone' => $_POST['timezone'] ?? 'Europe/Berlin',
'locale' => $_POST['locale'] ?? 'de-DE',
'currency_code' => $_POST['currency_code'] ?? 'EUR',
@@ -137,6 +138,14 @@ include 'nav.php';
<label for="tenant_name">Kundenname</label>
<input type="text" name="tenant_name" id="tenant_name" value="<?php echo saas_html($settings['name']); ?>" required>
</div>
<div class="col-6 col-12-small">
<label for="customer_type">Vertragstyp</label>
<select name="customer_type" id="customer_type" required>
<option value=""<?php echo $settings['customer_type'] === 'unknown' ? ' selected' : ''; ?>>Bitte auswählen</option>
<option value="business"<?php echo $settings['customer_type'] === 'business' ? ' selected' : ''; ?>>Unternehmen / selbstständige Tätigkeit</option>
<option value="consumer"<?php echo $settings['customer_type'] === 'consumer' ? ' selected' : ''; ?>>Verbraucher / private Nutzung</option>
</select>
</div>
<div class="col-6 col-12-small">
<label for="timezone">Zeitzone</label>
<input type="text" name="timezone" id="timezone" value="<?php echo saas_html($settings['timezone']); ?>" required>
@@ -299,12 +308,20 @@ $watermarkAn = $watermarkErzwungen || (int)($settings['watermark_enabled'] ?? 1)
<p>
Aktueller Tarif: <b><?php echo saas_html($billingPlans[$billingCheck['current_plan']]['label'] ?? $billingCheck['current_plan']); ?></b><br>
Aktive Teilnehmer: <?php echo (int)$billingCheck['active_participants']; ?>
<?php if (!empty($user['contract_ends_at'])): ?>
<br><b>Vertrag gekündigt:</b> Der Zugang endet am <?php echo saas_html(date('d.m.Y, H:i', strtotime((string)$user['contract_ends_at']))); ?> Uhr. Bitte lade vorher den <a href="datenexport.php">Datenexport</a> herunter.
<?php elseif (($billing['subscription_status'] ?? '') === 'canceling'): ?>
<br><b>Gekündigt:</b> Der kostenpflichtige Tarif endet <?php echo !empty($billing['current_period_end']) ? 'am ' . saas_html(date('d.m.Y, H:i', strtotime((string)$billing['current_period_end']))) . ' Uhr' : 'zum Ende der laufenden Abrechnungsperiode'; ?>. Danach gilt der kostenlose Tarif.
<?php endif; ?>
</p>
<?php if (isset($_GET['upgrade']) && $_GET['upgrade'] === 'success'): ?>
<div class="hint-box success"><p>Danke! Die Änderung wird verarbeitet, der Tarif ist gleich aktuell.</p></div>
<?php elseif (isset($_GET['upgrade']) && $_GET['upgrade'] === 'cancelled'): ?>
<div class="hint-box error"><p>Der Bezahlvorgang wurde abgebrochen, es wurde nichts geändert.</p></div>
<?php endif; ?>
<?php if (isset($_GET['contract_mail_failed'])): ?>
<div class="hint-box error"><p>Die Tarifänderung wurde ausgeführt, aber die Vertragsbestätigung konnte nicht per E-Mail versendet werden. Bitte speichere <a href="legal/agb-<?php echo saas_html(APP_TERMS_VERSION); ?>.txt" download>die AGB</a> und bei privater Nutzung <a href="legal/widerruf-<?php echo saas_html(APP_WITHDRAWAL_VERSION); ?>.txt" download>die Widerrufsbelehrung</a> und melde dich über das <a href="<?php echo saas_html(app_legal_ticket_url()); ?>">Ticketsystem</a>.</p></div>
<?php endif; ?>
<?php if ($billingCheck['needs_upgrade']): ?>
<div class="hint-box error">
@@ -344,15 +361,15 @@ $watermarkAn = $watermarkErzwungen || (int)($settings['watermark_enabled'] ?? 1)
<?php if ($isCurrent): ?>
<?php elseif (!$isSelfService): ?>
<a href="mailto:info@ctb-it.de" class="button small">Anfragen</a>
<a href="<?php echo saas_html(app_legal_ticket_url()); ?>" class="button small">Anfragen</a>
<?php elseif (!$selectable): ?>
<button type="button" class="button small" disabled>Nicht wählbar</button>
<?php else: ?>
<form method="post" action="abo-upgrade.php" onsubmit="return confirm('Tarif wirklich auf ' + <?php echo json_encode($plan['label']); ?> + ' ändern?');">
<form method="post" action="<?php echo $planCode === 'free' ? 'abo-upgrade.php' : 'abo-bestellen.php'; ?>">
<?php echo app_csrf_field(); ?>
<input type="hidden" name="plan_code" value="<?php echo saas_html($planCode); ?>">
<button type="submit" class="button small primary">
<?php echo $planCode === 'free' ? 'Kündigen / auf Kostenlos wechseln' : 'Buchen'; ?>
<?php echo $planCode === 'free' ? 'Kostenpflichtiges Abo kündigen' : 'Bestellung prüfen'; ?>
</button>
</form>
<?php endif; ?>
@@ -360,8 +377,7 @@ $watermarkAn = $watermarkErzwungen || (int)($settings['watermark_enabled'] ?? 1)
</tr>
<?php endforeach; ?>
</table>
<p><small>Ein Wechsel zwischen bezahlten Tarifen wird bei Stripe anteilig verrechnet (Proration) und
gilt sofort. Details zu den Tarifgrenzen stehen unter <a href="preise.php">Preise</a>.</small></p>
<p><small>Bei einem Wechsel zwischen bezahlten Tarifen gilt die neue Teilnehmergrenze sofort; der neue Monatspreis wird ab der nächsten Verlängerung berechnet. Die Kündigung zum kostenlosen Tarif wirkt zum Ende der laufenden Abrechnungsperiode. Details stehen unter <a href="preise.php">Preise</a>.</small></p>
<?php if (($billing['stripe_customer_id'] ?? null) !== null): ?>
<form method="post" action="abo-portal.php">