Wheel_of_Fortune_Plugin/admin/users-page.php

381 lines
18 KiB
PHP

<?php
/**
* Stran za upravljanje uporabnikov in spinov za Kolo Sreče
*/
// Prepreči neposreden dostop
if (!defined('ABSPATH')) {
exit;
}
// Preveri, če ima uporabnik pravice za dostop
if (!current_user_can('manage_options')) {
return;
}
// Pridobi vsa kolesa
global $wpdb;
$wheels_table = $wpdb->prefix . 'wof_wheels';
$wheels = $wpdb->get_results("SELECT * FROM $wheels_table ORDER BY id ASC", ARRAY_A);
// Izberi kolo (privzeto prvo)
$selected_wheel_id = isset($_GET['wheel_id']) ? intval($_GET['wheel_id']) : 1;
$selected_wheel = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wheels_table WHERE id = %d", $selected_wheel_id), ARRAY_A);
if (!$selected_wheel) {
$selected_wheel_id = 1;
$selected_wheel = $wpdb->get_row("SELECT * FROM $wheels_table WHERE id = 1", ARRAY_A);
}
// Obdelaj akcije
if (isset($_POST['add_spins_submit'])) {
check_admin_referer('wheel_add_spins_nonce', 'wheel_add_spins_nonce');
$user_id = intval($_POST['user_id']);
$spins = intval($_POST['spins']);
$wheel_id = intval($_POST['wheel_id']);
if ($user_id > 0 && $spins > 0 && $wheel_id > 0) {
$spins_table = $wpdb->prefix . 'wheel_spins';
// Preveri, če uporabnik že ima zapis za to kolo
$existing = $wpdb->get_var($wpdb->prepare(
"SELECT id FROM $spins_table WHERE user_id = %d AND wheel_id = %d",
$user_id, $wheel_id
));
if ($existing) {
$wpdb->query($wpdb->prepare(
"UPDATE $spins_table SET spins_available = spins_available + %d WHERE user_id = %d AND wheel_id = %d",
$spins, $user_id, $wheel_id
));
} else {
$wpdb->insert($spins_table, [
'user_id' => $user_id,
'wheel_id' => $wheel_id,
'spins_available' => $spins,
'last_spin_date' => null
], ['%d', '%d', '%d', '%s']);
}
echo '<div class="notice notice-success is-dismissible"><p>' .
sprintf(__('Uporabniku ID %d je bilo uspešno dodanih %d spinov za kolo %s.', 'wheel-of-fortune'), $user_id, $spins, $selected_wheel['name']) .
'</p></div>';
}
}
if (isset($_POST['reset_spins_submit'])) {
check_admin_referer('wheel_reset_spins_nonce', 'wheel_reset_spins_nonce');
$user_id = intval($_POST['user_id']);
$wheel_id = intval($_POST['wheel_id']);
if ($user_id > 0 && $wheel_id > 0) {
$spins_table = $wpdb->prefix . 'wheel_spins';
$wpdb->update(
$spins_table,
array('spins_available' => 0),
array('user_id' => $user_id, 'wheel_id' => $wheel_id)
);
echo '<div class="notice notice-success is-dismissible"><p>' .
sprintf(__('Spini uporabnika ID %d za kolo %s so bili uspešno ponastavljeni na 0.', 'wheel-of-fortune'), $user_id, $selected_wheel['name']) .
'</p></div>';
}
}
// Pridobi podatke o uporabnikih
$users_table = $wpdb->prefix . 'users';
$spins_table = $wpdb->prefix . 'wheel_spins';
$log_table = $wpdb->prefix . 'wheel_log';
$prizes_table = $wpdb->prefix . 'wheel_prizes';
// Iskanje uporabnikov
$search = isset($_GET['s']) ? sanitize_text_field($_GET['s']) : '';
$search_condition = '';
if (!empty($search)) {
$search_condition = $wpdb->prepare(
"AND (u.user_login LIKE %s OR u.user_email LIKE %s OR u.display_name LIKE %s)",
"%{$search}%",
"%{$search}%",
"%{$search}%"
);
}
// Pridobi uporabnike z spin-i za izbrano kolo
$users = $wpdb->get_results(
$wpdb->prepare(
"SELECT u.ID, u.user_login, u.user_email, u.display_name,
COALESCE(s.spins_available, 0) as spins_available,
COUNT(l.id) as total_spins
FROM {$users_table} u
LEFT JOIN {$spins_table} s ON u.ID = s.user_id AND s.wheel_id = %d
LEFT JOIN {$log_table} l ON u.ID = l.user_id AND l.wheel_id = %d
WHERE 1=1 {$search_condition}
GROUP BY u.ID
HAVING total_spins > 0 OR spins_available > 0
ORDER BY total_spins DESC",
$selected_wheel_id, $selected_wheel_id
),
ARRAY_A
);
// Izbrani uporabnik za urejanje
$selected_user_id = isset($_GET['edit_user']) ? intval($_GET['edit_user']) : 0;
$selected_user = null;
$user_prizes = array();
if ($selected_user_id > 0) {
$selected_user = get_userdata($selected_user_id);
if ($selected_user) {
// Pridobi spine za izbrano kolo
$spins = $wpdb->get_var($wpdb->prepare(
"SELECT spins_available FROM $spins_table WHERE user_id = %d AND wheel_id = %d",
$selected_user_id, $selected_wheel_id
));
$spins = $spins ?: 0;
// Pridobi nagrade uporabnika za izbrano kolo
$user_prizes = $wpdb->get_results(
$wpdb->prepare(
"SELECT l.id, p.name as prize_name, p.description as prize_description,
l.spin_date, l.redeemed
FROM {$log_table} l
JOIN {$prizes_table} p ON l.prize_id = p.id
WHERE l.user_id = %d AND l.wheel_id = %d
ORDER BY l.spin_date DESC",
$selected_user_id, $selected_wheel_id
),
ARRAY_A
);
}
}
?>
<div class="wrap">
<h1><?php echo esc_html__('Uporabniki in spini', 'wheel-of-fortune'); ?></h1>
<!-- Izbira kolesa -->
<div class="tablenav top">
<div class="alignleft actions">
<form method="get" style="display: inline-block; margin-right: 20px;">
<input type="hidden" name="page" value="wof-users">
<label for="wheel-select"><?php echo esc_html__('Izberi kolo:', 'wheel-of-fortune'); ?></label>
<select name="wheel_id" id="wheel-select" onchange="this.form.submit()">
<?php foreach ($wheels as $wheel): ?>
<option value="<?php echo esc_attr($wheel['id']); ?>" <?php selected($selected_wheel_id, $wheel['id']); ?>>
<?php echo esc_html($wheel['name']); ?>
</option>
<?php endforeach; ?>
</select>
</form>
<form method="get" style="display: inline-block;">
<input type="hidden" name="page" value="wof-users">
<input type="hidden" name="wheel_id" value="<?php echo esc_attr($selected_wheel_id); ?>">
<label for="user-search" class="screen-reader-text"><?php echo esc_html__('Iskanje uporabnikov:', 'wheel-of-fortune'); ?></label>
<input type="search" id="user-search" name="s" value="<?php echo esc_attr($search); ?>">
<input type="submit" class="button" value="<?php echo esc_attr__('Išči uporabnike', 'wheel-of-fortune'); ?>">
</form>
</div>
<br class="clear">
</div>
<div class="wheel-users-container">
<div class="wheel-users-list">
<h2><?php echo sprintf(esc_html__('Seznam uporabnikov s spini za kolo: %s', 'wheel-of-fortune'), esc_html($selected_wheel['name'])); ?></h2>
<table class="wp-list-table widefat fixed striped">
<thead>
<tr>
<th scope="col"><?php echo esc_html__('ID', 'wheel-of-fortune'); ?></th>
<th scope="col"><?php echo esc_html__('E-pošta', 'wheel-of-fortune'); ?></th>
<th scope="col"><?php echo esc_html__('Skupno št. spinov', 'wheel-of-fortune'); ?></th>
<th scope="col"><?php echo esc_html__('Preostali spini', 'wheel-of-fortune'); ?></th>
<th scope="col"><?php echo esc_html__('Akcije', 'wheel-of-fortune'); ?></th>
</tr>
</thead>
<tbody>
<?php if (empty($users)) : ?>
<tr>
<td colspan="5"><?php echo esc_html__('Ni najdenih uporabnikov s spini.', 'wheel-of-fortune'); ?></td>
</tr>
<?php else : ?>
<?php foreach ($users as $user) : ?>
<tr<?php echo ($selected_user_id == $user['ID']) ? ' class="active"' : ''; ?>>
<td><?php echo esc_html($user['ID']); ?></td>
<td><?php echo esc_html($user['user_email']); ?></td>
<td><?php echo esc_html($user['total_spins']); ?></td>
<td><?php echo esc_html($user['spins_available']); ?></td>
<td>
<a href="<?php echo esc_url(add_query_arg('edit_user', $user['ID'])); ?>" class="button"><?php echo esc_html__('Podrobnosti', 'wheel-of-fortune'); ?></a>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
<?php if ($selected_user) : ?>
<div class="wheel-user-edit">
<h2><?php echo sprintf(esc_html__('Podrobnosti za uporabnika: %s', 'wheel-of-fortune'), esc_html($selected_user->display_name)); ?></h2>
<table class="form-table">
<tr>
<th scope="row"><?php echo esc_html__('ID uporabnika', 'wheel-of-fortune'); ?></th>
<td><?php echo esc_html($selected_user_id); ?></td>
</tr>
<tr>
<th scope="row"><?php echo esc_html__('E-pošta', 'wheel-of-fortune'); ?></th>
<td><?php echo esc_html($selected_user->user_email); ?></td>
</tr>
<tr>
<th scope="row"><?php echo esc_html__('Skupno število spinov', 'wheel-of-fortune'); ?></th>
<td>
<?php
$total_spins = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$log_table} WHERE user_id = %d AND wheel_id = %d",
$selected_user_id, $selected_wheel_id
));
echo esc_html($total_spins);
?>
</td>
</tr>
<tr>
<th scope="row"><?php echo esc_html__('Preostali spini', 'wheel-of-fortune'); ?></th>
<td><?php echo esc_html($spins); ?></td>
</tr>
</table>
<div class="wheel-user-actions">
<div class="wheel-action-box">
<h3><?php echo esc_html__('Dodaj spine', 'wheel-of-fortune'); ?></h3>
<form method="post" action="">
<?php wp_nonce_field('wheel_add_spins_nonce', 'wheel_add_spins_nonce'); ?>
<input type="hidden" name="user_id" value="<?php echo esc_attr($selected_user_id); ?>">
<input type="hidden" name="wheel_id" value="<?php echo esc_attr($selected_wheel_id); ?>">
<p>
<label for="spins"><?php echo esc_html__('Število spinov za dodati:', 'wheel-of-fortune'); ?></label>
<input type="number" id="spins" name="spins" value="1" min="1" class="regular-text" required>
</p>
<p class="submit">
<input type="submit" name="add_spins_submit" class="button button-primary" value="<?php echo esc_attr__('Dodaj spine', 'wheel-of-fortune'); ?>">
</p>
</form>
</div>
<div class="wheel-action-box">
<h3><?php echo esc_html__('Ponastavi spine', 'wheel-of-fortune'); ?></h3>
<form method="post" action="">
<?php wp_nonce_field('wheel_reset_spins_nonce', 'wheel_reset_spins_nonce'); ?>
<input type="hidden" name="user_id" value="<?php echo esc_attr($selected_user_id); ?>">
<input type="hidden" name="wheel_id" value="<?php echo esc_attr($selected_wheel_id); ?>">
<p><?php echo esc_html__('S klikom na gumb boste ponastavili število spinov uporabnika na 0.', 'wheel-of-fortune'); ?></p>
<p class="submit">
<input type="submit" name="reset_spins_submit" class="button button-secondary" value="<?php echo esc_attr__('Ponastavi spine na 0', 'wheel-of-fortune'); ?>" onclick="return confirm('<?php echo esc_js(__('Ali ste prepričani, da želite ponastaviti spine tega uporabnika na 0?', 'wheel-of-fortune')); ?>');">
</p>
</form>
</div>
</div>
<h3><?php echo esc_html__('Prejete nagrade', 'wheel-of-fortune'); ?></h3>
<?php if (empty($user_prizes)) : ?>
<p><?php echo esc_html__('Ta uporabnik še ni prejel nobene nagrade.', 'wheel-of-fortune'); ?></p>
<?php else : ?>
<table class="wp-list-table widefat fixed striped">
<thead>
<tr>
<th scope="col"><?php echo esc_html__('ID', 'wheel-of-fortune'); ?></th>
<th scope="col"><?php echo esc_html__('Nagrada', 'wheel-of-fortune'); ?></th>
<th scope="col"><?php echo esc_html__('Opis', 'wheel-of-fortune'); ?></th>
<th scope="col"><?php echo esc_html__('Datum', 'wheel-of-fortune'); ?></th>
<th scope="col"><?php echo esc_html__('Status', 'wheel-of-fortune'); ?></th>
<th scope="col"><?php echo esc_html__('Akcije', 'wheel-of-fortune'); ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($user_prizes as $prize) : ?>
<tr>
<td><?php echo esc_html($prize['id']); ?></td>
<td><?php echo esc_html($prize['prize_name']); ?></td>
<td><?php echo esc_html($prize['prize_description']); ?></td>
<td><?php echo esc_html(date_i18n(get_option('date_format') . ' ' . get_option('time_format'), strtotime($prize['spin_date']))); ?></td>
<td>
<?php echo $prize['redeemed'] ?
'<span class="dashicons dashicons-yes" style="color: green;"></span> ' . esc_html__('Unovčeno', 'wheel-of-fortune') :
'<span class="dashicons dashicons-no" style="color: red;"></span> ' . esc_html__('Neunovčeno', 'wheel-of-fortune');
?>
</td>
<td>
<?php if (!$prize['redeemed']) : ?>
<form method="post" action="<?php echo esc_url(admin_url('admin.php?page=wheel-stats&user_id=' . $selected_user_id)); ?>">
<?php wp_nonce_field('mark_prize_redeemed_nonce', 'mark_prize_redeemed_nonce'); ?>
<input type="hidden" name="prize_id" value="<?php echo esc_attr($prize['id']); ?>">
<button type="submit" name="mark_redeemed" class="button"><?php echo esc_html__('Označi kot unovčeno', 'wheel-of-fortune'); ?></button>
</form>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
<?php elseif ($selected_user_id > 0) : ?>
<div class="wheel-user-edit">
<p><?php echo esc_html__('Uporabnik ni bil najden.', 'wheel-of-fortune'); ?></p>
</div>
<?php else : ?>
<div class="wheel-user-edit">
<p><?php echo esc_html__('Izberite uporabnika za prikaz podrobnosti.', 'wheel-of-fortune'); ?></p>
</div>
<?php endif; ?>
</div>
<style>
.wheel-users-container {
display: flex;
flex-wrap: wrap;
gap: 20px;
margin-top: 20px;
}
.wheel-users-list {
flex: 2;
min-width: 500px;
}
.wheel-user-edit {
flex: 1;
min-width: 300px;
background: #fff;
padding: 15px;
border: 1px solid #ccd0d4;
box-shadow: 0 1px 1px rgba(0,0,0,.04);
}
.wheel-user-actions {
display: flex;
flex-wrap: wrap;
gap: 20px;
margin-top: 20px;
}
.wheel-action-box {
flex: 1;
min-width: 250px;
padding: 15px;
background: #f9f9f9;
border: 1px solid #e5e5e5;
}
</style>
</div>
</div>