Index: bp-blogs-template.php
===================================================================
--- bp-blogs-template.php	(revision 7825)
+++ bp-blogs-template.php	(working copy)
@@ -161,7 +161,9 @@
 	 *
 	 * @see BP_Blogs_Blog::get() for a description of parameters.
 	 *
-	 * @param string $type See {@link BP_Blogs_Blog::get()}.
+	 * @param array $args {
+     *     An array of arguments. All items are optional.
+     * @param string $type See {@link BP_Blogs_Blog::get()}.
 	 * @param string $page See {@link BP_Blogs_Blog::get()}.
 	 * @param string $per_page See {@link BP_Blogs_Blog::get()}.
 	 * @param string $max See {@link BP_Blogs_Blog::get()}.
@@ -169,16 +171,50 @@
 	 * @param string $search_terms See {@link BP_Blogs_Blog::get()}.
 	 * @param string $page_arg The string used as a query parameter in
 	 *        pagination links. Default: 'bpage'.
+	 * @param bool $show_hidden Get also the private blogs of user
+     *
+     * }
 	 */
-	function __construct( $type, $page, $per_page, $max, $user_id, $search_terms, $page_arg = 'bpage' ) {
+	 function __construct($args) {
+        // Backward compatibility with old method of passing arguments
+        if (!is_array($args) || func_num_args() > 1) {
+            _deprecated_argument(__METHOD__, '2.0', 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__));
 
-		$this->pag_page = isset( $_REQUEST[$page_arg] ) ? intval( $_REQUEST[$page_arg] ) : $page;
-		$this->pag_num = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
+            $old_args_keys = array(
+                0 => 'type',
+                1 => 'page',
+                2 => 'per_page',
+                3 => 'max',
+                4 => 'user_id',
+                5 => 'search_terms',
+                6 => 'page_arg',
+                7 => 'show_hidden'
+            );
 
+            $func_args = func_get_args();
+            $args = bp_core_parse_args_array($old_args_keys, $func_args);
+        }
+
+        $defaults = array(
+            'type' => 'active',
+            'page' => 1,
+            'per_page' => 20,
+            'max' => false,
+            'user_id' => '0',
+            'search_terms' => false, // Pass search terms to filter on the blog title or description.
+            'page_arg' => 'bpage', // See https://buddypress.trac.wordpress.org/ticket/3679
+            'show_hidden' => false
+        );
+        $r = wp_parse_args($args, $defaults);
+        extract($r);
+
+        $this->pag_page = isset($_REQUEST[$page_arg]) ? intval($_REQUEST[$page_arg]) : $page;
+        $this->pag_num = isset($_REQUEST['num']) ? intval($_REQUEST['num']) : $per_page;
+		
 		if ( isset( $_REQUEST['letter'] ) && '' != $_REQUEST['letter'] )
-			$this->blogs = BP_Blogs_Blog::get_by_letter( $_REQUEST['letter'], $this->pag_num, $this->pag_page );
+			$this->blogs = BP_Blogs_Blog::get_by_letter($_REQUEST['letter'], $this->pag_num, $this->pag_page, $show_hidden);
 		else
-			$this->blogs = bp_blogs_get_blogs( array( 'type' => $type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'search_terms' => $search_terms ) );
+		 $this->blogs = bp_blogs_get_blogs(array('type' => $type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'search_terms' => $search_terms, 'show_hidden' => $show_hidden));
 
 		if ( !$max || $max >= (int) $this->blogs['total'] )
 			$this->total_blog_count = (int) $this->blogs['total'];
@@ -331,6 +367,7 @@
  *     @type int $user_id The ID of the user whose blogs should be retrieved.
  *           When viewing a user profile page, 'user_id' defaults to the ID of
  *           the displayed user. Otherwise the default is false.
+ * 		@type bool $show_hidden. Whether to show private blogs or not
  * }
  * @return bool Returns true when blogs are found, otherwise false.
  */
@@ -359,7 +396,8 @@
 		'page_arg'     => 'bpage',        // See https://buddypress.trac.wordpress.org/ticket/3679
 
 		'user_id'      => $user_id,       // Pass a user_id to limit to only blogs this user has higher than subscriber access to
-		'search_terms' => $search_terms   // Pass search terms to filter on the blog title or description.
+		'search_terms' => $search_terms,   // Pass search terms to filter on the blog title or description.
+		'show_hidden' => false
 	);
 
 	$r = wp_parse_args( $args, $defaults );
@@ -378,7 +416,8 @@
 		}
 	}
 
-	$blogs_template = new BP_Blogs_Template( $type, $page, $per_page, $max, $user_id, $search_terms, $page_arg );
+	$args = array('type' => $type, 'page' => $page, 'per_page' => $per_page, 'max' => $max, 'user_id' => $user_id, 'search_terms' => $search_terms, 'page_arg' => $page_arg, 'show_hidden' => $show_hidden);
+    $blogs_template = new BP_Blogs_Template($args);
 	return apply_filters( 'bp_has_blogs', $blogs_template->has_blogs(), $blogs_template );
 }
 
@@ -833,19 +872,21 @@
  * Output the total number of blogs for a given user.
  *
  * @param int $user_id ID of the user.
+ * @param bool $show_hidden  Whether to count also hidden blogs.
  */
-function bp_total_blog_count_for_user( $user_id = 0 ) {
-	echo bp_get_total_blog_count_for_user( $user_id );
+function bp_total_blog_count_for_user($user_id = 0, $show_hidden = false) {
+    echo bp_get_total_blog_count_for_user($user_id, $show_hidden);
 }
 	/**
 	 * Return the total number of blogs for a given user.
 	 *
 	 * @param int $user_id ID of the user.
+	 * @param bool $show_hidden  whether to count also private blogs of user
 	 * @return int Total number of blogs for the user.
 	 */
-	function bp_get_total_blog_count_for_user( $user_id = 0 ) {
-		return apply_filters( 'bp_get_total_blog_count_for_user', bp_blogs_total_blogs_for_user( $user_id ) );
-	}
+	function bp_get_total_blog_count_for_user($user_id = 0, $show_hidden = false) {
+    return apply_filters('bp_get_total_blog_count_for_user', bp_blogs_total_blogs_for_user($user_id, $show_hidden));
+}
 	add_filter( 'bp_get_total_blog_count_for_user', 'bp_core_number_format' );
 
 
