Advertisement
Guest User

Untitled

a guest
Feb 26th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1. /**
  2. * Query Custom BP Leaderboard
  3. * @since 1.0
  4. * @version 1.0
  5. */
  6. function mycred_pro_query_custom_leaderboard( $leaderboard, $group_id, $point_type, $append_user, $fresh ) {
  7.  
  8. // Get setup
  9. $setup = mycred_get_bp_group_setup( $group_id );
  10.  
  11. // This function should only handle our custom type
  12. if ( $setup['type'] != 'annual' ) return $leaderboard;
  13.  
  14. // See if we have a cached result, unless a fresh one is requested
  15. if ( ! $fresh ) {
  16.  
  17. $leaderboard = groups_get_groupmeta( $group_id, 'cached_leaderboard' . $point_type );
  18. $leaderboard = maybe_unserialize( $leaderboard );
  19.  
  20. }
  21.  
  22. // If the leaderboard is empty
  23. if ( empty( $leaderboard ) || $fresh ) {
  24.  
  25. global $wpdb, $mycred;
  26.  
  27. $until = current_time( 'timestamp' );
  28. $from = mktime( 0, 0, 0, 1, 1, date( 'Y', $until ) );
  29.  
  30. $group_table = $wpdb->prefix . 'bp_groups_members';
  31. $leaderboard = $wpdb->get_results( $wpdb->prepare( "
  32. SELECT log.user_id, SUM( log.creds ) as balance
  33. FROM {$mycred->log_table} log
  34. LEFT JOIN {$group_table} groups ON ( groups.user_id = log.user_id )
  35. WHERE groups.group_id = %d
  36. AND groups.is_confirmed = 1
  37. AND groups.is_banned = 0
  38. AND log.ctype = %s
  39. AND log.time BETWEEN %d AND %d
  40. GROUP BY log.user_id
  41. ORDER BY balance DESC, log.user_id ASC
  42. LIMIT 0,%d", $group_id, $point_type, $from, $until, $setup['size'] ) );
  43.  
  44. // If we have results, cache it
  45. if ( ! empty( $leaderboard ) )
  46. groups_update_groupmeta( $group_id, 'cached_leaderboard' . $point_type, serialize( $leaderboard ) );
  47.  
  48. }
  49.  
  50. // If we need to append the current user
  51. if ( ! empty( $leaderboard ) && $append_user !== false ) {
  52.  
  53. // Check if the current user is in the leaderboard
  54. $in_list = false;
  55. foreach ( $leaderboard as $position => $entry ) {
  56.  
  57. $entry->position = $position+1;
  58. $entry->current = false;
  59.  
  60. if ( $entry->user_id == $append_user ) {
  61. $entry->current = true;
  62. $in_list = true;
  63. }
  64.  
  65. }
  66.  
  67. // If we want to attach the current user because they are not in the leaderboard
  68. if ( $setup['current'] && ! $in_list ) {
  69.  
  70. $position = mycred_get_users_bp_group_position( $append_user, $group_id, $point_type );
  71. if ( $position !== false ) {
  72.  
  73. // Append the current user
  74. $row = new StdClass();
  75. $row->position = $position;
  76. $row->user_id = $append_user;
  77. $row->balance = mycred_get_users_cred( $append_user, $point_type );
  78. $row->current = true;
  79.  
  80. $leaderboard[] = $row;
  81.  
  82. }
  83.  
  84. }
  85.  
  86. }
  87.  
  88. return $leaderboard;
  89.  
  90. }
  91. add_filter( 'mycred_bp_leaderboard_get', 'mycred_pro_query_custom_leaderboard', 10, 5 );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement