| Server IP : 202.61.199.114 / Your IP : 216.73.217.139 Web Server : nginx/1.22.1 System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64 User : web20 ( 1018) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/seaside.pacim.de/web/ |
Upload File : |
<?php
/**
* newsletter.php – ÖFFENTLICH: Newsletter-Abmeldung (One-Click) und Double-Opt-in-Bestätigung.
* Signierte Tokens (HMAC). Kein Login. Aufruf:
* /newsletter.php?a=unsub&c=<customer_id>&t=<token>
* /newsletter.php?a=confirm&c=<customer_id>&t=<token>
*/
require_once( __DIR__ . '/includes/config.inc.php' );
@ini_set( 'display_errors', '0' );
error_reporting( 0 );
function nl_page( $title, $msg, $ok = true ) {
$site = defined( 'SITE_URL' ) ? SITE_URL : '';
$color = $ok ? '#2e9e4f' : '#d63939';
header( 'Content-Type: text/html; charset=utf-8' );
echo '<!doctype html><html lang="de"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">'
. '<title>' . htmlspecialchars( $title, ENT_QUOTES, 'UTF-8' ) . '</title>'
. '<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap" rel="stylesheet">'
. '<style>body{margin:0;min-height:100vh;display:flex;align-items:center;justify-content:center;background:#f5f7fb;font-family:Inter,Arial,sans-serif;color:#1e2633}'
. '.card{max-width:440px;background:#fff;border:1px solid #e6e7eb;border-radius:12px;box-shadow:0 10px 40px rgba(15,23,42,.08);padding:32px;text-align:center}'
. '.ic{width:60px;height:60px;border-radius:50%;background:' . $color . '1a;color:' . $color . ';display:flex;align-items:center;justify-content:center;margin:0 auto 16px;font-size:30px;font-weight:700}'
. 'h1{font-size:20px;margin:0 0 8px}p{color:#626d7d;font-size:14px;line-height:1.6;margin:0}</style></head><body>'
. '<div class="card"><div class="ic">' . ( $ok ? '✓' : '!' ) . '</div><h1>' . htmlspecialchars( $title, ENT_QUOTES, 'UTF-8' ) . '</h1><p>' . $msg . '</p></div></body></html>';
exit();
}
$a = isset( $_GET['a'] ) ? $_GET['a'] : '';
$c = (int) ( $_GET['c'] ?? 0 );
$t = (string) ( $_GET['t'] ?? '' );
$g = (string) ( $_GET['g'] ?? '' ); // Zielgruppe: leer/customer | employee | partner
if ( $a === 'unsub' ) {
$db = new MysqliDb( MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB );
if ( $g === 'employee' || $g === 'partner' ) {
if ( $c <= 0 || ! pacim_sign_verify( 'unsub:' . $g . ':' . $c, $t ) ) nl_page( 'Ungültiger Link', 'Dieser Abmeldelink ist ungültig oder abgelaufen.', false );
$u = $db->rawQueryOne( "SELECT user_email FROM pacim_users WHERE user_id = ?", array( $c ) );
if ( ! $u ) nl_page( 'Nicht gefunden', 'Der Kontakt wurde nicht gefunden.', false );
newsletter::suppress( $u['user_email'], 'unsubscribe', null );
nl_page( 'Abgemeldet', 'Sie wurden erfolgreich abgemeldet. Sie erhalten keine weiteren Newsletter-Mails mehr.' );
}
if ( $g === 'list' ) {
if ( $c <= 0 || ! pacim_sign_verify( 'unsub:list:' . $c, $t ) ) nl_page( 'Ungültiger Link', 'Dieser Abmeldelink ist ungültig oder abgelaufen.', false );
$e = $db->rawQueryOne( "SELECT entry_email FROM pacim_mail_list_entries WHERE entry_id = ?", array( $c ) );
if ( ! $e ) nl_page( 'Nicht gefunden', 'Der Kontakt wurde nicht gefunden.', false );
newsletter::suppress( $e['entry_email'], 'unsubscribe', null );
nl_page( 'Abgemeldet', 'Sie wurden erfolgreich abgemeldet. Sie erhalten keine weiteren Newsletter-Mails mehr.' );
}
if ( $c <= 0 || ! pacim_sign_verify( 'unsub:' . $c, $t ) ) nl_page( 'Ungültiger Link', 'Dieser Abmeldelink ist ungültig oder abgelaufen.', false );
$cust = $db->rawQueryOne( "SELECT customer_email FROM pacim_customer WHERE customer_id = ?", array( $c ) );
if ( ! $cust ) nl_page( 'Nicht gefunden', 'Der Kontakt wurde nicht gefunden.', false );
newsletter::suppress( $cust['customer_email'], 'unsubscribe', $c );
nl_page( 'Abgemeldet', 'Sie wurden erfolgreich vom Newsletter abgemeldet. Sie erhalten keine weiteren Newsletter-Mails mehr.' );
}
if ( $a === 'confirm' ) {
if ( $c <= 0 || ! pacim_sign_verify( 'optin:' . $c, $t ) ) nl_page( 'Ungültiger Link', 'Dieser Bestätigungslink ist ungültig oder abgelaufen.', false );
newsletter::confirmOptin( $c );
nl_page( 'Anmeldung bestätigt', 'Vielen Dank! Ihre Newsletter-Anmeldung ist jetzt bestätigt.' );
}
http_response_code( 400 );
nl_page( 'Ungültige Anfrage', 'Die Anfrage konnte nicht verarbeitet werden.', false );