web/wp-content/plugins/bbpress/includes/extend/buddypress/functions.php
changeset 196 5e8dcbe22c24
child 204 09a1c134465b
equal deleted inserted replaced
195:c7c0fbc09788 196:5e8dcbe22c24
       
     1 <?php
       
     2 
       
     3 /**
       
     4  * Main bbPress BuddyPress Class
       
     5  *
       
     6  * @package bbPress
       
     7  * @subpackage BuddyPress
       
     8  * @todo maybe move to BuddyPress Forums once bbPress 1.1 can be removed
       
     9  */
       
    10 
       
    11 // Exit if accessed directly
       
    12 if ( !defined( 'ABSPATH' ) ) exit;
       
    13 
       
    14 /** BuddyPress Helpers ********************************************************/
       
    15 
       
    16 /**
       
    17  * Filter the current bbPress user ID with the current BuddyPress user ID
       
    18  *
       
    19  * @since bbPress (r3552)
       
    20  *
       
    21  * @param int $user_id
       
    22  * @param bool $displayed_user_fallback
       
    23  * @param bool $current_user_fallback
       
    24  *
       
    25  * @return int User ID
       
    26  */
       
    27 function bbp_filter_user_id( $user_id = 0, $displayed_user_fallback = true, $current_user_fallback = false ) {
       
    28 
       
    29 	// Define local variable
       
    30 	$bbp_user_id = 0;
       
    31 
       
    32 	// Get possible user ID's
       
    33 	$did = bp_displayed_user_id();
       
    34 	$lid = bp_loggedin_user_id();
       
    35 
       
    36 	// Easy empty checking
       
    37 	if ( !empty( $user_id ) && is_numeric( $user_id ) )
       
    38 		$bbp_user_id = $user_id;
       
    39 
       
    40 	// Currently viewing or editing a user
       
    41 	elseif ( ( true == $displayed_user_fallback ) && !empty( $did ) )
       
    42 		$bbp_user_id = $did;
       
    43 
       
    44 	// Maybe fallback on the current_user ID
       
    45 	elseif ( ( true == $current_user_fallback ) && !empty( $lid ) )
       
    46 		$bbp_user_id = $lid;
       
    47 
       
    48 	return $bbp_user_id;
       
    49 }
       
    50 add_filter( 'bbp_get_user_id', 'bbp_filter_user_id', 10, 3 );
       
    51 
       
    52 /**
       
    53  * Filter the bbPress is_single_user function with BuddyPress eqivalent
       
    54  *
       
    55  * @since bbPress (r3552)
       
    56  *
       
    57  * @param bool $is Optional. Default false
       
    58  * @return bool True if viewing single user, false if not
       
    59  */
       
    60 function bbp_filter_is_single_user( $is = false ) {
       
    61 	if ( !empty( $is ) )
       
    62 		return $is;
       
    63 
       
    64 	return bp_is_user();
       
    65 }
       
    66 add_filter( 'bbp_is_single_user', 'bbp_filter_is_single_user', 10, 1 );
       
    67 
       
    68 /**
       
    69  * Filter the bbPress is_user_home function with BuddyPress eqivalent
       
    70  *
       
    71  * @since bbPress (r3552)
       
    72  *
       
    73  * @param bool $is Optional. Default false
       
    74  * @return bool True if viewing single user, false if not
       
    75  */
       
    76 function bbp_filter_is_user_home( $is = false ) {
       
    77 	if ( !empty( $is ) )
       
    78 		return $is;
       
    79 
       
    80 	return bp_is_my_profile();
       
    81 }
       
    82 add_filter( 'bbp_is_user_home', 'bbp_filter_is_user_home', 10, 1 );
       
    83 
       
    84 /** BuddyPress Screens ********************************************************/
       
    85 
       
    86 /**
       
    87  * Hook bbPress topics template into plugins template
       
    88  *
       
    89  * @since bbPress (r3552)
       
    90  *
       
    91  * @uses add_action() To add the content hook
       
    92  * @uses bp_core_load_template() To load the plugins template
       
    93  */
       
    94 function bbp_member_forums_screen_topics() {
       
    95 	add_action( 'bp_template_content', 'bbp_member_forums_topics_content' );
       
    96 	bp_core_load_template( apply_filters( 'bbp_member_forums_screen_topics', 'members/single/plugins' ) );
       
    97 }
       
    98 
       
    99 /**
       
   100  * Hook bbPress replies template into plugins template
       
   101  *
       
   102  * @since bbPress (r3552)
       
   103  *
       
   104  * @uses add_action() To add the content hook
       
   105  * @uses bp_core_load_template() To load the plugins template
       
   106  */
       
   107 function bbp_member_forums_screen_replies() {
       
   108 	add_action( 'bp_template_content', 'bbp_member_forums_replies_content' );
       
   109 	bp_core_load_template( apply_filters( 'bbp_member_forums_screen_replies', 'members/single/plugins' ) );
       
   110 }
       
   111 
       
   112 /**
       
   113  * Hook bbPress favorites template into plugins template
       
   114  *
       
   115  * @since bbPress (r3552)
       
   116  *
       
   117  * @uses add_action() To add the content hook
       
   118  * @uses bp_core_load_template() To load the plugins template
       
   119  */
       
   120 function bbp_member_forums_screen_favorites() {
       
   121 	add_action( 'bp_template_content', 'bbp_member_forums_favorites_content' );
       
   122 	bp_core_load_template( apply_filters( 'bbp_member_forums_screen_favorites', 'members/single/plugins' ) );
       
   123 }
       
   124 
       
   125 /**
       
   126  * Hook bbPress subscriptions template into plugins template
       
   127  *
       
   128  * @since bbPress (r3552)
       
   129  *
       
   130  * @uses add_action() To add the content hook
       
   131  * @uses bp_core_load_template() To load the plugins template
       
   132  */
       
   133 function bbp_member_forums_screen_subscriptions() {
       
   134 	add_action( 'bp_template_content', 'bbp_member_forums_subscriptions_content' );
       
   135 	bp_core_load_template( apply_filters( 'bbp_member_forums_screen_subscriptions', 'members/single/plugins' ) );
       
   136 }
       
   137 
       
   138 /** BuddyPress Templates ******************************************************/
       
   139 
       
   140 /**
       
   141  * Get the topics created template part
       
   142  *
       
   143  * @since bbPress (r3552)
       
   144  *
       
   145  * @uses bbp_get_template_part()s
       
   146  */
       
   147 function bbp_member_forums_topics_content() {
       
   148 ?>
       
   149 
       
   150 	<div id="bbpress-forums">
       
   151 
       
   152 		<?php bbp_get_template_part( 'user', 'topics-created' ); ?>
       
   153 
       
   154 	</div>
       
   155 
       
   156 <?php
       
   157 }
       
   158 
       
   159 /**
       
   160  * Get the topics replied to template part
       
   161  *
       
   162  * @since bbPress (r3552)
       
   163  *
       
   164  * @uses bbp_get_template_part()
       
   165  */
       
   166 function bbp_member_forums_replies_content() {
       
   167 ?>
       
   168 
       
   169 	<div id="bbpress-forums">
       
   170 
       
   171 		<?php bbp_get_template_part( 'user', 'replies-created' ); ?>
       
   172 
       
   173 	</div>
       
   174 
       
   175 <?php
       
   176 }
       
   177 
       
   178 /**
       
   179  * Get the topics favorited template part
       
   180  *
       
   181  * @since bbPress (r3552)
       
   182  *
       
   183  * @uses bbp_get_template_part()
       
   184  */
       
   185 function bbp_member_forums_favorites_content() {
       
   186 ?>
       
   187 
       
   188 	<div id="bbpress-forums">
       
   189 
       
   190 		<?php bbp_get_template_part( 'user', 'favorites' ); ?>
       
   191 
       
   192 	</div>
       
   193 
       
   194 <?php
       
   195 }
       
   196 
       
   197 /**
       
   198  * Get the topics subscribed template part
       
   199  *
       
   200  * @since bbPress (r3552)
       
   201  *
       
   202  * @uses bbp_get_template_part()
       
   203  */
       
   204 function bbp_member_forums_subscriptions_content() {
       
   205 ?>
       
   206 
       
   207 	<div id="bbpress-forums">
       
   208 
       
   209 		<?php bbp_get_template_part( 'user', 'subscriptions' ); ?>
       
   210 
       
   211 	</div>
       
   212 
       
   213 <?php
       
   214 }
       
   215 
       
   216 /** Forum/Group Sync **********************************************************/
       
   217 
       
   218 /**
       
   219  * These functions are used to keep the many-to-many relationships between
       
   220  * groups and forums synchronized. Each forum and group stores ponters to each
       
   221  * other in their respective meta. This way if a group or forum is deleted
       
   222  * their associattions can be updated without much effort.
       
   223  */
       
   224 
       
   225 /**
       
   226  * Get forum ID's for a group
       
   227  *
       
   228  * @param type $group_id
       
   229  * @since bbPress (r3653)
       
   230  */
       
   231 function bbp_get_group_forum_ids( $group_id = 0 ) {
       
   232 
       
   233 	// Assume no forums
       
   234 	$forum_ids = array();
       
   235 
       
   236 	// Use current group if none is set
       
   237 	if ( empty( $group_id ) )
       
   238 		$group_id = bp_get_current_group_id();
       
   239 
       
   240 	// Get the forums
       
   241 	if ( !empty( $group_id ) )
       
   242 		$forum_ids = groups_get_groupmeta( $group_id, 'forum_id' );
       
   243 
       
   244 	// Make sure result is an array
       
   245 	if ( !is_array( $forum_ids ) )
       
   246 		$forum_ids = (array) $forum_ids;
       
   247 
       
   248 	// Trim out any empty array items
       
   249 	$forum_ids = array_filter( $forum_ids );
       
   250 
       
   251 	return (array) apply_filters( 'bbp_get_group_forum_ids', $forum_ids, $group_id );
       
   252 }
       
   253 
       
   254 /**
       
   255  * Get group ID's for a forum
       
   256  *
       
   257  * @param type $forum_id
       
   258  * @since bbPress (r3653)
       
   259  */
       
   260 function bbp_get_forum_group_ids( $forum_id = 0 ) {
       
   261 
       
   262 	// Assume no forums
       
   263 	$group_ids = array();
       
   264 
       
   265 	// Use current group if none is set
       
   266 	if ( empty( $forum_id ) )
       
   267 		$forum_id = bbp_get_forum_id();
       
   268 
       
   269 	// Get the forums
       
   270 	if ( !empty( $forum_id ) )
       
   271 		$group_ids = get_post_meta( $forum_id, '_bbp_group_ids', true );
       
   272 
       
   273 	// Make sure result is an array
       
   274 	if ( !is_array( $group_ids ) )
       
   275 		$group_ids = (array) $group_ids;
       
   276 
       
   277 	// Trim out any empty array items
       
   278 	$group_ids = array_filter( $group_ids );
       
   279 
       
   280 	return (array) apply_filters( 'bbp_get_forum_group_ids', $group_ids, $forum_id );
       
   281 }
       
   282 
       
   283 /**
       
   284  * Get forum ID's for a group
       
   285  *
       
   286  * @param type $group_id
       
   287  * @since bbPress (r3653)
       
   288  */
       
   289 function bbp_update_group_forum_ids( $group_id = 0, $forum_ids = array() ) {
       
   290 
       
   291 	// Use current group if none is set
       
   292 	if ( empty( $group_id ) )
       
   293 		$group_id = bp_get_current_group_id();
       
   294 
       
   295 	// Trim out any empties
       
   296 	$forum_ids = array_filter( $forum_ids );
       
   297 
       
   298 	// Get the forums
       
   299 	return groups_update_groupmeta( $group_id, 'forum_id', $forum_ids );
       
   300 }
       
   301 
       
   302 /**
       
   303  * Update group ID's for a forum
       
   304  *
       
   305  * @param type $forum_id
       
   306  * @since bbPress (r3653)
       
   307  */
       
   308 function bbp_update_forum_group_ids( $forum_id = 0, $group_ids = array() ) {
       
   309 	$forum_id = bbp_get_forum_id( $forum_id );
       
   310 
       
   311 	// Trim out any empties
       
   312 	$group_ids = array_filter( $group_ids );
       
   313 
       
   314 	// Get the forums
       
   315 	return update_post_meta( $forum_id, '_bbp_group_ids', $group_ids );
       
   316 }
       
   317 
       
   318 /**
       
   319  * Add a group to a forum
       
   320  *
       
   321  * @param type $group_id
       
   322  * @since bbPress (r3653)
       
   323  */
       
   324 function bbp_add_group_id_to_forum( $forum_id = 0, $group_id = 0 ) {
       
   325 
       
   326 	// Validate forum_id
       
   327 	$forum_id = bbp_get_forum_id( $forum_id );
       
   328 
       
   329 	// Use current group if none is set
       
   330 	if ( empty( $group_id ) )
       
   331 		$group_id = bp_get_current_group_id();
       
   332 
       
   333 	// Get current group IDs
       
   334 	$group_ids = bbp_get_forum_group_ids( $forum_id );
       
   335 
       
   336 	// Maybe update the groups forums
       
   337 	if ( !in_array( $group_id, $group_ids ) ) {
       
   338 		$group_ids[] = $group_id;
       
   339 		return bbp_update_forum_group_ids( $forum_id, $group_ids );
       
   340 	}
       
   341 }
       
   342 
       
   343 /**
       
   344  * Remove a forum from a group
       
   345  *
       
   346  * @param type $group_id
       
   347  * @since bbPress (r3653)
       
   348  */
       
   349 function bbp_add_forum_id_to_group( $group_id = 0, $forum_id = 0 ) {
       
   350 
       
   351 	// Validate forum_id
       
   352 	$forum_id = bbp_get_forum_id( $forum_id );
       
   353 
       
   354 	// Use current group if none is set
       
   355 	if ( empty( $group_id ) )
       
   356 		$group_id = bp_get_current_group_id();
       
   357 
       
   358 	// Get current group IDs
       
   359 	$forum_ids = bbp_get_group_forum_ids( $group_id );
       
   360 
       
   361 	// Maybe update the groups forums
       
   362 	if ( !in_array( $forum_id, $forum_ids ) ) {
       
   363 		$forum_ids[] = $forum_id;
       
   364 		return bbp_update_group_forum_ids( $group_id, $forum_ids );
       
   365 	}
       
   366 }
       
   367 
       
   368 /**
       
   369  * Remove a group from a forum
       
   370  *
       
   371  * @param type $group_id
       
   372  * @since bbPress (r3653)
       
   373  */
       
   374 function bbp_remove_group_id_from_forum( $forum_id = 0, $group_id = 0 ) {
       
   375 
       
   376 	// Validate forum_id
       
   377 	$forum_id = bbp_get_forum_id( $forum_id );
       
   378 
       
   379 	// Use current group if none is set
       
   380 	if ( empty( $group_id ) )
       
   381 		$group_id = bp_get_current_group_id();
       
   382 
       
   383 	// Get current group IDs
       
   384 	$group_ids = bbp_get_forum_group_ids( $forum_id );
       
   385 
       
   386 	// Maybe update the groups forums
       
   387 	if ( in_array( $group_id, $group_ids ) ) {
       
   388 		unset( $group_ids[$group_id] );
       
   389 		return bbp_update_forum_group_ids( $forum_id, $group_ids );
       
   390 	}
       
   391 }
       
   392 
       
   393 /**
       
   394  * Remove a forum from a group
       
   395  *
       
   396  * @param type $group_id
       
   397  * @since bbPress (r3653)
       
   398  */
       
   399 function bbp_remove_forum_id_from_group( $group_id = 0, $forum_id = 0 ) {
       
   400 
       
   401 	// Validate forum_id
       
   402 	$forum_id = bbp_get_forum_id( $forum_id );
       
   403 
       
   404 	// Use current group if none is set
       
   405 	if ( empty( $group_id ) )
       
   406 		$group_id = bp_get_current_group_id();
       
   407 
       
   408 	// Get current group IDs
       
   409 	$forum_ids = bbp_get_group_forum_ids( $group_id );
       
   410 
       
   411 	// Maybe update the groups forums
       
   412 	if ( in_array( $forum_id, $forum_ids ) ) {
       
   413 		unset( $forum_ids[$forum_id] );
       
   414 		return bbp_update_group_forum_ids( $group_id, $forum_ids );
       
   415 	}
       
   416 }
       
   417 
       
   418 /**
       
   419  * Remove a group from aall forums
       
   420  *
       
   421  * @param type $group_id
       
   422  * @since bbPress (r3653)
       
   423  */
       
   424 function bbp_remove_group_id_from_all_forums( $group_id = 0 ) {
       
   425 
       
   426 	// Use current group if none is set
       
   427 	if ( empty( $group_id ) )
       
   428 		$group_id = bp_get_current_group_id();
       
   429 
       
   430 	// Get current group IDs
       
   431 	$forum_ids = bbp_get_group_forum_ids( $group_id );
       
   432 
       
   433 	// Loop through forums and remove this group from each one
       
   434 	foreach( (array) $forum_ids as $forum_id ) {
       
   435 		bbp_remove_group_id_from_forum( $group_id, $forum_id );
       
   436 	}
       
   437 }
       
   438 
       
   439 /**
       
   440  * Remove a forum from all groups
       
   441  *
       
   442  * @param type $forum_id
       
   443  * @since bbPress (r3653)
       
   444  */
       
   445 function bbp_remove_forum_id_from_all_groups( $forum_id = 0 ) {
       
   446 
       
   447 	// Validate
       
   448 	$forum_id  = bbp_get_forum_id( $forum_id );
       
   449 	$group_ids = bbp_get_forum_group_ids( $forum_id );
       
   450 
       
   451 	// Loop through groups and remove this forum from each one
       
   452 	foreach( (array) $group_ids as $group_id ) {
       
   453 		bbp_remove_forum_id_from_group( $forum_id, $group_id );
       
   454 	}
       
   455 }