dreh-mich
prefix . self::TABLE_SUFFIX;
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
zeitpunkt DATETIME NOT NULL,
ip_hash VARCHAR(64) NOT NULL,
gewonnen TINYINT(1) NOT NULL DEFAULT 0,
code VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta($sql);
}
/**
* Erzeugt einen zufälligen, gut lesbaren Gewinncode.
*/
private function code_erzeugen() {
$zeichen = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; // ohne verwechselbare Zeichen (O/0, I/1)
$code = 'FLAMES-';
for ($i = 0; $i < 6; $i++) {
$code .= $zeichen[random_int(0, strlen($zeichen) - 1)];
}
return $code;
}
/**
* Loggt eine Teilnahme in der Datenbank.
*/
private function teilnahme_loggen($gewonnen, $code = null) {
global $wpdb;
$table_name = $wpdb->prefix . self::TABLE_SUFFIX;
$ip = $_SERVER['REMOTE_ADDR'] ?? 'unbekannt';
$ip_hash = hash('sha256', $ip . wp_salt());
$wpdb->insert($table_name, [
'zeitpunkt' => current_time('mysql'),
'ip_hash' => $ip_hash,
'gewonnen' => $gewonnen ? 1 : 0,
'code' => $code,
]);
}
/**
* Der eigentliche Shortcode-Output. Einfach z.B. auf einer eigenen Seite
* per [gewinncode_qr] einfügen und diese Seite in den QR-Code verlinken.
*/
public function shortcode_ausgabe($atts) {
// Falls dieser Besucher (Cookie) schon ein Ergebnis hat, dieses erneut anzeigen
if (isset($_COOKIE[self::COOKIE_NAME])) {
$gespeichert = json_decode(stripslashes($_COOKIE[self::COOKIE_NAME]), true);
if (is_array($gespeichert) && isset($gespeichert['gewonnen'])) {
return $this->ergebnis_html($gespeichert['gewonnen'], $gespeichert['code'] ?? null, true);
}
}
// Neues Los ziehen: 1 von 50 gewinnt
$gewonnen = (random_int(1, self::CHANCE_NENNER) === 1);
$code = $gewonnen ? $this->code_erzeugen() : null;
// Ergebnis protokollieren
$this->teilnahme_loggen($gewonnen, $code);
// Ergebnis im Cookie speichern, damit Neuladen kein neues Los erzeugt
$cookie_wert = wp_json_encode(['gewonnen' => $gewonnen, 'code' => $code]);
setcookie(self::COOKIE_NAME, $cookie_wert, time() + self::COOKIE_DAUER, '/');
return $this->ergebnis_html($gewonnen, $code, false);
}
/**
* Baut das sichtbare HTML für Gewinn/Niete.
*/
private function ergebnis_html($gewonnen, $code, $bereits_gespielt) {
ob_start();
?>
Du hast bereits teilgenommen – hier dein Ergebnis:
🎉 Herzlichen Glückwunsch!
Du hast gewonnen! Dein Gewinncode:
Bitte Screenshot machen und am Infostand vorzeigen.
Leider kein Gewinn 😔
Diesmal war es nicht der große Treffer – aber danke fürs Mitmachen!
prefix . self::TABLE_SUFFIX;
$gesamt = $wpdb->get_var("SELECT COUNT(*) FROM $table_name");
$gewinne = $wpdb->get_var("SELECT COUNT(*) FROM $table_name WHERE gewonnen = 1");
echo '
Gewinncode Aktion – Übersicht
';
echo '
Gesamt-Teilnahmen: ' . intval($gesamt) . '
';
echo '
Davon Gewinne: ' . intval($gewinne) . '
';
$eintraege = $wpdb->get_results("SELECT * FROM $table_name ORDER BY id DESC LIMIT 100");
echo '
| Zeitpunkt | Gewonnen | Code |
|---|---|---|
| ' . esc_html($eintrag->zeitpunkt) . ' | ' . ($eintrag->gewonnen ? 'Ja' : 'Nein') . ' | ' . esc_html($eintrag->code ?? '-') . ' |
';
}
}
new QR_Gewinncode_Plugin();
