コード例 #1
0
/**
 * Handle each of our LearnDash triggers
 *
 * @since 1.0.0
 */
function badgeos_learndash_trigger_event()
{
    // Setup all our important variables
    global $blog_id, $wpdb;
    // Setup args
    $args = func_get_args();
    $userID = get_current_user_id();
    if (is_array($args) && isset($args['user'])) {
        if (is_object($args['user'])) {
            $userID = (int) $args['user']->ID;
        } else {
            $userID = (int) $args['user'];
        }
    }
    if (empty($userID)) {
        return;
    }
    $user_data = get_user_by('id', $userID);
    if (empty($user_data)) {
        return;
    }
    // Grab the current trigger
    $this_trigger = current_filter();
    // Update hook count for this user
    $new_count = badgeos_update_user_trigger_count($userID, $this_trigger, $blog_id);
    // Mark the count in the log entry
    badgeos_post_log_entry(null, $userID, null, sprintf(__('%1$s triggered %2$s (%3$dx)', 'badgeos'), $user_data->user_login, $this_trigger, $new_count));
    // Now determine if any badges are earned based on this trigger event
    $triggered_achievements = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT post_id\n\t\tFROM   {$wpdb->postmeta}\n\t\tWHERE  meta_key = '_badgeos_learndash_trigger'\n\t\t\t\tAND meta_value = %s\n\t\t", $this_trigger));
    foreach ($triggered_achievements as $achievement) {
        badgeos_maybe_award_achievement_to_user($achievement->post_id, $userID, $this_trigger, $blog_id, $args);
    }
}
コード例 #2
0
/**
 * Handle each of our activity triggers
 *
 * @since 1.0.0
 * @return mixed
 */
function badgeos_trigger_event()
{
    // Setup all our globals
    global $user_ID, $blog_id, $wpdb;
    $site_id = $blog_id;
    $args = func_get_args();
    // Grab our current trigger
    $this_trigger = current_filter();
    // Grab the user ID
    $user_id = badgeos_trigger_get_user_id($this_trigger, $args);
    $user_data = get_user_by('id', $user_id);
    // Sanity check, if we don't have a user object, bail here
    if (!is_object($user_data)) {
        return $args[0];
    }
    // If the user doesn't satisfy the trigger requirements, bail here
    if (!apply_filters('badgeos_user_deserves_trigger', true, $user_id, $this_trigger, $site_id, $args)) {
        return $args[0];
    }
    // Update hook count for this user
    $new_count = badgeos_update_user_trigger_count($user_id, $this_trigger, $site_id, $args);
    // Mark the count in the log entry
    badgeos_post_log_entry(null, $user_id, null, sprintf(__('%1$s triggered %2$s (%3$dx)', 'badgeos'), $user_data->user_login, $this_trigger, $new_count));
    // Now determine if any badges are earned based on this trigger event
    $triggered_achievements = $wpdb->get_results($wpdb->prepare("\n\t\tSELECT post_id\n\t\tFROM   {$wpdb->postmeta}\n\t\tWHERE  meta_key = '_badgeos_trigger_type'\n\t\t       AND meta_value = %s\n\t\t", $this_trigger));
    foreach ($triggered_achievements as $achievement) {
        badgeos_maybe_award_achievement_to_user($achievement->post_id, $user_id, $this_trigger, $site_id, $args);
    }
    return $args[0];
}
コード例 #3
0
/**
 * Posts a log entry when a user earns points
 *
 * @since  1.0.0
 * @param  integer $user_id        The given user's ID
 * @param  integer $new_points     The new points the user is being awarded
 * @param  integer $admin_id       If being awarded by an admin, the admin's user ID
 * @param  integer $achievement_id The achievement that generated the points, if applicable
 * @return integer                 The user's updated point total
 */
function badgeos_update_users_points($user_id = 0, $new_points = 0, $admin_id = 0, $achievement_id = null)
{
    // Use current user's ID if none specified
    if (!$user_id) {
        $user_id = get_current_user_id();
    }
    // Grab the user's current points
    $current_points = badgeos_get_users_points($user_id);
    // If we're getting an admin ID, $new_points is actually the final total, so subtract the current points
    if ($admin_id) {
        $new_points = $new_points - $current_points;
    }
    // Update our user's total
    $total_points = max($current_points + $new_points, 0);
    update_user_meta($user_id, '_badgeos_points', $total_points);
    // Available action for triggering other processes
    do_action('badgeos_update_users_points', $user_id, $new_points, $total_points, $admin_id, $achievement_id);
    // Maybe award some points-based badges
    foreach (badgeos_get_points_based_achievements() as $achievement) {
        badgeos_maybe_award_achievement_to_user($achievement->ID, $user_id);
    }
    return $total_points;
}
コード例 #4
0
/**
 * Award additional achievements to user
 *
 * @since  1.0.0
 * @param  integer $user_id        The given user's ID
 * @param  integer $achievement_id The given achievement's post ID
 * @return void
 */
function badgeos_maybe_award_additional_achievements_to_user($user_id = 0, $achievement_id = 0)
{
    // Get achievements that can be earned from completing this achievement
    $dependent_achievements = badgeos_get_dependent_achievements($achievement_id);
    // Loop through each dependent achievement and see if it can be awarded
    foreach ($dependent_achievements as $achievement) {
        badgeos_maybe_award_achievement_to_user($achievement->ID, $user_id);
    }
    // See if a user has unlocked all achievements of a given type
    badgeos_maybe_trigger_unlock_all($user_id, $achievement_id);
}
コード例 #5
0
/**
 * Filter submission messages and send one for Nomination Approval
 *
 * @param array $messages Messages to send
 * @param array $args Submission Args
 */
function badgeos_set_submission_status_nomination_approved($messages, $args)
{
    // Award achievement
    badgeos_maybe_award_achievement_to_user($args['achievement_id'], $args['user_id']);
    // Check if user can be notified
    if (!badgeos_can_notify_user($args['user_data']->ID)) {
        return $messages;
    }
    $email = $args['user_data']->user_email;
    $message_id = 'badgeos_nomination_approved';
    if ($args['auto']) {
        $message_id = 'badgeos_nomination_auto_approved';
        $email = $args['submission_email_addresses'];
        $subject = sprintf(__('Approved Nomination: %1$s from %2$s', 'badgeos'), get_the_title($args['achievement_id']), $args['user_data']->display_name);
        // set the email message
        $message = sprintf(__('A new nomination has been received and auto-approved:

			In response to: %1$s
			Nominee: %2$s
			Nominated by: %3$s

			To view all nominations, including this one, visit: %4$s', 'badgeos'), get_the_title($args['achievement_id']), $args['user_data']->display_name, $args['from_user_data']->display_name, admin_url('edit.php?post_type=nomination'));
        // @todo set $email based on nominee and nominated by
    } else {
        $subject = sprintf(__('Nomination Approved: %s', 'badgeos'), get_the_title($args['achievement_id']));
        // set the email message
        $message = sprintf(__('Your nomination has been approved:

			In response to: %1$s
			Nominee: %2$s
			Nominated by: %3$s
			%4$s', 'badgeos'), get_the_title($args['achievement_id']), $args['user_data']->display_name, $args['from_user_data']->display_name, get_permalink($args['achievement_id']));
        // @todo set $email based on nominee and nominated by
    }
    $messages[$message_id] = array('email' => $email, 'subject' => $subject, 'message' => $message);
    return $messages;
}