Prvi commit: Začetna verzija vtičnika Wheel of Fortune
This commit is contained in:
commit
0d28b08727
21 files changed
+13814
No files matched your search
@@ -0,0 +1,257 @@
|
||||
<?php
|
||||
/**
|
||||
* Stran s statistiko 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 podatke o uporabnikih
|
||||
global $wpdb;
|
||||
$users_table = $wpdb->prefix . 'users';
|
||||
$spins_table = $wpdb->prefix . 'wheel_spins';
|
||||
$log_table = $wpdb->prefix . 'wheel_log';
|
||||
$prizes_table = $wpdb->prefix . 'wheel_prizes';
|
||||
$wheels_table = $wpdb->prefix . 'wof_wheels';
|
||||
|
||||
// Pridobi vsa kolesa
|
||||
$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);
|
||||
}
|
||||
|
||||
// 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_with_spins = $wpdb->get_results(
|
||||
$wpdb->prepare(
|
||||
"SELECT u.ID, u.user_email, u.display_name,
|
||||
COALESCE(s.spins_available, 0) as spins_available,
|
||||
COUNT(l.id) as total_spins,
|
||||
MAX(l.spin_date) as last_spin_date
|
||||
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
|
||||
);
|
||||
|
||||
// Označi nagrado kot unovčeno
|
||||
if (isset($_POST['mark_redeemed']) && isset($_POST['prize_id'])) {
|
||||
check_admin_referer('mark_prize_redeemed_nonce', 'mark_prize_redeemed_nonce');
|
||||
|
||||
$prize_log_id = intval($_POST['prize_id']);
|
||||
|
||||
$wpdb->update(
|
||||
$log_table,
|
||||
array('redeemed' => 1),
|
||||
array('id' => $prize_log_id)
|
||||
);
|
||||
|
||||
echo '<div class="notice notice-success is-dismissible"><p>' .
|
||||
__('Nagrada je bila označena kot unovčena.', 'wheel-of-fortune') .
|
||||
'</p></div>';
|
||||
}
|
||||
|
||||
// Izberi uporabnika za podrobnosti
|
||||
$selected_user_id = isset($_GET['user_id']) ? intval($_GET['user_id']) : 0;
|
||||
|
||||
// Pridobi podrobnosti o nagradah uporabnika za izbrano kolo, če je izbran
|
||||
$user_prizes = array();
|
||||
if ($selected_user_id > 0) {
|
||||
$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__('Statistika Kolesa Sreče', '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-stats">
|
||||
<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-stats">
|
||||
<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 isset($_GET['s']) ? esc_attr($_GET['s']) : ''; ?>">
|
||||
<input type="submit" class="button" value="<?php echo esc_attr__('Išči uporabnike', 'wheel-of-fortune'); ?>">
|
||||
</form>
|
||||
</div>
|
||||
<br class="clear">
|
||||
</div>
|
||||
|
||||
<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__('Zadnji spin', 'wheel-of-fortune'); ?></th>
|
||||
<th scope="col"><?php echo esc_html__('Akcije', 'wheel-of-fortune'); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php if (empty($users_with_spins)) : ?>
|
||||
<tr>
|
||||
<td colspan="6"><?php echo esc_html__('Ni uporabnikov z dodeljenimi spini.', 'wheel-of-fortune'); ?></td>
|
||||
</tr>
|
||||
<?php else : ?>
|
||||
<?php foreach ($users_with_spins 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><?php echo !empty($user['last_spin_date']) ? esc_html(date_i18n(get_option('date_format') . ' ' . get_option('time_format'), strtotime($user['last_spin_date']))) : '-'; ?></td>
|
||||
<td>
|
||||
<a href="<?php echo esc_url(add_query_arg('user_id', $user['ID'])); ?>" class="button"><?php echo esc_html__('Podrobnosti', 'wheel-of-fortune'); ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php if ($selected_user_id > 0) : ?>
|
||||
<?php $selected_user = get_userdata($selected_user_id); ?>
|
||||
<?php if ($selected_user) : ?>
|
||||
<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
|
||||
$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
|
||||
));
|
||||
echo esc_html($spins ?: 0);
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h3><?php echo esc_html__('Zgodovina nagrad', '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" style="display: inline;">
|
||||
<?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; ?>
|
||||
<?php else : ?>
|
||||
<p><?php echo esc_html__('Uporabnik ni bil najden.', 'wheel-of-fortune'); ?></p>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
Reference in new issue
Block a user