Index: bp-blogs-classes.php
===================================================================
--- bp-blogs-classes.php	(revision 7825)
+++ bp-blogs-classes.php	(working copy)
@@ -6,10 +6,10 @@
  * @package BuddyPress
  * @subpackage BlogsClasses
  */
-
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
+
 /**
  * The main BuddyPress blog class.
  *
@@ -19,6 +19,7 @@
  * @since BuddyPress (1.0.0)
  */
 class BP_Blogs_Blog {
+
 	public $id;
 	public $user_id;
 	public $blog_id;
@@ -103,7 +104,8 @@
 
 	/**
 	 * Retrieve a set of blog-user associations.
-	 *
+     * @param array $args {
+     *     An array of arguments. All items are optional.
 	 * @param string $type The order in which results should be returned.
 	 *        'active', 'alphabetical', 'newest', or 'random'.
 	 * @param int|bool $limit Optional. The maximum records to return.
@@ -114,19 +116,47 @@
 	 *        retrieved. Default: 0.
 	 * @param string|bool $search_terms Optional. Search by text stored in
 	 *        blogmeta (such as the blog name). Default: false.
+     * @param bool $show_hidden. Whether to include private blogs of user
+     * }
 	 * @return array Multidimensional results array, structured as follows:
 	 *           'blogs' - Array of located blog objects
 	 *           'total' - A count of the total blogs matching the filter params
 	 */
-	public static function get( $type, $limit = false, $page = false, $user_id = 0, $search_terms = false ) {
+    public static function get($args = array()) {
 		global $bp, $wpdb;
+        // Backward compatibility with old method of passing arguments
+        if (!is_array($args) || func_num_args() > 1) {
+            _deprecated_argument(__METHOD__, '2', sprintf(__('Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress'), __METHOD__, __FILE__));
+            $old_args_keys = array(
+                0 => 'type',
+                1 => 'per_page',
+                2 => 'page',
+                3 => 'user_id',
+                4 => 'search_terms',
+                5 => 'show_hidden',
+            );
 
-		if ( !is_user_logged_in() || ( !bp_current_user_can( 'bp_moderate' ) && ( $user_id != bp_loggedin_user_id() ) ) )
+            $func_args = func_get_args();
+            $args = bp_core_parse_args_array($old_args_keys, $func_args);
+        }
+
+        $defaults = array(
+            'type' => 'active',
+            'per_page' => false,
+            'page' => false,
+            'user_id' => 0,
+            'search_terms' => false, // Terms to search by
+            'show_hidden' => false, // Show blogs marked hidden
+        );
+        $r = wp_parse_args($args, $defaults);
+        extract($r);
+
+        $hidden_sql = '';
+        if (!bp_is_my_profile() && !$show_hidden && !bp_current_user_can('bp_moderate')) {
 			$hidden_sql = "AND wb.public = 1";
-		else
-			$hidden_sql = '';
+        }
 
-		$pag_sql = ( $limit && $page ) ? $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ) : '';
+        $pag_sql = ( $per_page && $page ) ? $wpdb->prepare(" LIMIT %d, %d", intval(( $page - 1 ) * $per_page), intval($per_page)) : '';
 
 		$user_sql = !empty( $user_id ) ? $wpdb->prepare( " AND b.user_id = %d", $user_id ) : '';
 
@@ -234,15 +264,16 @@
 		if ( !$user_id )
 			$user_id = bp_displayed_user_id();
 
-		// Show logged in users their hidden blogs.
-		if ( !bp_is_my_profile() && !$show_hidden )
+// Show logged in users their hidden blogs or user can moderate
+        if (!bp_is_my_profile() && !$show_hidden && !bp_current_user_can('bp_moderate'))
 			$blogs = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT b.blog_id, b.id, bm1.meta_value as name, wb.domain, wb.path FROM {$bp->blogs->table_name} b, {$wpdb->base_prefix}blogs wb, {$bp->blogs->table_name_blogmeta} bm1 WHERE b.blog_id = wb.blog_id AND b.blog_id = bm1.blog_id AND bm1.meta_key = 'name' AND wb.public = 1 AND wb.deleted = 0 AND wb.spam = 0 AND wb.mature = 0 AND wb.archived = '0' AND b.user_id = %d ORDER BY b.blog_id", $user_id ) );
 		else
 			$blogs = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT b.blog_id, b.id, bm1.meta_value as name, wb.domain, wb.path FROM {$bp->blogs->table_name} b, {$wpdb->base_prefix}blogs wb, {$bp->blogs->table_name_blogmeta} bm1 WHERE b.blog_id = wb.blog_id AND b.blog_id = bm1.blog_id AND bm1.meta_key = 'name' AND wb.deleted = 0 AND wb.spam = 0 AND wb.mature = 0 AND wb.archived = '0' AND b.user_id = %d ORDER BY b.blog_id", $user_id ) );
 
-		$total_blog_count = BP_Blogs_Blog::total_blog_count_for_user( $user_id );
+        $total_blog_count = BP_Blogs_Blog::total_blog_count_for_user($user_id, $show_hidden);
 
 		$user_blogs = array();
+
 		foreach ( (array) $blogs as $blog ) {
 			$user_blogs[$blog->blog_id] = new stdClass;
 			$user_blogs[$blog->blog_id]->id = $blog->id;
@@ -294,19 +325,20 @@
 	 *
 	 * @param int $user_id Optional. ID of the user whose blogs are being
 	 *        queried. Defaults to logged-in user.
+     * @param bool $show_hidden. Whether to count also private blogs
 	 * @return int Blog count for the user.
 	 */
-	public static function total_blog_count_for_user( $user_id = null ) {
+    public static function total_blog_count_for_user($user_id = null, $show_hidden = false) {
 		global $bp, $wpdb;
 
 		if ( !$user_id )
 			$user_id = bp_displayed_user_id();
 
-		// If the user is logged in return the blog count including their hidden blogs.
-		if ( ( is_user_logged_in() && $user_id == bp_loggedin_user_id() ) || bp_current_user_can( 'bp_moderate' ) ) {
+        // If the user is logged in return the blog count including their hidden blogs or is show hidden user blogs is set.
+        if (!bp_is_my_profile() && !$show_hidden && !bp_current_user_can('bp_moderate')) {
+            return $wpdb->get_var($wpdb->prepare("SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.public = 1 AND wb.deleted = 0 AND wb.spam = 0 AND wb.mature = 0 AND wb.archived = '0' AND user_id = %d", $user_id));
+        } else {
 			return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.deleted = 0 AND wb.spam = 0 AND wb.mature = 0 AND wb.archived = '0' AND user_id = %d", $user_id ) );
-		} else {
-			return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.public = 1 AND wb.deleted = 0 AND wb.spam = 0 AND wb.mature = 0 AND wb.archived = '0' AND user_id = %d", $user_id ) );
 		}
 	}
 
@@ -317,25 +349,29 @@
 	 * blogmeta table.
 	 *
 	 * @param string $filter The search term.
-	 * @param int $limit Optional. The maximum number of items to return.
+     * @param int $per_page Optional. The maximum number of items per page to return.
 	 *        Default: null (no limit).
 	 * @param int $page Optional. The page of results to return. Default:
 	 *        null (no limit).
+     * @param bool $show_hidden Optional. Whether to search in private blogs. Default:
+     *        FALSE.
 	 * @return array Multidimensional results array, structured as follows:
 	 *           'blogs' - Array of located blog objects
 	 *           'total' - A count of the total blogs matching the query.
 	 */
-	public static function search_blogs( $filter, $limit = null, $page = null ) {
+    public static function search_blogs($filter, $per_page = null, $page = null, $show_hidden = FALSE) {
 		global $wpdb, $bp;
 
 		$filter = esc_sql( like_escape( $filter ) );
 
 		$hidden_sql = '';
-		if ( !bp_current_user_can( 'bp_moderate' ) )
+
+
+        if (!bp_is_my_profile() && !$show_hidden && !bp_current_user_can('bp_moderate'))
 			$hidden_sql = "AND wb.public = 1";
 
-		if ( $limit && $page ) {
-			$pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
+        if ($per_page && $page) {
+            $pag_sql = $wpdb->prepare(" LIMIT %d, %d", intval(( $page - 1 ) * $per_page), intval($per_page));
 		}
 
 		$paged_blogs = $wpdb->get_results( "SELECT DISTINCT bm.blog_id FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE ( ( bm.meta_key = 'name' OR bm.meta_key = 'description' ) AND bm.meta_value LIKE '%%$filter%%' ) {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY meta_value ASC{$pag_sql}" );
@@ -350,20 +386,24 @@
 	 * Query will include hidden blogs if the logged-in user has the
 	 * 'bp_moderate' cap.
 	 *
-	 * @param int $limit Optional. The maximum number of items to return.
+     * @param int $per_page Optional. The maximum number of items to return per page.
 	 *        Default: null (no limit).
 	 * @param int $page Optional. The page of results to return. Default:
 	 *        null (no limit).
+     * @param bool $show_hidden Optional. Whether to search in private blogs. Default:
+     *        FALSE.
 	 * @return array Multidimensional results array, structured as follows:
 	 *           'blogs' - Array of located blog objects
 	 *           'total' - A count of the total blogs.
 	 */
-	public static function get_all( $limit = null, $page = null ) {
+    public static function get_all($per_page = null, $page = null, $show_hidden = false) {
 		global $bp, $wpdb;
+        $hidden_sql = '';
+        if (!bp_is_my_profile() && !$show_hidden && !bp_current_user_can('bp_moderate')) {
+            $hidden_sql = "AND wb.public = 1";
+        }
+        $pag_sql = ( $per_page && $page ) ? $wpdb->prepare(" LIMIT %d, %d", intval(( $page - 1 ) * $per_page), intval($per_page)) : '';
 
-		$hidden_sql = !bp_current_user_can( 'bp_moderate' ) ? "AND wb.public = 1" : '';
-		$pag_sql = ( $limit && $page ) ? $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ) : '';
-
 		$paged_blogs = $wpdb->get_results( "SELECT DISTINCT b.blog_id FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 {$hidden_sql} {$pag_sql}" );
 		$total_blogs = $wpdb->get_var( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b LEFT JOIN {$wpdb->base_prefix}blogs wb ON b.blog_id = wb.blog_id WHERE wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 {$hidden_sql}" );
 
@@ -377,26 +417,26 @@
 	 * 'bp_moderate' cap.
 	 *
 	 * @param string $letter. The letter you're looking for.
-	 * @param int $limit Optional. The maximum number of items to return.
+     * @param int $per_page Optional. The maximum number of items to return.
 	 *        Default: null (no limit).
 	 * @param int $page Optional. The page of results to return. Default:
 	 *        null (no limit).
+     * @param bool $show_hidden Optional. Whether to search in private blogs. Default:
+     *        FALSE.
 	 * @return array Multidimensional results array, structured as follows:
 	 *           'blogs' - Array of located blog objects.
 	 *           'total' - A count of the total blogs matching the query.
 	 */
-	public static function get_by_letter( $letter, $limit = null, $page = null ) {
+    public static function get_by_letter($letter, $per_page = null, $page = null, $show_hidden = false) {
 		global $bp, $wpdb;
-
 		$letter = esc_sql( like_escape( $letter ) );
-
 		$hidden_sql = '';
-		if ( !bp_current_user_can( 'bp_moderate' ) )
+        if (!bp_is_my_profile() && !$show_hidden && !bp_current_user_can('bp_moderate')) {
 			$hidden_sql = "AND wb.public = 1";
-
-		if ( $limit && $page )
-			$pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
-
+        }
+        if ($per_page && $page) {
+            $pag_sql = $wpdb->prepare(" LIMIT %d, %d", intval(( $page - 1 ) * $per_page), intval($per_page));
+        }
 		$paged_blogs = $wpdb->get_results( "SELECT DISTINCT bm.blog_id FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE bm.meta_key = 'name' AND bm.meta_value LIKE '$letter%%' {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY bm.meta_value ASC{$pag_sql}" );
 		$total_blogs = $wpdb->get_var( "SELECT COUNT(DISTINCT bm.blog_id) FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE bm.meta_key = 'name' AND bm.meta_value LIKE '$letter%%' {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY bm.meta_value ASC" );
 
@@ -488,4 +528,4 @@
 
 		return false;
 	}
-}
+}
\ No newline at end of file
