PluginProbe
Forumax – AI Powered Advanced Community Forum Plugin / 2.5.1
Forumax – AI Powered Advanced Community Forum Plugin v2.5.1
2.5.1 2.5.0 2.4.4 2.4.3 2.4.2 2.4.1 2.4.0 trunk 1.0.8 1.1.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 All 31 releases
bbp-core / lib / bbpress / includes / extend / buddypress / functions.php

functions.php in Forumax – AI Powered Advanced Community Forum Plugin 2.5.1, at lib/bbpress/includes/extend/buddypress/functions.php

909 lines 22.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Main bbPress BuddyPress Class
5 *
6 * @package bbPress
7 * @subpackage BuddyPress
8 */
9
10 // Exit if accessed directly
11 defined( 'ABSPATH' ) || exit;
12
13 // Hooks
14 add_filter( 'bp_modify_page_title', 'bbp_filter_modify_page_title', 10, 3 );
15 add_filter( 'bbp_get_user_id', 'bbp_filter_user_id', 10, 3 );
16 add_filter( 'bbp_is_single_user', 'bbp_filter_is_single_user', 10, 1 );
17 add_filter( 'bbp_is_user_home', 'bbp_filter_is_user_home', 10, 1 );
18
19 // Group Forum Root
20 add_action( 'load-settings_page_bbpress', 'bbp_maybe_create_group_forum_root' );
21 add_action( 'bbp_delete_forum', 'bbp_maybe_delete_group_forum_root' );
22
23 /** BuddyPress Helpers ********************************************************/
24
25 /**
26 * Return component name/ID ('forums' by default)
27 *
28 * This is used primarily for Notifications integration.
29 *
30 * @since 2.6.0 bbPress (r5232)
31 *
32 * @return string
33 */
34 function bbp_get_component_name() {
35
36 // Use existing ID or default
37 $retval = ! empty( bbpress()->extend->buddypress->id )
38 ? bbpress()->extend->buddypress->id
39 : 'forums';
40
41 // Filter & return
42 return apply_filters( 'bbp_get_component_name', $retval );
43 }
44
45 /**
46 * Filter the current bbPress user ID with the current BuddyPress user ID
47 *
48 * @since 2.1.0 bbPress (r3552)
49 *
50 * @param int $user_id
51 * @param bool $displayed_user_fallback
52 * @param bool $current_user_fallback
53 *
54 * @return int User ID
55 */
56 function bbp_filter_user_id( $user_id = 0, $displayed_user_fallback = true, $current_user_fallback = false ) {
57
58 // Define local variable
59 $bbp_user_id = 0;
60
61 // Get possible user ID's
62 $did = bp_displayed_user_id();
63 $lid = bp_loggedin_user_id();
64
65 // Easy empty checking
66 if ( ! empty( $user_id ) && is_numeric( $user_id ) ) {
67 $bbp_user_id = $user_id;
68
69 // Currently viewing or editing a user
70 } elseif ( ( true === $displayed_user_fallback ) && ! empty( $did ) ) {
71 $bbp_user_id = $did;
72
73 // Maybe fallback on the current_user ID
74 } elseif ( ( true === $current_user_fallback ) && ! empty( $lid ) ) {
75 $bbp_user_id = $lid;
76 }
77
78 return $bbp_user_id;
79 }
80
81 /**
82 * Filter the bbPress is_single_user function with BuddyPress equivalent
83 *
84 * @since 2.1.0 bbPress (r3552)
85 *
86 * @param bool $is Optional. Default false
87 * @return bool True if viewing single user, false if not
88 */
89 function bbp_filter_is_single_user( $is = false ) {
90 if ( ! empty( $is ) ) {
91 return $is;
92 }
93
94 return bp_is_user();
95 }
96
97 /**
98 * Filter the bbPress is_user_home function with BuddyPress equivalent
99 *
100 * @since 2.1.0 bbPress (r3552)
101 *
102 * @param bool $is Optional. Default false
103 * @return bool True if viewing single user, false if not
104 */
105 function bbp_filter_is_user_home( $is = false ) {
106 if ( ! empty( $is ) ) {
107 return $is;
108 }
109
110 return bp_is_my_profile();
111 }
112
113 /**
114 * Add the topic title to the <title> if viewing a single group forum topic
115 *
116 * @since 2.5.0 bbPress (r5161)
117 *
118 * @param string $new_title The title to filter
119 * @param string $old_title (Not used)
120 * @param string $sep The separator to use
121 * @return string The possibly modified title
122 */
123 function bbp_filter_modify_page_title( $new_title = '', $old_title = '', $sep = '' ) {
124
125 // Only filter if group forums are active
126 if ( bbp_is_group_forums_active() ) {
127
128 // Only filter for single group forum topics
129 if ( bp_is_group_forum_topic() || bp_is_group_forum_topic_edit() ) {
130
131 // Get the topic
132 $topic = get_posts( array(
133 'name' => bp_action_variable( 1 ),
134 'post_status' => array_keys( bbp_get_topic_statuses() ),
135 'post_type' => bbp_get_topic_post_type(),
136 'numberposts' => 1
137 ) );
138
139 // Add the topic title to the <title>
140 $new_title .= bbp_get_topic_title( $topic[0]->ID ) . ' ' . $sep . ' ';
141 }
142 }
143
144 // Return the title
145 return $new_title;
146 }
147
148 /** BuddyPress Screens ********************************************************/
149
150 /**
151 * Hook bbPress topics template into plugins template
152 *
153 * @since 2.1.0 bbPress (r3552)
154 */
155 function bbp_member_forums_screen_topics() {
156 add_action( 'bp_template_content', 'bbp_member_forums_topics_content' );
157 bp_core_load_template( apply_filters( 'bbp_member_forums_screen_topics', 'members/single/plugins' ) );
158 }
159
160 /**
161 * Hook bbPress replies template into plugins template
162 *
163 * @since 2.1.0 bbPress (r3552)
164 */
165 function bbp_member_forums_screen_replies() {
166 add_action( 'bp_template_content', 'bbp_member_forums_replies_content' );
167 bp_core_load_template( apply_filters( 'bbp_member_forums_screen_replies', 'members/single/plugins' ) );
168 }
169
170 /**
171 * Hook bbPress engagements template into plugins template
172 *
173 * @since 2.6.0 bbPress (r6320)
174 */
175 function bbp_member_forums_screen_engagements() {
176 add_action( 'bp_template_content', 'bbp_member_forums_engagements_content' );
177 bp_core_load_template( apply_filters( 'bbp_member_forums_screen_engagements', 'members/single/plugins' ) );
178 }
179
180 /**
181 * Hook bbPress favorites template into plugins template
182 *
183 * @since 2.1.0 bbPress (r3552)
184 */
185 function bbp_member_forums_screen_favorites() {
186 add_action( 'bp_template_content', 'bbp_member_forums_favorites_content' );
187 bp_core_load_template( apply_filters( 'bbp_member_forums_screen_favorites', 'members/single/plugins' ) );
188 }
189
190 /**
191 * Hook bbPress subscriptions template into plugins template
192 *
193 * @since 2.1.0 bbPress (r3552)
194 */
195 function bbp_member_forums_screen_subscriptions() {
196 add_action( 'bp_template_content', 'bbp_member_forums_subscriptions_content' );
197 bp_core_load_template( apply_filters( 'bbp_member_forums_screen_subscriptions', 'members/single/plugins' ) );
198 }
199
200 /** BuddyPress Templates ******************************************************/
201
202 /**
203 * Get the topics created template part
204 *
205 * @since 2.1.0 bbPress (r3552)
206 */
207 function bbp_member_forums_topics_content() {
208 ?>
209
210 <div id="bbpress-forums" class="bbpress-wrapper">
211
212 <?php bbp_get_template_part( 'user', 'topics-created' ); ?>
213
214 </div>
215
216 <?php
217 }
218
219 /**
220 * Get the topics replied to template part
221 *
222 * @since 2.1.0 bbPress (r3552)
223 */
224 function bbp_member_forums_replies_content() {
225 ?>
226
227 <div id="bbpress-forums" class="bbpress-wrapper">
228
229 <?php bbp_get_template_part( 'user', 'replies-created' ); ?>
230
231 </div>
232
233 <?php
234 }
235
236 /**
237 * Get the topic engagements template part
238 *
239 * @since 2.6.0 bbPress (r6320)
240 */
241 function bbp_member_forums_engagements_content() {
242 ?>
243
244 <div id="bbpress-forums" class="bbpress-wrapper">
245
246 <?php bbp_get_template_part( 'user', 'engagements' ); ?>
247
248 </div>
249
250 <?php
251 }
252
253 /**
254 * Get the topics favorited template part
255 *
256 * @since 2.1.0 bbPress (r3552)
257 */
258 function bbp_member_forums_favorites_content() {
259 ?>
260
261 <div id="bbpress-forums" class="bbpress-wrapper">
262
263 <?php bbp_get_template_part( 'user', 'favorites' ); ?>
264
265 </div>
266
267 <?php
268 }
269
270 /**
271 * Get the topics subscribed template part
272 *
273 * @since 2.1.0 bbPress (r3552)
274 */
275 function bbp_member_forums_subscriptions_content() {
276 ?>
277
278 <div id="bbpress-forums" class="bbpress-wrapper">
279
280 <?php bbp_get_template_part( 'user', 'subscriptions' ); ?>
281
282 </div>
283
284 <?php
285 }
286
287 /** Forum Group Root **********************************************************/
288
289 /**
290 * Clean up the group root setting if the forum is being deleted
291 *
292 * @since 2.6.0 bbPress (r6479)
293 *
294 * @param int $forum_id The forum ID being deleted
295 */
296 function bbp_maybe_delete_group_forum_root( $forum_id = 0 ) {
297
298 // Bail if no forum ID
299 $forum_id = bbp_get_forum_id();
300 if ( empty( $forum_id ) ) {
301 return;
302 }
303
304 // Get the group root
305 $group_root = (int) get_option( '_bbp_group_forums_root_id', 0 );
306
307 // Delete the group root if the forum just got deleted
308 if ( $group_root === $forum_id ) {
309 delete_option( '_bbp_group_forums_root_id' );
310 }
311 }
312
313 /**
314 * Handle the new group forum root creation
315 *
316 * @since 2.6.0 bbPress (r6479)
317 *
318 * @return
319 */
320 function bbp_maybe_create_group_forum_root() {
321
322 // Bail if no nonce
323 if ( empty( $_GET['_wpnonce'] ) || ( empty( $_GET['create'] ) || ( 'bbp-group-forum-root' !== $_GET['create'] ) ) ) {
324 return;
325 }
326
327 // Bail if user cannot publish forums
328 if ( ! current_user_can( 'publish_forums' ) ) {
329 return;
330 }
331
332 // Bail if nonce check fails
333 if ( ! wp_verify_nonce( $_GET['_wpnonce'], '_bbp_group_forums_root_id' ) ) {
334 return;
335 }
336
337 // Create new forum
338 $forum_id = bbp_insert_forum(
339
340 // Post
341 array( 'post_title' => esc_html__( 'Group Forums', 'bbpress' ) ),
342
343 // Meta
344 array( 'forum_type' => 'category' )
345 );
346
347 // Update & redirect
348 if ( ! empty( $forum_id ) ) {
349
350 // Create
351 update_option( '_bbp_group_forums_root_id', $forum_id );
352
353 // Redirect
354 bbp_redirect( add_query_arg( array(
355 'page' => 'bbpress',
356 'updated' => true
357 ), admin_url( 'options-general.php' ) ) );
358 }
359 }
360
361 /** Forum/Group Sync **********************************************************/
362
363 /**
364 * These functions are used to keep the many-to-many relationships between
365 * groups and forums synchronized. Each forum and group stores pointers to each
366 * other in their respective meta. This way if a group or forum is deleted
367 * their associations can be updated without much effort.
368 */
369
370 /**
371 * Get forum ID's for a group
372 *
373 * @since 2.1.0 bbPress (r3653)
374 *
375 * @param int $group_id
376 */
377 function bbp_get_group_forum_ids( $group_id = 0 ) {
378
379 // Assume no forums
380 $forum_ids = array();
381
382 // Use current group if none is set
383 if ( empty( $group_id ) ) {
384 $group_id = bp_get_current_group_id();
385 }
386
387 // Get the forums
388 if ( ! empty( $group_id ) ) {
389 $forum_ids = groups_get_groupmeta( $group_id, 'forum_id' );
390 }
391
392 // Make sure result is an array of ints
393 $forum_ids = array_filter( wp_parse_id_list( $forum_ids ) );
394
395 // Filter & return
396 return (array) apply_filters( 'bbp_get_group_forum_ids', $forum_ids, $group_id );
397 }
398
399 /**
400 * Get group ID's for a forum
401 *
402 * @since 2.1.0 bbPress (r3653)
403 *
404 * @param int $forum_id
405 */
406 function bbp_get_forum_group_ids( $forum_id = 0 ) {
407
408 // Assume no forums
409 $group_ids = array();
410
411 // Use current group if none is set
412 if ( empty( $forum_id ) ) {
413 $forum_id = bbp_get_forum_id();
414 }
415
416 // Get the forums
417 if ( ! empty( $forum_id ) ) {
418 $group_ids = get_post_meta( $forum_id, '_bbp_group_ids', true );
419 }
420
421 // Make sure result is an array of ints
422 $group_ids = array_filter( wp_parse_id_list( $group_ids ) );
423
424 // Filter & return
425 return (array) apply_filters( 'bbp_get_forum_group_ids', $group_ids, $forum_id );
426 }
427
428 /**
429 * Get forum ID's for a group
430 *
431 * @since 2.1.0 bbPress (r3653)
432 *
433 * @param int $group_id
434 */
435 function bbp_update_group_forum_ids( $group_id = 0, $forum_ids = array() ) {
436
437 // Use current group if none is set
438 if ( empty( $group_id ) ) {
439 $group_id = bp_get_current_group_id();
440 }
441
442 // Trim out any empties
443 $forum_ids = array_filter( wp_parse_id_list( $forum_ids ) );
444
445 // Get the forums
446 return groups_update_groupmeta( $group_id, 'forum_id', $forum_ids );
447 }
448
449 /**
450 * Update group ID's for a forum
451 *
452 * @since 2.1.0 bbPress (r3653)
453 *
454 * @param int $forum_id
455 */
456 function bbp_update_forum_group_ids( $forum_id = 0, $group_ids = array() ) {
457 $forum_id = bbp_get_forum_id( $forum_id );
458
459 // Trim out any empties
460 $group_ids = array_filter( wp_parse_id_list( $group_ids ) );
461
462 // Get the forums
463 return update_post_meta( $forum_id, '_bbp_group_ids', $group_ids );
464 }
465
466 /**
467 * Add a group to a forum
468 *
469 * @since 2.1.0 bbPress (r3653)
470 *
471 * @param int $group_id
472 */
473 function bbp_add_group_id_to_forum( $forum_id = 0, $group_id = 0 ) {
474
475 // Validate forum_id
476 $forum_id = bbp_get_forum_id( $forum_id );
477
478 // Use current group if none is set
479 if ( empty( $group_id ) ) {
480 $group_id = bp_get_current_group_id();
481 }
482
483 // Get current group IDs
484 $group_ids = bbp_get_forum_group_ids( $forum_id );
485
486 // Maybe update the groups forums
487 if ( ! in_array( $group_id, $group_ids, true ) ) {
488 $group_ids[] = $group_id;
489 return bbp_update_forum_group_ids( $forum_id, $group_ids );
490 }
491 }
492
493 /**
494 * Remove a forum from a group
495 *
496 * @since 2.1.0 bbPress (r3653)
497 *
498 * @param int $group_id
499 */
500 function bbp_add_forum_id_to_group( $group_id = 0, $forum_id = 0 ) {
501
502 // Validate forum_id
503 $forum_id = bbp_get_forum_id( $forum_id );
504
505 // Use current group if none is set
506 if ( empty( $group_id ) ) {
507 $group_id = bp_get_current_group_id();
508 }
509
510 // Get current group IDs
511 $forum_ids = bbp_get_group_forum_ids( $group_id );
512
513 // Maybe update the groups forums
514 if ( ! in_array( $forum_id, $forum_ids, true ) ) {
515 $forum_ids[] = $forum_id;
516 return bbp_update_group_forum_ids( $group_id, $forum_ids );
517 }
518 }
519
520 /**
521 * Remove a group from a forum
522 *
523 * @since 2.1.0 bbPress (r3653)
524 *
525 * @param int $group_id
526 */
527 function bbp_remove_group_id_from_forum( $forum_id = 0, $group_id = 0 ) {
528
529 // Validate forum_id
530 $forum_id = bbp_get_forum_id( $forum_id );
531
532 // Use current group if none is set
533 if ( empty( $group_id ) ) {
534 $group_id = bp_get_current_group_id();
535 }
536
537 // Get current group IDs
538 $group_ids = bbp_get_forum_group_ids( $forum_id );
539
540 // Maybe update the groups forums
541 if ( in_array( $group_id, $group_ids, true ) ) {
542 $group_ids = array_diff( array_values( $group_ids ), (array) $group_id );
543 return bbp_update_forum_group_ids( $forum_id, $group_ids );
544 }
545 }
546
547 /**
548 * Remove a forum from a group
549 *
550 * @since 2.1.0 bbPress (r3653)
551 *
552 * @param int $group_id
553 */
554 function bbp_remove_forum_id_from_group( $group_id = 0, $forum_id = 0 ) {
555
556 // Validate forum_id
557 $forum_id = bbp_get_forum_id( $forum_id );
558
559 // Use current group if none is set
560 if ( empty( $group_id ) ) {
561 $group_id = bp_get_current_group_id();
562 }
563
564 // Get current group IDs
565 $forum_ids = bbp_get_group_forum_ids( $group_id );
566
567 // Maybe update the groups forums
568 if ( in_array( $forum_id, $forum_ids, true ) ) {
569 $forum_ids = array_diff( array_values( $forum_ids ), (array) $forum_id );
570 return bbp_update_group_forum_ids( $group_id, $forum_ids );
571 }
572 }
573
574 /**
575 * Remove a group from all forums
576 *
577 * @since 2.1.0 bbPress (r3653)
578 *
579 * @param int $group_id
580 */
581 function bbp_remove_group_id_from_all_forums( $group_id = 0 ) {
582
583 // Use current group if none is set
584 if ( empty( $group_id ) ) {
585 $group_id = bp_get_current_group_id();
586 }
587
588 // Get current group IDs
589 $forum_ids = bbp_get_group_forum_ids( $group_id );
590
591 // Loop through forums and remove this group from each one
592 foreach ( $forum_ids as $forum_id ) {
593 bbp_remove_group_id_from_forum( $group_id, $forum_id );
594 }
595 }
596
597 /**
598 * Remove a forum from all groups
599 *
600 * @since 2.1.0 bbPress (r3653)
601 *
602 * @param int $forum_id
603 */
604 function bbp_remove_forum_id_from_all_groups( $forum_id = 0 ) {
605
606 // Validate
607 $forum_id = bbp_get_forum_id( $forum_id );
608 $group_ids = bbp_get_forum_group_ids( $forum_id );
609
610 // Loop through groups and remove this forum from each one
611 foreach ( $group_ids as $group_id ) {
612 bbp_remove_forum_id_from_group( $forum_id, $group_id );
613 }
614 }
615
616 /**
617 * Return true if a forum is a group forum
618 *
619 * @since 2.3.0 bbPress (r4571)
620 *
621 * @param int $forum_id
622 * @return bool True if it is a group forum, false if not
623 */
624 function bbp_is_forum_group_forum( $forum_id = 0 ) {
625
626 // Validate
627 $forum_id = bbp_get_forum_id( $forum_id );
628
629 // Check for group ID's
630 $group_ids = bbp_get_forum_group_ids( $forum_id );
631
632 // Check if the forum has groups
633 $retval = (bool) ! empty( $group_ids );
634
635 // Filter & return
636 return (bool) apply_filters( 'bbp_is_forum_group_forum', $retval, $forum_id, $group_ids );
637 }
638
639 /*** Group Member Status ******************************************************/
640
641 /**
642 * Is the current user an admin of the current group
643 *
644 * @since 2.3.0 bbPress (r4632)
645 *
646 * @return bool If current user is an admin of the current group
647 */
648 function bbp_group_is_admin() {
649
650 // Bail if user is not logged in or not looking at a group
651 if ( ! is_user_logged_in() || ! bp_is_group() ) {
652 return false;
653 }
654
655 $bbp = bbpress();
656
657 // Set the global if not set
658 if ( ! isset( $bbp->current_user->is_group_admin ) ) {
659 $bbp->current_user->is_group_admin = groups_is_user_admin( bp_loggedin_user_id(), bp_get_current_group_id() );
660 }
661
662 // Return the value
663 return (bool) $bbp->current_user->is_group_admin;
664 }
665
666 /**
667 * Is the current user a moderator of the current group
668 *
669 * @since 2.3.0 bbPress (r4632)
670 *
671 * @return bool If current user is a moderator of the current group
672 */
673 function bbp_group_is_mod() {
674
675 // Bail if user is not logged in or not looking at a group
676 if ( ! is_user_logged_in() || ! bp_is_group() ) {
677 return false;
678 }
679
680 $bbp = bbpress();
681
682 // Set the global if not set
683 if ( ! isset( $bbp->current_user->is_group_mod ) ) {
684 $bbp->current_user->is_group_mod = groups_is_user_mod( bp_loggedin_user_id(), bp_get_current_group_id() );
685 }
686
687 // Return the value
688 return (bool) $bbp->current_user->is_group_mod;
689 }
690
691 /**
692 * Is the current user a member of the current group
693 *
694 * @since 2.3.0 bbPress (r4632)
695 *
696 * @return bool If current user is a member of the current group
697 */
698 function bbp_group_is_member() {
699
700 // Bail if user is not logged in or not looking at a group
701 if ( ! is_user_logged_in() || ! bp_is_group() ) {
702 return false;
703 }
704
705 $bbp = bbpress();
706
707 // Set the global if not set
708 if ( ! isset( $bbp->current_user->is_group_member ) ) {
709 $bbp->current_user->is_group_member = groups_is_user_member( bp_loggedin_user_id(), bp_get_current_group_id() );
710 }
711
712 // Return the value
713 return (bool) $bbp->current_user->is_group_member;
714 }
715
716 /**
717 * Is the current user banned from the current group
718 *
719 * @since 2.3.0 bbPress (r4632)
720 *
721 * @return bool If current user is banned from the current group
722 */
723 function bbp_group_is_banned() {
724
725 // Bail if user is not logged in or not looking at a group
726 if ( ! is_user_logged_in() || ! bp_is_group() ) {
727 return false;
728 }
729
730 $bbp = bbpress();
731
732 // Set the global if not set
733 if ( ! isset( $bbp->current_user->is_group_banned ) ) {
734 $bbp->current_user->is_group_banned = groups_is_user_banned( bp_loggedin_user_id(), bp_get_current_group_id() );
735 }
736
737 // Return the value
738 return (bool) $bbp->current_user->is_group_banned;
739 }
740
741 /**
742 * Is the current user the creator of the current group
743 *
744 * @since 2.3.0 bbPress (r4632)
745 *
746 * @return bool If current user the creator of the current group
747 */
748 function bbp_group_is_creator() {
749
750 // Bail if user is not logged in or not looking at a group
751 if ( ! is_user_logged_in() || ! bp_is_group() ) {
752 return false;
753 }
754
755 $bbp = bbpress();
756
757 // Set the global if not set
758 if ( ! isset( $bbp->current_user->is_group_creator ) ) {
759 $bbp->current_user->is_group_creator = groups_is_user_creator( bp_loggedin_user_id(), bp_get_current_group_id() );
760 }
761
762 // Return the value
763 return (bool) $bbp->current_user->is_group_creator;
764 }
765
766 /* BuddyPress Activity Action Callbacks ***************************************/
767
768 /**
769 * Return an array of allowed activity actions
770 *
771 * @since 2.6.0 bbPress (r6370)
772 *
773 * @return array
774 */
775 function bbp_get_activity_actions() {
776
777 // Filter & return
778 return (array) apply_filters( 'bbp_get_activity_actions', array(
779 'topic' => esc_html__( '%1$s started the topic %2$s in the forum %3$s', 'bbpress' ),
780 'reply' => esc_html__( '%1$s replied to the topic %2$s in the forum %3$s', 'bbpress' )
781 ) );
782 }
783
784 /**
785 * Generic function to format the dynamic BuddyPress activity action for new
786 * topics/replies.
787 *
788 * @since 2.6.0 bbPress (r6370)
789 *
790 * @param string $type The type of post. Expects `topic` or `reply`.
791 * @param string $action The current action string.
792 * @param BP_Activity_Activity $activity The BuddyPress activity object.
793 *
794 * @return string The formatted activity action.
795 */
796 function bbp_format_activity_action_new_post( $type = '', $action = '', $activity = false ) {
797
798 // Get actions
799 $actions = bbp_get_activity_actions();
800
801 // Bail early if we don't have a valid type
802 if ( ! in_array( $type, array_keys( $actions ), true ) ) {
803 return $action;
804 }
805
806 // Bail if intercepted
807 $intercept = bbp_maybe_intercept( __FUNCTION__, func_get_args() );
808 if ( bbp_is_intercepted( $intercept ) ) {
809 return $intercept;
810 }
811
812 // Groups component
813 if ( 'groups' === $activity->component ) {
814 if ( 'topic' === $type ) {
815 $topic_id = bbp_get_topic_id( $activity->secondary_item_id );
816 $forum_id = bbp_get_topic_forum_id( $topic_id );
817 } else {
818 $topic_id = bbp_get_reply_topic_id( $activity->secondary_item_id );
819 $forum_id = bbp_get_topic_forum_id( $topic_id );
820 }
821
822 // General component (bbpress/forums/other)
823 } else {
824 if ( 'topic' === $type ) {
825 $topic_id = bbp_get_topic_id( $activity->item_id );
826 $forum_id = bbp_get_forum_id( $activity->secondary_item_id );
827 } else {
828 $topic_id = bbp_get_topic_id( $activity->secondary_item_id );
829 $forum_id = bbp_get_topic_forum_id( $topic_id );
830 }
831 }
832
833 // User link for topic author
834 $user_link = bbp_get_user_profile_link( $activity->user_id );
835
836 // Topic link
837 $topic_permalink = bbp_get_topic_permalink( $topic_id );
838 $topic_title = get_post_field( 'post_title', $topic_id, 'raw' );
839 $topic_link = '<a href="' . esc_url( $topic_permalink ) . '">' . esc_html( $topic_title ) . '</a>';
840
841 // Forum link
842 $forum_permalink = bbp_get_forum_permalink( $forum_id );
843 $forum_title = get_post_field( 'post_title', $forum_id, 'raw' );
844 $forum_link = '<a href="' . esc_url( $forum_permalink ) . '">' . esc_html( $forum_title ) . '</a>';
845
846 // Format
847 $activity_action = sprintf( $actions[ $type ], $user_link, $topic_link, $forum_link );
848
849 /**
850 * Filters the formatted activity action new activity string.
851 *
852 * @since 2.6.0 bbPress (r6370)
853 *
854 * @param string $activity_action Activity action string value
855 * @param string $type The type of post. Expects `topic` or `reply`.
856 * @param string $action The current action string.
857 * @param BP_Activity_Activity $activity The BuddyPress activity object.
858 */
859 return apply_filters( 'bbp_format_activity_action_new_post', $activity_action, $type, $action, $activity );
860 }
861
862 /**
863 * Formats the dynamic BuddyPress activity action for new topics.
864 *
865 * @since 2.6.0 bbPress (r6370)
866 *
867 * @param string $action The current action string
868 * @param object $activity The BuddyPress activity object
869 *
870 * @return string The formatted activity action.
871 */
872 function bbp_format_activity_action_new_topic( $action, $activity ) {
873 $action = bbp_format_activity_action_new_post( bbp_get_topic_post_type(), $action, $activity );
874
875 /**
876 * Filters the formatted activity action new topic string.
877 *
878 * @since 2.6.0 bbPress (r6370)
879 *
880 * @param string $action Activity action string value
881 * @param BP_Activity_Activity $activity Activity item object
882 */
883 return apply_filters( 'bbp_format_activity_action_new_topic', $action, $activity );
884 }
885
886 /**
887 * Formats the dynamic BuddyPress activity action for new replies.
888 *
889 * @since 2.6.0 bbPress (r6370)
890 *
891 * @param string $action The current action string
892 * @param object $activity The BuddyPress activity object
893 *
894 * @return string The formatted activity action
895 */
896 function bbp_format_activity_action_new_reply( $action, $activity ) {
897 $action = bbp_format_activity_action_new_post( bbp_get_reply_post_type(), $action, $activity );
898
899 /**
900 * Filters the formatted activity action new reply string.
901 *
902 * @since 2.6.0 bbPress (r6370)
903 *
904 * @param string $action Activity action string value
905 * @param BP_Activity_Activity $activity Activity item object
906 */
907 return apply_filters( 'bbp_format_activity_action_new_reply', $action, $activity );
908 }
909