コード例 #1
0
<?php

add_filter('badgeos_achievement_data_meta_box_fields', function ($fields) {
    $prefix = "_badgeos_";
    $fields[] = array('name' => __('Time limit', 'timelimit-add-on-for-badgeos'), 'desc' => ' ' . __('Number of minutes this badge cannot be earned after it has been awarded. (set to 0 for unlimited).', 'timelimit-add-on-for-badgeos'), 'id' => $prefix . 'time_limit', 'type' => 'text_small', 'std' => '0');
    return $fields;
});
add_filter('user_deserves_achievement', function ($return, $user_id, $achievement_id) {
    // If we're not working with a step, bail
    if ('step' != get_post_type($achievement_id)) {
        return $return;
    }
    // grab the achievement
    $parent_achievement = badgeos_get_parent_of_achievement($achievement_id);
    if (!$parent_achievement) {
        return $return;
    }
    $achievement_id = $parent_achievement->ID;
    $timelimit = absint(get_post_meta($achievement_id, '_badgeos_time_limit', true));
    $last_activity = badgeos_achievement_last_user_activity(absint($achievement_id), absint($user_id));
    if ($timelimit && $last_activity && time() - $last_activity < $timelimit * 60) {
        return false;
    }
    return $return;
}, 15, 3);
コード例 #2
0
/**
 * Count a user's relevant actions for a given step
 *
 * @since  1.0.0
 * @param  integer $user_id The given user's ID
 * @param  integer $step_id The given step's ID
 * @return integer          The total activity count
 */
function badgeos_get_step_activity_count($user_id = 0, $step_id = 0)
{
    // Assume the user has no relevant activities
    $activities = array();
    // Grab the requirements for this step
    $step_requirements = badgeos_get_step_requirements($step_id);
    // Determine which type of trigger we're using and return the corresponding activities
    switch ($step_requirements['trigger_type']) {
        case 'specific-achievement':
            // Get our parent achievement
            $parent_achievement = badgeos_get_parent_of_achievement($step_id);
            // If the user has any interaction with this achievement, only get activity since that date
            if ($parent_achievement && ($date = badgeos_achievement_last_user_activity($parent_achievement->ID, $user_id))) {
                $since = $date;
            } else {
                $since = 0;
            }
            // Get our achievement activity
            $achievements = badgeos_get_user_achievements(array('user_id' => absint($user_id), 'achievement_id' => absint($step_requirements['achievement_post']), 'since' => $since));
            $activities = count($achievements);
            break;
        case 'any-achievement':
            $activities = badgeos_get_user_trigger_count($user_id, 'badgeos_unlock_' . $step_requirements['achievement_type']);
            break;
        case 'all-achievements':
            $activities = badgeos_get_user_trigger_count($user_id, 'badgeos_unlock_all_' . $step_requirements['achievement_type']);
            break;
        default:
            $activities = badgeos_get_user_trigger_count($user_id, $step_requirements['trigger_type']);
            break;
    }
    // Available filter for overriding user activity
    return absint(apply_filters('badgeos_step_activity', $activities, $user_id, $step_id));
}
コード例 #3
0
/**
 * Update the user's active achievement meta with each earned achievement
 *
 * @since  1.2.0
 *
 * @param  integer $user_id         The given user's ID
 * @param  integer $achievement_id  The given achievement's post ID
 * @return object                   The final achievement object
 */
function badgeos_user_update_active_achievement_on_earnings($user_id, $achievement_id)
{
    // If achievement is a step, update its parent activity
    if ('step' == get_post_type($achievement_id)) {
        $parent_achievement = badgeos_get_parent_of_achievement($achievement_id);
        if ($parent_achievement) {
            badgeos_user_update_active_achievement($user_id, $parent_achievement->ID);
        }
        // Otherwise, drop the earned achievement form the user's active achievement array
    } else {
        badgeos_user_delete_active_achievement($user_id, $achievement_id);
    }
}