<?php
/*
Plugin Name: Orange Hats
Plugin URI: http://www.example.org
Description: Amends poster image to show if they've contributed bug reports. Allows moderators to mark certain users as a "bug squatter."
Author: The dashing DJPaul, aided and abetted by that machiavellian rascal, burtadsit. 
Author URI: http://www.metabiscuits.com/
Version: 0.5
*/

function oh_get_avatar($avatar, $id_or_email, $size, $default) {
  if ('1' == bb_get_usermeta($id_or_email, 'orangehats_is_bugswatter')) {  

    $watermark_start = '<div style="position: relative; width: '.$size.'px; height: '.$size.'px;"><img src="http://testbp.org/favicon.ico" alt="Buddypress bug swatter badge of honour" title="Buddypress bug swatter - badge of honour" style="position: absolute; bottom: -2px; right: -2px;" />';
    $watermark_end   = '</div>';
    return $watermark_start . $avatar . $watermark_end;
  } else {

    return $avatar;
  }
}
add_filter('bb_get_avatar', 'oh_get_avatar', 1, 4);

function oh_add_admin_page() {
	global $bb_submenu;
	$bb_submenu['users.php'][] = array(__('Bug Swatters', 'orangehats'), 'edit_users', 'oh_admin_page');
}
add_action( 'bb_admin_menu_generator', 'oh_add_admin_page' );

// NOT bbdb::prepared
function oh_get_bugswatters( $page = 1 ) {
	global $bbdb, $bb_last_countable_query;
	$page = (int) $page;
	$limit = (int) bb_get_option('page_topics');
	if ( 1 < $page )
		$limit = ($limit * ($page - 1)) . ", $limit";
	$bb_last_countable_query = "SELECT user_id FROM $bbdb->usermeta WHERE meta_key='orangehats_is_bugswatter' AND meta_value='1' ORDER BY umeta_id DESC LIMIT $limit";
	if ( $ids = (array) $bbdb->get_col( $bb_last_countable_query ) )
		bb_cache_users( $ids );
	return $ids;
}

function oh_admin_page() {
	class oh_BugSwatter_Users extends BB_Users_By_Role {
		var $title = '';

		function oh_BugSwatter_Users( $page = '' ) { // constructor
			$this->raw_page = ( '' == $page ) ? false : (int) $page;
			$this->page = (int) ( '' == $page ) ? 1 : $page;
			$this->title = __('These users have been marked as Buddypress bug swatters');

			$this->prepare_query();
			$this->query();
			$this->do_paging();
		}

		function query() {
			$this->results = oh_get_bugswatters( $this->page );

			if ( $this->results )
				$this->total_users_for_query = bb_count_last_query();
			else
				$this->search_errors = new WP_Error('no_matching_users_found', __('No matching users were found!'));

			if ( is_wp_error( $this->search_errors ) )
				bb_admin_notice( $this->search_errors );
		}
	}

	$bugswatters = new oh_BugSwatter_Users( $_GET['userspage'] );
	$bugswatters->display( false, bb_current_user_can( 'edit_users' ) );
}

function oh_profile_admin_keys( $a ) {
	$a['orangehats_is_bugswatter'] = array(
		0,							// Required
		__('This user is a Buddypress bug swatters'),	// Label
		'checkbox',					// Type
		'1',						// Value
		''							// Default when not set
	);
	return $a;
}
add_filter( 'get_profile_admin_keys', 'oh_profile_admin_keys' );

?>