Skip to content

Instantly share code, notes, and snippets.

@madhvendras84
Last active November 18, 2023 10:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save madhvendras84/f0634faed70ff3d8a9a3f496cac138a1 to your computer and use it in GitHub Desktop.
Save madhvendras84/f0634faed70ff3d8a9a3f496cac138a1 to your computer and use it in GitHub Desktop.
function get_current_user_rank_data() {
global $wpdb;
$user_id = get_current_user_id();
$i = 0;
$sql = "
SELECT * FROM " . $wpdb->prefix . "usermeta WHERE meta_key = '_gamipress_points_points'
ORDER BY CAST(meta_value AS UNSIGNED) DESC
";
$results = $wpdb->get_results($sql);
foreach ($results as $result)
{
$i++;
if ($result->user_id == $user_id)
{
$user_rank["points"] = number_format($result->meta_value, 0);
$user_rank["user_data"] = get_userdata($result->user_id);
$user_rank["position"] = $i;
$user_rank["level"] = gamipress_get_user_rank($result->user_id, "levels");
$user_rank["fullname"] = get_usermeta($result->user_id, "first_name", true) . " " . get_usermeta($result->user_id, "last_name", true);
}
}
return $user_rank;
}
function leaderboard_shortcode_function($atts,$content=null) {
if(empty($atts['interval'])){
return '';
}
ob_start();
global $wpdb;
$user_id = get_current_user_id();
$belong_to_top = false;
$days =(-1*intval($atts['interval']));
$sql = "SELECT SUM(points) as points,user_id FROM wprt_gamipress_user_earnings WHERE post_type='points-award' AND date >= DATE(NOW()) + INTERVAL {$days} DAY AND date < DATE(NOW()) + INTERVAL 0 DAY GROUP BY user_id ORDER BY points DESC;
";
$results = $wpdb->get_results($sql);
$i = 0;
$ranking = [];
foreach ($results as $result) {
$i++;
$ranking[$i]["points"] = number_format($result->points,0);
$ranking[$i]["user_data"] = get_userdata($result->user_id);
$ranking[$i]["fullname"] = get_usermeta($result->user_id, "first_name", true)." ".get_usermeta($result->user_id, "last_name", true);
$ranking[$i]["level"] = gamipress_get_user_rank($result->user_id, "levels");
if($result->user_id == $user_id){
$belong_to_top = true;
}
}
$user_rank = [];
if (!$belong_to_top) {
$user_rank = get_current_user_rank_data();
}
?>
<main class="leaderboard page-template-page-leaderboard">
<div class="leaderboard-inner">
<div class="leaderboard-content">
<div class="rankings">
<div class="rank-item header">
<div>RANK</div>
<div>
NAME
</div>
<div>
LEVEL
</div>
<div>POINTS</div>
</div>
<?php
foreach ($ranking as $num => $rank)
{
?>
<div class="rank-item <?=($rank["user_data"]
->data->ID == get_current_user_id()) ? "active" : "" ?>">
<div class="rank-number">
<h3>Rank:</h3>
<div>
<?php
switch ($num)
{
case 1:
?><img src="<?=get_stylesheet_directory_uri(); ?>/assets/images/1.png" alt="gold"/><?php
break;
case 2:
?><img src="<?=get_stylesheet_directory_uri(); ?>/assets/images/2.png" alt="silver"/><?php
break;
case 3:
?><img src="<?=get_stylesheet_directory_uri(); ?>/assets/images/3.png" alt="bronze"/><?php
break;
default:
break;
}
?>
<span><?=$num
?></span>
</div>
</div>
<div class="user">
<h3>Name:</h3>
<div>
<img class="avatar" src="<?=get_avatar_url($rank["user_data"]
->data
->ID) ?>" /> <span><?php echo $rank["fullname"]; ?></span>
</div>
</div>
<div class="level">
<h3>Level:</h3>
<div>
<?php
$badge_img = get_post_meta($rank["level"]->ID, "active", true);
if (!empty($badge_img))
{
echo "<img src='" . wp_get_attachment_url($badge_img) . "' class='level-img'/>";
}
echo '<span>' . $rank["level"]->post_title . '</span>';
?>
</div>
</div>
<div class="points">
<h3>Points:</h3>
<div>
<?=$rank["points"] ?>
</div>
</div>
</div>
<?php
}
if (!empty($user_rank))
{
?>
<div class="rank-item active">
<div class="rank-number">
<h3>Rank:</h3>
<div>
<span><?=$user_rank["position"] ?></span>
</div>
</div>
<div class="user">
<h3>Name:</h3>
<div>
<img class="avatar" src="<?=get_avatar_url($user_rank["user_data"]
->data
->ID) ?>" /> <span><?php echo $user_rank["fullname"]; ?></span>
</div>
</div>
<div class="level">
<h3>Level:</h3>
<div>
<?php
$badge_img = get_post_meta($user_rank["level"]->ID, "active", true);
if (!empty($badge_img))
{
echo "<img src='" . wp_get_attachment_url($badge_img) . "' class='level-img'/>";
}
echo '<span>' . $user_rank["level"]->post_title . '</span>';
?>
</div>
</div>
<div class="points">
<h3>Points:</h3>
<div>
<?=$user_rank["points"] ?>
</div>
</div>
</div>
<?php
}
?>
</div>
</div>
</div>
</main>
<?php
$output = ob_get_clean();
return $output;
}
// Register the shortcode
add_shortcode('leaderboard', 'leaderboard_shortcode_function');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment