MilujemeHokej.cz
MilujemeHokej.cz
To Top
admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('hokejovy_kviz_nonce')
));
// Načtení šablony kvízu
ob_start();
include plugin_dir_path(__FILE__) . 'templates/kviz-template.php';
return ob_get_clean();
}
add_shortcode('hokejovy_kviz', 'hokejovy_kviz_shortcode');
// AJAX handler pro zpracování formuláře
function hokejovy_kviz_submit_email() {
// Ověření nonce pro zabezpečení
if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'hokejovy_kviz_nonce')) {
wp_send_json_error('Neplatný bezpečnostní token');
}
// Získání dat z formuláře
$email = sanitize_email($_POST['email']);
$score = intval($_POST['score']);
$total_questions = intval($_POST['total_questions']);
// Validace e-mailu
if (!is_email($email)) {
wp_send_json_error('Neplatná e-mailová adresa');
}
// Uložení e-mailu do databáze
global $wpdb;
$table_name = $wpdb->prefix . 'hokejovy_kviz_emails';
// Aktualizace nebo vložení záznamu
$existing = $wpdb->get_var($wpdb->prepare(
"SELECT id FROM $table_name WHERE email = %s",
$email
));
if ($existing) {
$wpdb->update(
$table_name,
array(
'score' => $score,
'completed_at' => current_time('mysql')
),
array('email' => $email)
);
} else {
$wpdb->insert(
$table_name,
array(
'email' => $email,
'score' => $score,
'completed_at' => current_time('mysql')
)
);
}
// Volitelně: přidání uživatele do mailing listu
if (isset($_POST['subscribe']) && $_POST['subscribe'] === 'true') {
// Zde může být integrace s vaším preferovaným e-mailovým marketingovým nástrojem
// Například MailChimp, GetResponse, atd.
}
// Výpočet percentilu
$total_respondents = $wpdb->get_var("SELECT COUNT(*) FROM $table_name");
$better_than = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $table_name WHERE score < %d",
$score
));
$percentile = 0;
if ($total_respondents > 0) {
$percentile = round(($better_than / $total_respondents) * 100);
}
// Poslání e-mailu uživateli s výsledky
$subject = 'Vaše výsledky kvízu o českém hokeji';
$message = "Dobrý den,nn";
$message .= "Děkujeme za vyplnění našeho kvízu o českém hokeji.nn";
$message .= "Vaše skóre: $score z $total_questions správných odpovědí.n";
$message .= "Jste lepší než $percentile% ostatních respondentů!nn";
$message .= "S pozdravem,n";
$message .= get_bloginfo('name');
wp_mail($email, $subject, $message);
// Odpověď AJAX
wp_send_json_success(array(
'percentile' => $percentile,
'total_respondents' => $total_respondents
));
}
add_action('wp_ajax_hokejovy_kviz_submit_email', 'hokejovy_kviz_submit_email');
add_action('wp_ajax_nopriv_hokejovy_kviz_submit_email', 'hokejovy_kviz_submit_email');
// Vytvoření tabulky pro e-maily při aktivaci pluginu
function hokejovy_kviz_activation() {
global $wpdb;
$table_name = $wpdb->prefix . 'hokejovy_kviz_emails';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
email varchar(100) NOT NULL,
score tinyint(4) NOT NULL,
completed_at datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY email (email)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
register_activation_hook(__FILE__, 'hokejovy_kviz_activation');
// Admin stránka pro zobrazení výsledků a exportu e-mailů
function hokejovy_kviz_admin_menu() {
add_menu_page(
'Hokejový Kvíz - Statistiky',
'Hokejový Kvíz',
'manage_options',
'hokejovy-kviz',
'hokejovy_kviz_admin_page',
'dashicons-chart-line',
30
);
}
add_action('admin_menu', 'hokejovy_kviz_admin_menu');
// Vykreslení admin stránky
function hokejovy_kviz_admin_page() {
global $wpdb;
$table_name = $wpdb->prefix . 'hokejovy_kviz_emails';
// Export do CSV
if (isset($_GET['export']) && $_GET['export'] === 'csv') {
$emails = $wpdb->get_results("SELECT email, score, completed_at FROM $table_name ORDER BY completed_at DESC");
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=hokejovy-kviz-emaily.csv');
$output = fopen('php://output', 'w');
fputcsv($output, array('E-mail', 'Skóre', 'Datum dokončení'));
foreach ($emails as $row) {
fputcsv($output, array($row->email, $row->score, $row->completed_at));
}
fclose($output);
exit;
}
// Počet respondentů
$total_respondents = $wpdb->get_var("SELECT COUNT(*)