charset ) )
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
$sql = array();
$sql[] = "CREATE TABLE {$bp->achievements->table_name} (
id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
category_id bigint(20) NOT NULL,
short_name varchar(100) NOT NULL,
nice_name varchar(100) NOT NULL,
description longtext NOT NULL,
points int(100) NOT NULL,
active int(1) NOT NULL,
KEY short_name (short_name)
) {$charset_collate};";
$sql[] = "CREATE TABLE {$bp->achievements->table_name_unlocked} (
id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
achievement_id bigint(20) NOT NULL,
user_id bigint(20) NOT NULL,
achieved_at DATETIME NOT NULL
) {$charset_collate};";
$sql[] = "CREATE TABLE {$bp->achievements->table_name_categories} (
id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
category varchar(100) NOT NULL
) {$charset_collate};";
$categories = dpa_get_defaultcategories();
foreach( (array) $categories as $c ) {
$sql[] = $wpdb->prepare( "INSERT INTO {$bp->achievements->table_name_categories} ( category ) VALUES ( %s );", $c );
}
require_once( ABSPATH . 'wp-admin/upgrade-functions.php' );
dbDelta( $sql );
$sql = array();
$achievements = dpa_get_defaultachievements();
foreach ( (array) $achievements as $a ) {
$category_id = $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->achievements->table_name_categories} WHERE category = %s", $a['category'] ) );
$sql[] = $wpdb->prepare( "INSERT INTO {$bp->achievements->table_name} ( category_id, short_name, nice_name, description, points, active ) VALUES ( %d, %s, %s, %s, %d, %d );", $category_id, $a['short_name'], $a['name'], $a['description'], $a['points'], 1 );
}
dbDelta( $sql );
update_site_option( 'dpa_db_version', DPA_DB_VERSION );
}
function dpa_setup_globals() {
global $bp, $wpdb;
$bp->achievements->table_name = $wpdb->base_prefix . 'dpa_achievements';
$bp->achievements->table_name_unlocked = $wpdb->base_prefix . 'dpa_achievements_unlocked';
$bp->achievements->table_name_categories = $wpdb->base_prefix . 'dpa_achievements_categories';
$bp->achievements->image_base = WP_PLUGIN_URL . '/dp-achievements/images';
$bp->achievements->format_activity_function = 'dpa_format_activity';
$bp->achievements->format_notification_function = 'dpa_format_notifications';
$bp->achievements->slug = DPA_SLUG;
$bp->version_numbers->dp_achievements = DPA_VERSION;
}
add_action( 'plugins_loaded', 'dpa_setup_globals', 6 );
add_action( 'admin_menu', 'dpa_setup_globals', 1 );
function dpa_setup_nav() {
global $bp;
if ( false === get_site_option( 'dpa_db_version' ) )
return;
bp_core_add_nav_item( __( 'Achievements', 'dp-achievements' ), $bp->achievements->slug );
bp_core_add_nav_default( $bp->achievements->slug, 'dpa_screen_index', apply_filters( 'dpa_screen_summary_slug', 'summary' ) );
$achievements_link = $bp->loggedin_user->domain . $bp->achievements->slug . '/';
bp_core_add_subnav_item( $bp->achievements->slug, apply_filters( 'dpa_screen_summary_slug', 'summary' ), __( 'Summary', 'dp-achievements' ), $achievements_link, 'dpa_screen' );
$categories = dpa_get( 'DISTINCT category', array( array( 'type' => 'd', 'key' => 'active', 'value' => 1 ) ) );
foreach ( (array) $categories as $category_name ) {
bp_core_add_subnav_item( $bp->achievements->slug, apply_filters( 'dpa_screen_summary_slug_url', __( $category_name, 'dp-achievements' ) ), __( $category_name, 'dp-achievements' ), $achievements_link, 'dpa_screen' );
}
if ( $bp->current_component == $bp->achievements->slug ) {
if ( bp_is_home() ) {
$bp->bp_options_title = __( 'Category', 'dp-achievements' );
} else {
$bp->bp_options_avatar = bp_core_get_avatar( $bp->displayed_user->id, 1 );
$bp->bp_options_title = __( 'Category', 'dp-achievements' );
}
}
}
add_action( 'wp', 'dpa_setup_nav', 2 );
/**
* Based on bp_core_load_uri().
*/
function dpa_load_template( $pages ) {
global $bp_path, $bp_skip_blog_check;
$bp_skip_blog_check = false;
$bp_path = $pages;
remove_action( 'template_redirect', 'redirect_canonical' );
add_action( 'template_redirect', 'dpa_catch_uri', 2 );
}
/**
* Avoids forcing people to move member-theme files after automatic install (unless they want to customise the pages).
* Based on bp_core_do_catch_uri().
*/
function dpa_catch_uri() {
global $bp_path, $bp, $wpdb;
global $current_blog, $bp_skip_blog_check;
global $bp_no_status_set;
global $wp_query;
$page = $bp_path;
/* Make sure this is not reported as a 404 */
if ( !$bp_no_status_set ) {
status_header( 200 );
$wp_query->is_404 = false;
if ( $bp->current_component != BP_HOME_BLOG_SLUG )
$wp_query->is_page = true;
}
if ( file_exists( TEMPLATEPATH . "/" . $page . ".php" ) ) {
bp_core_do_catch_uri();
} else {
$page = strrchr( $page, '/' );
if ( file_exists( WP_PLUGIN_DIR . '/achievements/dp-achievements/achievements-member-theme/' . $page . ".php" ) ) {
load_template( WP_PLUGIN_DIR . '/achievements/dp-achievements/achievements-member-theme/' . $page . ".php" );
} else {
if ( file_exists( TEMPLATEPATH . "/404.php" ) ) {
status_header( 404 );
load_template( TEMPLATEPATH . "/404.php" );
} else {
wp_die( __( 'You do not have the Achievements plugin installed correctly.
Please remove the files and try again.', 'dp-achievements' ) );
}
}
}
die;
}
function dpa_screen() {
$page = esc_attr__( bp_current_action() );
if ( $page == 'summary' ) {
do_action( 'dpa_screen_summary' );
dpa_load_template( apply_filters( 'dpa_screen_summarypage', 'achievements/summary' ) );
} else {
do_action( 'dpa_screen_category', $page );
dpa_load_template( apply_filters( 'dpa_screen_categorypage', 'achievements/category' ) );
}
}
function dpa_load_achievements() {
if ( false === get_site_option( 'dpa_db_version' ) )
return;
$achievements = dpa_get( 'short_name', array( array( 'type' => 'd', 'key' => 'active', 'value' => 1 ) ) );
$unique_achievements = array();
// Strips out anything after underscores (for ranked achievements).
foreach ( (array) $achievements as $a ) {
$short_name = DPA_REGISTERFUNCTION . $a;
$i = strpos( $short_name, '_', strlen( DPA_REGISTERFUNCTION ) );
if ( $i !== false )
$short_name = substr( $short_name, 0, $i );
$unique_achievements[] = $short_name;
}
$unique_achievements = array_unique( $unique_achievements );
foreach ( (array) $unique_achievements as $achievement ) {
if ( function_exists( $achievement ) ) {
do_action( 'dpa_preload_' . $achievement );
call_user_func( $achievement );
do_action( 'dpa_postload_' . $achievement );
}
}
}
add_action( 'plugins_loaded', 'dpa_load_achievements' );
/*
* Activity
*/
function dpa_format_activity( $item_id, $user_id, $action, $secondary_item_id = false, $for_secondary_user = false ) {
global $bp;
switch( $action ) {
case 'new_achievement':
$user_link = bp_core_get_userlink( $user_id );
$achievement_name = apply_filters( 'dpa_filter_achievement_nice_name', dpa_get( 'nice_name', array( array( 'type' => 'd', 'key' => 'id', 'value' => $item_id ) ), 1 ) );
return array(
'primary_link' => $user_link,
'content' => apply_filters( 'dpa_new_achievement_activity', sprintf( __( '%s unlocked achievement: %s', 'dpa-achievement' ), $user_link, $achievement_name ) . __( ' %s', 'dpa-achievement' ), $user_id, $item_id )
);
break;
}
do_action( 'dpa_format_activity', $action, $item_id, $user_id, $action, $secondary_item_id, $for_secondary_user );
return false;
}
function dpa_record_activity( $args ) {
if ( function_exists( 'bp_activity_record' ) ) {
extract( (array) $args );
bp_activity_record( $item_id, $component_name, $component_action, $is_private, $secondary_item_id, $user_id, $secondary_user_id, $recorded_time );
}
}
/*
* Notification
*/
function dpa_screen_notification_settings() {
global $current_user;
?>
| id,'notification_dpa_unlock_achievement' ) || 'yes' == get_usermeta( $current_user->id,'notification_dpa_unlock_achievement' ) ) { ?>checked="checked" /> | id,'notification_dpa_unlock_achievement' ) == 'no' ) { ?>checked="checked" /> |