function mycred_get_users_badges($user_id = NULL) { if ($user_id === NULL) { return ''; } global $wpdb; $query = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT * \n\t\t\tFROM {$wpdb->usermeta} \n\t\t\tWHERE user_id = %d \n\t\t\tAND meta_key LIKE %s", $user_id, 'mycred_badge%')); $badge_ids = array(); if (!empty($query)) { foreach ($query as $badge) { $badge_id = substr($badge->meta_key, 12); if ($badge_id == '') { continue; } $badge_id = (int) $badge_id; if (array_key_exists($badge_id, $badge_ids)) { continue; } $requirements = mycred_get_badge_requirements($badge_id); if (count($requirements) > 1) { $badge_ids[$badge_id] = $badge->meta_value; } else { $badge_ids[$badge_id] = 0; } } } return apply_filters('mycred_get_users_badges', $badge_ids, $user_id); }
/** * User Badges Admin Screen * @version 1.0 */ public function badge_user_screen() { global $mycred_manual_badges; $user_id = absint($_GET['user_id']); $user = get_userdata($user_id); global $bp; $mycred_admin = new myCRED_Admin(); if (is_object($bp) && isset($bp->version) && version_compare($bp->version, '2.0', '>=') && bp_is_active('xprofile')) { $mycred_admin->using_bp = true; } $all_badges = mycred_get_badge_ids(); $users_badges = mycred_get_users_badges($user_id); ?> <div class="wrap" id="edit-badges-page"> <h2><?php _e('User Badges', 'mycred'); ?> </h2> <?php if (isset($_POST['mycred_badge_manual'])) { echo '<div class="updated"><p>Badges successfully updated.</p></div>'; } ?> <form id="your-profile" action="" method="post"> <?php $mycred_admin->user_nav($user, 'badges'); ?> <div class="clear clearfix"></div> <p><?php _e('Here you can view the badges this user has earned and if needed, manually give or take away a badge from a user.', 'mycred'); ?> </p> <div id="badge-wrapper"> <?php if (!empty($all_badges)) { foreach ($all_badges as $badge_id) { $badge_id = absint($badge_id); $earned = $level = 0; $status = '<span class="not-earned">' . __('Not earned', 'mycred') . '</span>'; $image = get_post_meta($badge_id, 'default_image', true); $requirements = mycred_get_badge_requirements($badge_id); if (array_key_exists($badge_id, $users_badges)) { $earned = 1; $status = '<span class="earned">' . __('Earned', 'mycred') . '</span>'; $level = $users_badges[$badge_id]; $image = get_post_meta($badge_id, 'level_image' . $level, true); if ($image == '') { $image = get_post_meta($badge_id, 'main_image', true); } } if ($image != '') { $image = '<img src="' . $image . '" alt="" />'; } else { $image = '<span>' . __('No image', 'mycred') . '</span>'; } $level_select = '<input type="hidden" name="mycred_badge_manual[badges][' . $badge_id . '][level]" value="" />'; if (count($requirements) > 1) { $level_select = '<li><select name="mycred_badge_manual[badges][' . $badge_id . '][level]">'; $level_select .= '<option value=""'; if (!$earned) { $level_select .= ' selected="selected"'; } $level_select .= '>' . __('Select a level', 'mycred') . '</option>'; foreach ($requirements as $l => $needs) { $level_select .= '<option value="' . $l . '"'; if ($earned && $level == $l) { $level_select .= ' selected="selected"'; } $level_select .= '>' . __('Level', 'mycred') . ' ' . ($l + 1) . '</option>'; } $level_select .= '</select></li>'; } ?> <div class="the-badge"> <div class="badge-image-wrap"> <?php echo $image; ?> </div> <h4><?php echo get_the_title($badge_id); ?> </h4> <div class="badge-status"><label><?php _e('Status', 'mycred'); ?> </label><?php echo $status; ?> </div> <div class="badge-actions"> <ul> <li><label><input type="checkbox" name="mycred_badge_manual[badges][<?php echo $badge_id; ?> ][has]" <?php checked($earned, 1); ?> value="1" /> <?php _e('Earned', 'mycred'); ?> </label></li> <?php echo $level_select; ?> </ul> </div> </div> <?php } } ?> <div class="clear clearfix"></div> </div> <input type="hidden" name="mycred_badge_manual[token]" value="<?php echo wp_create_nonce('mycred-adjust-users-badge' . $user_id); ?> " /> <p><input type="submit" class="button button-primary" value="<?php _e('Save Changes', 'mycred'); ?> " /></p> </form> </div> <?php }
function mycred_check_if_user_gets_badge($user_id = NULL, $request = array(), $badge_ids = array()) { if ($user_id === NULL || empty($badge_ids)) { return; } global $wpdb; foreach ($badge_ids as $badge_id) { // See if user already has badge if (mycred_get_user_meta($user_id, 'mycred_badge' . $badge_id, '', true) != '') { continue; } $requirements = mycred_get_badge_requirements($badge_id); $needs = $requirements[0]; $mycred = mycred($needs['type']); $mycred_log = $mycred->log_table; if ($needs['by'] == 'count') { $select = 'COUNT( * )'; $amount = $needs['amount']; } else { $select = 'SUM( creds )'; $amount = $mycred->number($needs['amount']); } $result = $wpdb->get_var($wpdb->prepare("\n\t\t\tSELECT {$select} \n\t\t\tFROM {$mycred_log} \n\t\t\tWHERE user_id = %d \n\t\t\t\tAND ctype = %s \n\t\t\t\tAND ref = %s;", $user_id, $needs['type'], $needs['reference'])); // If this function is used by the mycred_add filter, we need to take into // account the instance that we are currently being hooked into as the log entry // will be added after this code has executed. // In case we sum up, add the points the user will gain to the result if (!isset($request['done']) && $needs['by'] == 'sum') { $result = $result + $request['amount']; } elseif (!isset($request['done']) && $needs['by'] == 'count') { $result = $result + 1; } if ($needs['by'] != 'count') { $result = $mycred->number($result); } // Got it! if ($result >= $amount) { mycred_update_user_meta($user_id, 'mycred_badge' . $badge_id, '', apply_filters('mycred_badge_user_value', 1, $user_id, $badge_id)); } } }
/** * Badge Preferences Metabox * @version 1.0 */ public function metabox_badge_requirements($post) { $requirements = mycred_get_badge_requirements($post->ID, true); $types = mycred_get_types(); $references = mycred_get_all_references(); $sums = array('count' => __('Time(s)', 'mycred'), 'sum' => __('In total', 'mycred')); ?> <style type="text/css"> #mycred-remove-badge-connections { float: right; } #mycred-badge-actions { padding-bottom: 12px; margin-bottom: 12px; border-bottom: 1px solid #ccc; } <?php if ($post->post_status != 'publish') { ?> #minor-publishing-actions { padding-bottom: 12px; } <?php } else { ?> #minor-publishing-actions { display: none; } <?php } ?> #misc-publishing-actions { display: none; display: none !important; } table#setup-badge-reqs { width: 100%; } table#setup-badge-reqs td.type { width: 25%; } table#setup-badge-reqs td.for { width: 5%; } table#setup-badge-reqs td.reference { width: 50%; } table#setup-badge-reqs td.amount { width: 10%; } table#setup-badge-reqs td.sum { width: 10%; } p.actions { text-align: right; } </style> <script type="text/javascript"> jQuery(function($) { $( '#postimagediv h3.hndle span' ).empty().text( '<?php _e('Badge Image', 'mycred'); ?> ' ); $( '#postimagediv div.inside p a' ).attr( 'title', '<?php _e('Set badge image', 'mycred'); ?> ' ).empty().text( '<?php _e('Set badge image', 'mycred'); ?> ' ); }); </script> <p>To earn this badge, a user must have received:</p> <table class="table" style="width: 100%;" id="setup-badge-reqs"> <?php do_action('mycred_edit_badge_before_req', $post); ?> <?php foreach ($requirements as $row => $needs) { if (!isset($needs['by'])) { $needs = array('type' => '', 'reference' => '', 'amount' => '', 'by' => ''); } ?> <tr class="badge-requires" id="badge-requirement-<?php echo $row; ?> "> <td class="type"> <?php mycred_types_select_from_dropdown('mycred_badge[req][' . $row . '][type]', '', $needs['type']); ?> </td> <td class="for">for</td> <td class="reference"> <select name="mycred_badge[req][<?php echo $row; ?> ][reference]" id=""><?php foreach ($references as $ref => $label) { echo '<option value="' . $ref . '"'; if ($needs['reference'] == $ref) { echo ' selected="selected"'; } echo '>' . $label . '</option>'; } ?> </select> </td> <td class="amount"> <input type="text" size="8" name="mycred_badge[req][<?php echo $row; ?> ][amount]" id="" value="<?php echo $needs['amount']; ?> " /> </td> <td class="sum"> <select name="mycred_badge[req][<?php echo $row; ?> ][by]" id=""><?php foreach ($sums as $sum => $label) { echo '<option value="' . $sum . '"'; if ($needs['by'] == $sum) { echo ' selected="selected"'; } echo '>' . $label . '</option>'; } ?> </select> </td> </tr> <?php } ?> <?php do_action('mycred_edit_badge_after_req', $post); ?> </table> <?php }