/** * Outputs the HTML for this widget. * * @global DPA_Achievement_Template $achievements_template Achievements template tag object * @global int $blog_id Site ID * @global object $bp BuddyPress global settings * @param array $args An array of standard parameters for widgets * @param array $instance An array of settings for this widget instance * @since 2.0 */ function widget($args, $instance) { global $achievements_template, $blog_id, $bp; extract($args, EXTR_SKIP); if (dpa_has_achievements('type=active&per_page=' . $instance['limit'] . '&max=' . $instance['limit'] . '&populate_extras=0')) { echo $before_widget; if ($instance['title']) { echo $before_title; echo esc_html(apply_filters('dpa_widget_title', $instance['title'])); echo $after_title; } $show_sitewide_achievements = false; if (!$instance['showsitewide']) { $show_sitewide_achievements = true; } ?> <div class="avatar-block"> <?php while (dpa_achievements()) { dpa_the_achievement(); if (!$show_sitewide_achievements && dpa_get_achievement_site_id() == -1) { continue; } if (is_multisite() && (dpa_get_achievement_site_id() != $blog_id && dpa_get_achievement_site_id() != -1)) { continue; } ?> <div class="item-avatar"> <a href="<?php dpa_achievement_slug_permalink(); ?> "><?php dpa_achievement_picture(); ?> </a> </div> <?php } ?> </div> <p class="achievements-widget-showall"><a href="<?php dpa_achievements_permalink(); ?> "><?php _e('Show All', 'dpa'); ?> </a></p> <div style="clear: right;"></div> <?php echo $after_widget; } $achievements_template = null; }
/** * Implements the Achievement actions, and unlocks if criteria met. * * @global DPA_Achievement_Template $achievements_template Achievements template tag object * @global int $blog_id Site ID (variable is from NXTClass and hasn't been updated for 3.0; confusing name is confusing) * @global object $bp BuddyPress global settings * @param string $name Action name * @param array $func_args Optional; action's arguments, from func_get_args(). * @param string $type Optional; if the Achievement's action is called from within the loop in this function (i.e. points awarded), set this to "latent" to avoid a single Achievement being awarded mulitple times. * @see dpa_setup_achievements() * @since 2.0 * @uses DPA_Achievement */ function dpa_handle_action($name, $func_args = null, $type = '') { global $achievements_template, $blog_id, $bp; do_action('dpa_before_handle_action', $name, $func_args, $type); if (!($name = apply_filters('dpa_handle_action', $name, $func_args, $type))) { return; } $user_id = apply_filters('dpa_handle_action_user_id', $bp->loggedin_user->id, $name, $func_args, $type); if (false === $user_id || empty($user_id)) { return; } if ('latent' == $type) { $latent_achievements = DPA_Achievement::get(array('user_id' => $user_id, 'type' => 'active_by_action', 'action' => $name)); $achievements_template->achievements = array_merge($achievements_template->achievements, $latent_achievements['achievements']); $achievements_template->achievement_count += count($latent_achievements['achievements']); do_action('dpa_handle_latent_action', $name, $func_args, $is_latent, $latent_achievements); // Avoid duplicate invocations of latent Achievement actions if ('dpa_points_incremented' == $name) { remove_action('dpa_points_incremented', 'dpa_handle_action_dpa_points_incremented', 10, 10); } if ('dpa_achievement_unlocked' == $name) { remove_action('dpa_achievement_unlocked', 'dpa_handle_action_dpa_achievement_unlocked', 10, 10); } return; } // This is to support plugins which use the 'dpa_handle_action_user_id' filter to return an array of user IDs. if (is_array($user_id)) { $user_ids = $user_id; } else { $user_ids = array($user_id); } foreach ($user_ids as $user_id) { if (dpa_has_achievements(array('user_id' => $user_id, 'type' => 'active_by_action', 'action' => $name))) { while (dpa_achievements()) { dpa_the_achievement(); $site_id = apply_filters('dpa_handle_action_site_id', dpa_get_achievement_site_id(), $name, $func_args, $type, $user_id); if (false === $site_id) { continue; } $site_is_valid = false; if (!is_multisite() || $site_id < 1 || $blog_id == $site_id) { $site_is_valid = true; } $group_is_valid = false; if (dpa_get_achievement_group_id() < 1 || dpa_is_group_achievement_valid($name, $func_args, $user_id)) { $group_is_valid = true; } $site_is_valid = apply_filters('dpa_handle_action_site_is_valid', $site_is_valid, $name, $func_args, $type, $user_id); $group_is_valid = apply_filters('dpa_handle_action_group_is_valid', $group_is_valid, $name, $func_args, $type, $user_id); if ($site_is_valid && $group_is_valid) { dpa_maybe_unlock_achievement($user_id); } } } } do_action('dpa_after_handle_action', $name, $func_args, $type); $achievements_template = null; }