/** * Revoke an achievement from a user * * @since 1.0.0 * @param integer $achievement_id The given achievement's post ID * @param integer $user_id The given user's ID * @return void */ function badgeos_revoke_achievement_from_user($achievement_id = 0, $user_id = 0) { // Use the current user's ID if none specified if (!$user_id) { $user_id = wp_get_current_user()->ID; } // Grab the user's earned achievements $earned_achievements = badgeos_get_user_achievements(array('user_id' => $user_id)); // Loop through each achievement and drop the achievement we're revoking foreach ($earned_achievements as $key => $achievement) { if ($achievement->ID == $achievement_id) { // Drop the achievement from our earnings unset($earned_achievements[$key]); // Re-key our array $earned_achievements = array_values($earned_achievements); // Update user's earned achievements badgeos_update_user_achievements(array('user_id' => $user_id, 'all_achievements' => $earned_achievements)); // Available hook for taking further action when an achievement is revoked do_action('badgeos_revoke_achievement', $user_id, $achievement_id); // Stop after dropping one, because we don't want to delete ALL instances break; } } }
/** * Update user's earned achievements to reflect a specific acheivement has been sent to Credly. * * @since 1.3.4 * * @param integer $user_id User ID. * @param integer $achievement_id Achievement post ID.= * @return mixed Updated user meta ID on success, otherwise false. */ function badgeos_user_sent_achievement_to_credly($user_id, $achievement_id) { // Get all earned achievements $earned_achievements = badgeos_get_user_achievements(array('user_id' => $user_id)); // Loop through each achievement if (!empty($earned_achievements)) { foreach ($earned_achievements as $key => $achievement) { // If acheivement doesn't match our ID, skip it if ($achievement_id !== $achievement->ID) { continue; } // If this instance has not been sent to credly, mark it as sent and exit if (!badgeos_achievement_has_been_sent_to_credly($achievement)) { $earned_achievements[$key]->sent_to_credly = true; return badgeos_update_user_achievements(array('user_id' => $user_id, 'all_achievements' => $earned_achievements)); } } } return false; }