/**
 * 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;
        }
    }
}
예제 #2
0
/**
 * 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;
}