Skip to:
Content

bbPress.org

Ticket #1800: bbp-forum-template.php

File bbp-forum-template.php, 75.5 KB (added by netweb, 12 years ago)
Line 
1<?php
2
3/**
4 * bbPress Forum Template Tags
5 *
6 * @package bbPress
7 * @subpackage TemplateTags
8 */
9
10// Exit if accessed directly
11if ( !defined( 'ABSPATH' ) ) exit;
12
13/** Post Type *****************************************************************/
14
15/**
16 * Output the unique id of the custom post type for forums
17 *
18 * @since bbPress (r2857)
19 * @uses bbp_get_forum_post_type() To get the forum post type
20 */
21function bbp_forum_post_type() {
22        echo bbp_get_forum_post_type();
23}
24        /**
25         * Return the unique id of the custom post type for forums
26         *
27         * @since bbPress (r2857)
28         *
29         * @uses apply_filters() Calls 'bbp_get_forum_post_type' with the forum
30         *                        post type id
31         * @return string The unique forum post type id
32         */
33        function bbp_get_forum_post_type() {
34                return apply_filters( 'bbp_get_forum_post_type', bbpress()->forum_post_type );
35        }
36
37/** Forum Loop ****************************************************************/
38
39/**
40 * The main forum loop.
41 *
42 * WordPress makes this easy for us.
43 *
44 * @since bbPress (r2464)
45 *
46 * @param mixed $args All the arguments supported by {@link WP_Query}
47 * @uses WP_Query To make query and get the forums
48 * @uses bbp_get_forum_post_type() To get the forum post type id
49 * @uses bbp_get_forum_id() To get the forum id
50 * @uses get_option() To get the forums per page option
51 * @uses current_user_can() To check if the current user is capable of editing
52 *                           others' forums
53 * @uses apply_filters() Calls 'bbp_has_forums' with
54 *                        bbPres::forum_query::have_posts()
55 *                        and bbPres::forum_query
56 * @return object Multidimensional array of forum information
57 */
58function bbp_has_forums( $args = '' ) {
59        $bbp = bbpress();
60
61        // Setup possible post__not_in array
62        $post_stati[] = bbp_get_public_status_id();
63
64        // Super admin get whitelisted post statuses
65        if ( is_super_admin() ) {
66                $post_stati = array( bbp_get_public_status_id(), bbp_get_private_status_id(), bbp_get_hidden_status_id() );
67
68        // Not a super admin, so check caps
69        } else {
70
71                // Check if user can read private forums
72                if ( current_user_can( 'read_private_forums' ) )
73                        $post_stati[] = bbp_get_private_status_id();
74
75                // Check if user can read hidden forums
76                if ( current_user_can( 'read_hidden_forums' ) )
77                        $post_stati[] = bbp_get_hidden_status_id();
78        }
79
80        // The default forum query for most circumstances
81        $default = array (
82                'post_type'      => bbp_get_forum_post_type(),
83                'post_parent'    => bbp_is_forum_archive() ? 0 : bbp_get_forum_id() ,
84                'post_status'    => implode( ',', $post_stati ),
85                'posts_per_page' => get_option( '_bbp_forums_per_page', 50 ),
86                'orderby'        => 'menu_order',
87                'order'          => 'ASC'
88        );
89
90        // Filter the default arguments
91        $args  = apply_filters( 'bbp_pre_has_forums_query', $args );
92
93        // Parse the default against what is requested
94        $bbp_f = wp_parse_args( $args, $default );
95
96        // Filter the forums query to allow just-in-time modifications
97        $bbp_f = apply_filters( 'bbp_has_forums_query', $bbp_f );
98
99        // Run the query
100        $bbp->forum_query = new WP_Query( $bbp_f );
101
102        return apply_filters( 'bbp_has_forums', $bbp->forum_query->have_posts(), $bbp->forum_query );
103}
104
105/**
106 * Whether there are more forums available in the loop
107 *
108 * @since bbPress (r2464)
109 *
110 * @uses bbPress:forum_query::have_posts() To check if there are more forums
111 *                                          available
112 * @return object Forum information
113 */
114function bbp_forums() {
115
116        // Put into variable to check against next
117        $have_posts = bbpress()->forum_query->have_posts();
118
119        // Reset the post data when finished
120        if ( empty( $have_posts ) )
121                wp_reset_postdata();
122
123        return $have_posts;
124}
125
126/**
127 * Loads up the current forum in the loop
128 *
129 * @since bbPress (r2464)
130 *
131 * @uses bbPress:forum_query::the_post() To get the current forum
132 * @return object Forum information
133 */
134function bbp_the_forum() {
135        return bbpress()->forum_query->the_post();
136}
137
138/** Forum *********************************************************************/
139
140/**
141 * Output forum id
142 *
143 * @since bbPress (r2464)
144 *
145 * @param $forum_id Optional. Used to check emptiness
146 * @uses bbp_get_forum_id() To get the forum id
147 */
148function bbp_forum_id( $forum_id = 0 ) {
149        echo bbp_get_forum_id( $forum_id );
150}
151        /**
152         * Return the forum id
153         *
154         * @since bbPress (r2464)
155         *
156         * @param $forum_id Optional. Used to check emptiness
157         * @uses bbPress::forum_query::in_the_loop To check if we're in the loop
158         * @uses bbPress::forum_query::post::ID To get the forum id
159         * @uses WP_Query::post::ID To get the forum id
160         * @uses bbp_is_single_forum() To check if it's a forum page
161         * @uses bbp_is_single_topic() To check if it's a topic page
162         * @uses bbp_get_topic_forum_id() To get the topic forum id
163         * @uses get_post_field() To get the post's post type
164         * @uses apply_filters() Calls 'bbp_get_forum_id' with the forum id and
165         *                        supplied forum id
166         * @return int The forum id
167         */
168        function bbp_get_forum_id( $forum_id = 0 ) {
169                global $wp_query;
170
171                $bbp = bbpress();
172
173                // Easy empty checking
174                if ( !empty( $forum_id ) && is_numeric( $forum_id ) )
175                        $bbp_forum_id = $forum_id;
176
177                // Currently inside a forum loop
178                elseif ( !empty( $bbp->forum_query->in_the_loop ) && isset( $bbp->forum_query->post->ID ) )
179                        $bbp_forum_id = $bbp->forum_query->post->ID;
180
181                // Currently viewing a forum
182                elseif ( bbp_is_single_forum() && !empty( $bbp->current_forum_id ) )
183                        $bbp_forum_id = $bbp->current_forum_id;
184
185                // Currently viewing a forum
186                elseif ( bbp_is_single_forum() && isset( $wp_query->post->ID ) )
187                        $bbp_forum_id = $wp_query->post->ID;
188
189                // Currently viewing a topic
190                elseif ( bbp_is_single_topic() )
191                        $bbp_forum_id = bbp_get_topic_forum_id();
192
193                // Fallback
194                else
195                        $bbp_forum_id = 0;
196
197                return (int) apply_filters( 'bbp_get_forum_id', (int) $bbp_forum_id, $forum_id );
198        }
199
200/**
201 * Gets a forum
202 *
203 * @since bbPress (r2787)
204 *
205 * @param int|object $forum forum id or forum object
206 * @param string $output Optional. OBJECT, ARRAY_A, or ARRAY_N. Default = OBJECT
207 * @param string $filter Optional Sanitation filter. See {@link sanitize_post()}
208 * @uses get_post() To get the forum
209 * @uses apply_filters() Calls 'bbp_get_forum' with the forum, output type and
210 *                        sanitation filter
211 * @return mixed Null if error or forum (in specified form) if success
212 */
213function bbp_get_forum( $forum, $output = OBJECT, $filter = 'raw' ) {
214
215        // Use forum ID
216        if ( empty( $forum ) || is_numeric( $forum ) )
217                $forum = bbp_get_forum_id( $forum );
218
219        // Attempt to load the forum
220        $forum = get_post( $forum, OBJECT, $filter );
221        if ( empty( $forum ) )
222                return $forum;
223
224        // Bail if post_type is not a forum
225        if ( $forum->post_type !== bbp_get_forum_post_type() )
226                return null;
227
228        // Tweak the data type to return
229        if ( $output == OBJECT ) {
230                return $forum;
231
232        } elseif ( $output == ARRAY_A ) {
233                $_forum = get_object_vars( $forum );
234                return $_forum;
235
236        } elseif ( $output == ARRAY_N ) {
237                $_forum = array_values( get_object_vars( $forum ) );
238                return $_forum;
239
240        }
241
242        return apply_filters( 'bbp_get_forum', $forum, $output, $filter );
243}
244
245/**
246 * Output the link to the forum
247 *
248 * @since bbPress (r2464)
249 *
250 * @param int $forum_id Optional. Forum id
251 * @uses bbp_get_forum_permalink() To get the permalink
252 */
253function bbp_forum_permalink( $forum_id = 0 ) {
254        echo bbp_get_forum_permalink( $forum_id );
255}
256        /**
257         * Return the link to the forum
258         *
259         * @since bbPress (r2464)
260         *
261         * @param int $forum_id Optional. Forum id
262         * @param $string $redirect_to Optional. Pass a redirect value for use with
263         *                              shortcodes and other fun things.
264         * @uses bbp_get_forum_id() To get the forum id
265         * @uses get_permalink() Get the permalink of the forum
266         * @uses apply_filters() Calls 'bbp_get_forum_permalink' with the forum
267         *                        link
268         * @return string Permanent link to forum
269         */
270        function bbp_get_forum_permalink( $forum_id = 0, $redirect_to = '' ) {
271                $forum_id = bbp_get_forum_id( $forum_id );
272
273                // Use the redirect address
274                if ( !empty( $redirect_to ) ) {
275                        $forum_permalink = esc_url_raw( $redirect_to );
276
277                // Use the topic permalink
278                } else {
279                        $forum_permalink = get_permalink( $forum_id );
280                }
281
282                return apply_filters( 'bbp_get_forum_permalink', $forum_permalink, $forum_id );
283        }
284
285/**
286 * Output the title of the forum
287 *
288 * @since bbPress (r2464)
289 *
290 * @param int $forum_id Optional. Forum id
291 * @uses bbp_get_forum_title() To get the forum title
292 */
293function bbp_forum_title( $forum_id = 0 ) {
294        echo bbp_get_forum_title( $forum_id );
295}
296        /**
297         * Return the title of the forum
298         *
299         * @since bbPress (r2464)
300         *
301         * @param int $forum_id Optional. Forum id
302         * @uses bbp_get_forum_id() To get the forum id
303         * @uses get_the_title() To get the forum title
304         * @uses apply_filters() Calls 'bbp_get_forum_title' with the title
305         * @return string Title of forum
306         */
307        function bbp_get_forum_title( $forum_id = 0 ) {
308                $forum_id = bbp_get_forum_id( $forum_id );
309                $title    = get_the_title( $forum_id );
310
311                return apply_filters( 'bbp_get_forum_title', $title, $forum_id );
312        }
313
314/**
315 * Output the forum archive title
316 *
317 * @since bbPress (r3249)
318 *
319 * @param string $title Default text to use as title
320 */
321function bbp_forum_archive_title( $title = '' ) {
322        echo bbp_get_forum_archive_title( $title );
323}
324        /**
325         * Return the forum archive title
326         *
327         * @since bbPress (r3249)
328         *
329         * @param string $title Default text to use as title
330         *
331         * @uses bbp_get_page_by_path() Check if page exists at root path
332         * @uses get_the_title() Use the page title at the root path
333         * @uses get_post_type_object() Load the post type object
334         * @uses bbp_get_forum_post_type() Get the forum post type ID
335         * @uses get_post_type_labels() Get labels for forum post type
336         * @uses apply_filters() Allow output to be manipulated
337         *
338         * @return string The forum archive title
339         */
340        function bbp_get_forum_archive_title( $title = '' ) {
341
342                // If no title was passed
343                if ( empty( $title ) ) {
344
345                        // Set root text to page title
346                        $page = bbp_get_page_by_path( bbp_get_root_slug() );
347                        if ( !empty( $page ) ) {
348                                $title = get_the_title( $page->ID );
349
350                        // Default to forum post type name label
351                        } else {
352                                $fto    = get_post_type_object( bbp_get_forum_post_type() );
353                                $title  = $fto->labels->name;
354                        }
355                }
356
357                return apply_filters( 'bbp_get_forum_archive_title', $title );
358        }
359
360/**
361 * Output the content of the forum
362 *
363 * @since bbPress (r2780)
364 *
365 * @param int $forum_id Optional. Topic id
366 * @uses bbp_get_forum_content() To get the forum content
367 */
368function bbp_forum_content( $forum_id = 0 ) {
369        echo bbp_get_forum_content( $forum_id );
370}
371        /**
372         * Return the content of the forum
373         *
374         * @since bbPress (r2780)
375         *
376         * @param int $forum_id Optional. Topic id
377         * @uses bbp_get_forum_id() To get the forum id
378         * @uses post_password_required() To check if the forum requires pass
379         * @uses get_the_password_form() To get the password form
380         * @uses get_post_field() To get the content post field
381         * @uses apply_filters() Calls 'bbp_get_forum_content' with the content
382         *                        and forum id
383         * @return string Content of the forum
384         */
385        function bbp_get_forum_content( $forum_id = 0 ) {
386                $forum_id = bbp_get_forum_id( $forum_id );
387
388                // Check if password is required
389                if ( post_password_required( $forum_id ) )
390                        return get_the_password_form();
391
392                $content = get_post_field( 'post_content', $forum_id );
393
394                return apply_filters( 'bbp_get_forum_content', $content, $forum_id );
395        }
396
397/**
398 * Allow topic rows to have adminstrative actions
399 *
400 * @since bbPress (r3653)
401 * @uses do_action()
402 * @todo Links and filter
403 */
404function bbp_forum_row_actions() {
405        do_action( 'bbp_forum_row_actions' );
406}
407
408/**
409 * Output the forums last active ID
410 *
411 * @since bbPress (r2860)
412 *
413 * @uses bbp_get_forum_last_active_id() To get the forum's last active id
414 * @param int $forum_id Optional. Forum id
415 */
416function bbp_forum_last_active_id( $forum_id = 0 ) {
417        echo bbp_get_forum_last_active_id( $forum_id );
418}
419        /**
420         * Return the forums last active ID
421         *
422         * @since bbPress (r2860)
423         *
424         * @param int $forum_id Optional. Forum id
425         * @uses bbp_get_forum_id() To get the forum id
426         * @uses get_post_meta() To get the forum's last active id
427         * @uses apply_filters() Calls 'bbp_get_forum_last_active_id' with
428         *                        the last active id and forum id
429         * @return int Forum's last active id
430         */
431        function bbp_get_forum_last_active_id( $forum_id = 0 ) {
432                $forum_id  = bbp_get_forum_id( $forum_id );
433                $active_id = get_post_meta( $forum_id, '_bbp_last_active_id', true );
434
435                return (int) apply_filters( 'bbp_get_forum_last_active_id', (int) $active_id, $forum_id );
436        }
437
438/**
439 * Output the forums last update date/time (aka freshness)
440 *
441 * @since bbPress (r2464)
442 *
443 * @uses bbp_get_forum_last_active_time() To get the forum freshness
444 * @param int $forum_id Optional. Forum id
445 */
446function bbp_forum_last_active_time( $forum_id = 0 ) {
447        echo bbp_get_forum_last_active_time( $forum_id );
448}
449        /**
450         * Return the forums last update date/time (aka freshness)
451         *
452         * @since bbPress (r2464)
453         *
454         * @param int $forum_id Optional. Forum id
455         * @uses bbp_get_forum_id() To get the forum id
456         * @uses get_post_meta() To retrieve forum last active meta
457         * @uses bbp_get_forum_last_reply_id() To get forum's last reply id
458         * @uses get_post_field() To get the post date of the reply
459         * @uses bbp_get_forum_last_topic_id() To get forum's last topic id
460         * @uses bbp_get_topic_last_active_time() To get time when the topic was
461         *                                    last active
462         * @uses bbp_convert_date() To convert the date
463         * @uses bbp_get_time_since() To get time in since format
464         * @uses apply_filters() Calls 'bbp_get_forum_last_active' with last
465         *                        active time and forum id
466         * @return string Forum last update date/time (freshness)
467         */
468        function bbp_get_forum_last_active_time( $forum_id = 0 ) {
469                $forum_id = bbp_get_forum_id( $forum_id );
470
471                $last_active = get_post_meta( $forum_id, '_bbp_last_active_time', true );
472                if ( empty( $last_active ) ) {
473                        $reply_id = bbp_get_forum_last_reply_id( $forum_id );
474                        if ( !empty( $reply_id ) ) {
475                                $last_active = get_post_field( 'post_date', $reply_id );
476                        } else {
477                                $topic_id = bbp_get_forum_last_topic_id( $forum_id );
478                                if ( !empty( $topic_id ) ) {
479                                        $last_active = bbp_get_topic_last_active_time( $topic_id );
480                                }
481                        }
482                }
483
484                $last_active = !empty( $last_active ) ? bbp_get_time_since( bbp_convert_date( $last_active ) ) : '';
485
486                return apply_filters( 'bbp_get_forum_last_active', $last_active, $forum_id );
487        }
488
489/**
490 * Output link to the most recent activity inside a forum.
491 *
492 * Outputs a complete link with attributes and content.
493 *
494 * @since bbPress (r2625)
495 *
496 * @param int $forum_id Optional. Forum id
497 * @uses bbp_get_forum_freshness_link() To get the forum freshness link
498 */
499function bbp_forum_freshness_link( $forum_id = 0) {
500        echo bbp_get_forum_freshness_link( $forum_id );
501}
502        /**
503         * Returns link to the most recent activity inside a forum.
504         *
505         * Returns a complete link with attributes and content.
506         *
507         * @since bbPress (r2625)
508         *
509         * @param int $forum_id Optional. Forum id
510         * @uses bbp_get_forum_id() To get the forum id
511         * @uses bbp_get_forum_last_active_id() To get the forum last active id
512         * @uses bbp_get_forum_last_reply_id() To get the forum last reply id
513         * @uses bbp_get_forum_last_topic_id() To get the forum last topic id
514         * @uses bbp_get_forum_last_reply_url() To get the forum last reply url
515         * @uses bbp_get_forum_last_reply_title() To get the forum last reply
516         *                                         title
517         * @uses bbp_get_forum_last_topic_permalink() To get the forum last
518         *                                             topic permalink
519         * @uses bbp_get_forum_last_topic_title() To get the forum last topic
520         *                                         title
521         * @uses bbp_get_forum_last_active_time() To get the time when the forum
522         *                                         was last active
523         * @uses apply_filters() Calls 'bbp_get_forum_freshness_link' with the
524         *                        link and forum id
525         */
526        function bbp_get_forum_freshness_link( $forum_id = 0 ) {
527                $forum_id  = bbp_get_forum_id( $forum_id );
528                $active_id = bbp_get_forum_last_active_id( $forum_id );
529
530                if ( empty( $active_id ) )
531                        $active_id = bbp_get_forum_last_reply_id( $forum_id );
532
533                if ( empty( $active_id ) )
534                        $active_id = bbp_get_forum_last_topic_id( $forum_id );
535
536                if ( bbp_is_topic( $active_id ) ) {
537                        $link_url = bbp_get_forum_last_topic_permalink( $forum_id );
538                        $title    = bbp_get_forum_last_topic_title( $forum_id );
539                } elseif ( bbp_is_reply( $active_id ) ) {
540                        $link_url = bbp_get_forum_last_reply_url( $forum_id );
541                        $title    = bbp_get_forum_last_reply_title( $forum_id );
542                }
543
544                $time_since = bbp_get_forum_last_active_time( $forum_id );
545
546                if ( !empty( $time_since ) && !empty( $link_url ) )
547                        $anchor = '<a href="' . $link_url . '" title="' . esc_attr( $title ) . '">' . $time_since . '</a>';
548                else
549                        $anchor = __( 'No Topics', 'bbpress' );
550
551                return apply_filters( 'bbp_get_forum_freshness_link', $anchor, $forum_id );
552        }
553
554/**
555 * Output parent ID of a forum, if exists
556 *
557 * @since bbPress (r3675)
558 *
559 * @param int $forum_id Forum ID
560 * @uses bbp_get_forum_parent_id() To get the forum's parent ID
561 */
562function bbp_forum_parent_id( $forum_id = 0 ) {
563        echo bbp_get_forum_parent_id( $forum_id );
564}
565        /**
566         * Return ID of forum parent, if exists
567         *
568         * @since bbPress (r3675)
569         *
570         * @param int $forum_id Optional. Forum id
571         * @uses bbp_get_forum_id() To get the forum id
572         * @uses get_post_field() To get the forum parent
573         * @uses apply_filters() Calls 'bbp_get_forum_parent' with the parent & forum id
574         * @return int Forum parent
575         */
576        function bbp_get_forum_parent_id( $forum_id = 0 ) {
577                $forum_id  = bbp_get_forum_id( $forum_id );
578                $parent_id = get_post_field( 'post_parent', $forum_id );
579
580                return (int) apply_filters( 'bbp_get_forum_parent_id', (int) $parent_id, $forum_id );
581        }
582
583/**
584 * Return array of parent forums
585 *
586 * @since bbPress (r2625)
587 *
588 * @param int $forum_id Optional. Forum id
589 * @uses bbp_get_forum_id() To get the forum id
590 * @uses bbp_get_forum() To get the forum
591 * @uses apply_filters() Calls 'bbp_get_forum_ancestors' with the ancestors
592 *                        and forum id
593 * @return array Forum ancestors
594 */
595function bbp_get_forum_ancestors( $forum_id = 0 ) {
596        $forum_id  = bbp_get_forum_id( $forum_id );
597        $ancestors = array();
598        $forum     = bbp_get_forum( $forum_id );
599
600        if ( !empty( $forum ) ) {
601                while ( 0 !== (int) $forum->post_parent ) {
602                        $ancestors[] = $forum->post_parent;
603                        $forum       = bbp_get_forum( $forum->post_parent );
604                }
605        }
606
607        return apply_filters( 'bbp_get_forum_ancestors', $ancestors, $forum_id );
608}
609
610/**
611 * Return subforums of given forum
612 *
613 * @since bbPress (r2747)
614 *
615 * @param mixed $args All the arguments supported by {@link WP_Query}
616 * @uses bbp_get_forum_id() To get the forum id
617 * @uses current_user_can() To check if the current user is capable of
618 *                           reading private forums
619 * @uses get_posts() To get the subforums
620 * @uses apply_filters() Calls 'bbp_forum_get_subforums' with the subforums
621 *                        and the args
622 * @return mixed false if none, array of subs if yes
623 */
624function bbp_forum_get_subforums( $args = '' ) {
625
626        // Use passed integer as post_parent
627        if ( is_numeric( $args ) )
628                $args = array( 'post_parent' => $args );
629
630        // Setup possible post__not_in array
631        $post_stati[] = bbp_get_public_status_id();
632
633        // Super admin get whitelisted post statuses
634        if ( is_super_admin() ) {
635                $post_stati = array( bbp_get_public_status_id(), bbp_get_private_status_id(), bbp_get_hidden_status_id() );
636
637        // Not a super admin, so check caps
638        } else {
639
640                // Check if user can read private forums
641                if ( current_user_can( 'read_private_forums' ) )
642                        $post_stati[] = bbp_get_private_status_id();
643
644                // Check if user can read hidden forums
645                if ( current_user_can( 'read_hidden_forums' ) )
646                        $post_stati[] = bbp_get_hidden_status_id();
647        }
648
649        $default = array(
650                'post_parent'    => 0,
651                'post_type'      => bbp_get_forum_post_type(),
652                'post_status'    => implode( ',', $post_stati ),
653                'posts_per_page' => get_option( '_bbp_forums_per_page', 50 ),
654                'orderby'        => 'menu_order',
655                'order'          => 'ASC'
656        );
657
658        $r = wp_parse_args( $args, $default );
659        $r['post_parent'] = bbp_get_forum_id( $r['post_parent'] );
660
661        // No forum passed
662        $sub_forums = !empty( $r['post_parent'] ) ? get_posts( $r ) : '';
663
664        return apply_filters( 'bbp_forum_get_sub_forums', (array) $sub_forums, $args );
665}
666
667/**
668 * Output a list of forums (can be used to list subforums)
669 *
670 * @param mixed $args The function supports these args:
671 *  - before: To put before the output. Defaults to '<ul class="bbp-forums">'
672 *  - after: To put after the output. Defaults to '</ul>'
673 *  - link_before: To put before every link. Defaults to '<li class="bbp-forum">'
674 *  - link_after: To put after every link. Defaults to '</li>'
675 *  - separator: Separator. Defaults to ', '
676 *  - forum_id: Forum id. Defaults to ''
677 *  - show_topic_count - To show forum topic count or not. Defaults to true
678 *  - show_reply_count - To show forum reply count or not. Defaults to true
679 * @uses bbp_forum_get_subforums() To check if the forum has subforums or not
680 * @uses bbp_get_forum_permalink() To get forum permalink
681 * @uses bbp_get_forum_title() To get forum title
682 * @uses bbp_is_forum_category() To check if a forum is a category
683 * @uses bbp_get_forum_topic_count() To get forum topic count
684 * @uses bbp_get_forum_reply_count() To get forum reply count
685 */
686function bbp_list_forums( $args = '' ) {
687
688        // Define used variables
689        $output = $sub_forums = $topic_count = $reply_count = $counts = '';
690        $i = 0;
691        $count = array();
692
693        // Defaults and arguments
694        $defaults = array (
695                'before'            => '<ul class="bbp-forums-list">',
696                'after'             => '</ul>',
697                'link_before'       => '<li class="bbp-forum">',
698                'link_after'        => '</li>',
699                'count_before'      => ' (',
700                'count_after'       => ')',
701                'count_sep'         => ', ',
702                'separator'         => ', ',
703                'forum_id'          => '',
704                'show_topic_count'  => true,
705                'show_reply_count'  => true,
706        );
707        $r = wp_parse_args( $args, $defaults );
708        extract( $r, EXTR_SKIP );
709
710        // Bail if there are no subforums
711        if ( !bbp_get_forum_subforum_count( $forum_id ) )
712                return;
713
714        // Loop through forums and create a list
715        $sub_forums = bbp_forum_get_subforums( $forum_id );
716        if ( !empty( $sub_forums ) ) {
717
718                // Total count (for separator)
719                $total_subs = count( $sub_forums );
720                foreach ( $sub_forums as $sub_forum ) {
721                        $i++; // Separator count
722
723                        // Get forum details
724                        $count     = array();
725                        $show_sep  = $total_subs > $i ? $separator : '';
726                        $permalink = bbp_get_forum_permalink( $sub_forum->ID );
727                        $title     = bbp_get_forum_title( $sub_forum->ID );
728
729                        // Show topic count
730                        if ( !empty( $show_topic_count ) && !bbp_is_forum_category( $sub_forum->ID ) ) {
731                                $count['topic'] = bbp_get_forum_topic_count( $sub_forum->ID );
732                        }
733
734                        // Show reply count
735                        if ( !empty( $show_reply_count ) && !bbp_is_forum_category( $sub_forum->ID ) ) {
736                                $count['reply'] = bbp_get_forum_reply_count( $sub_forum->ID );
737                        }
738
739                        // Counts to show
740                        if ( !empty( $count ) ) {
741                                $counts = $count_before . implode( $count_sep, $count ) . $count_after;
742                        }
743
744                        // Build this sub forums link
745                        $output .= $link_before . '<a href="' . $permalink . '" class="bbp-forum-link">' . $title . $counts . '</a>' . $show_sep . $link_after;
746                }
747
748                // Output the list
749                echo apply_filters( 'bbp_list_forums', $before . $output . $after, $args );
750        }
751}
752
753/** Forum Last Topic **********************************************************/
754
755/**
756 * Output the forum's last topic id
757 *
758 * @since bbPress (r2464)
759 *
760 * @uses bbp_get_forum_last_topic_id() To get the forum's last topic id
761 * @param int $forum_id Optional. Forum id
762 */
763function bbp_forum_last_topic_id( $forum_id = 0 ) {
764        echo bbp_get_forum_last_topic_id( $forum_id );
765}
766        /**
767         * Return the forum's last topic id
768         *
769         * @since bbPress (r2464)
770         *
771         * @param int $forum_id Optional. Forum id
772         * @uses bbp_get_forum_id() To get the forum id
773         * @uses get_post_meta() To get the forum's last topic id
774         * @uses apply_filters() Calls 'bbp_get_forum_last_topic_id' with the
775         *                        forum and topic id
776         * @return int Forum's last topic id
777         */
778        function bbp_get_forum_last_topic_id( $forum_id = 0 ) {
779                $forum_id = bbp_get_forum_id( $forum_id );
780                $topic_id = get_post_meta( $forum_id, '_bbp_last_topic_id', true );
781
782                return (int) apply_filters( 'bbp_get_forum_last_topic_id', (int) $topic_id, $forum_id );
783        }
784
785/**
786 * Output the title of the last topic inside a forum
787 *
788 * @since bbPress (r2625)
789 *
790 * @param int $forum_id Optional. Forum id
791 * @uses bbp_get_forum_last_topic_title() To get the forum's last topic's title
792 */
793function bbp_forum_last_topic_title( $forum_id = 0 ) {
794        echo bbp_get_forum_last_topic_title( $forum_id );
795}
796        /**
797         * Return the title of the last topic inside a forum
798         *
799         * @since bbPress (r2625)
800         *
801         * @param int $forum_id Optional. Forum id
802         * @uses bbp_get_forum_id() To get the forum id
803         * @uses bbp_get_forum_last_topic_id() To get the forum's last topic id
804         * @uses bbp_get_topic_title() To get the topic's title
805         * @uses apply_filters() Calls 'bbp_get_forum_last_topic_title' with the
806         *                        topic title and forum id
807         * @return string Forum's last topic's title
808         */
809        function bbp_get_forum_last_topic_title( $forum_id = 0 ) {
810                $forum_id = bbp_get_forum_id( $forum_id );
811                return apply_filters( 'bbp_get_forum_last_topic_title', bbp_get_topic_title( bbp_get_forum_last_topic_id( $forum_id ) ), $forum_id );
812        }
813
814/**
815 * Output the link to the last topic in a forum
816 *
817 * @since bbPress (r2464)
818 *
819 * @param int $forum_id Optional. Forum id
820 * @uses bbp_get_forum_last_topic_permalink() To get the forum's last topic's
821 *                                             permanent link
822 */
823function bbp_forum_last_topic_permalink( $forum_id = 0 ) {
824        echo bbp_get_forum_last_topic_permalink( $forum_id );
825}
826        /**
827         * Return the link to the last topic in a forum
828         *
829         * @since bbPress (r2464)
830         *
831         * @param int $forum_id Optional. Forum id
832         * @uses bbp_get_forum_id() To get the forum id
833         * @uses bbp_get_forum_last_topic_id() To get the forum's last topic id
834         * @uses bbp_get_topic_permalink() To get the topic's permalink
835         * @uses apply_filters() Calls 'bbp_get_forum_last_topic_permalink' with
836         *                        the topic link and forum id
837         * @return string Permanent link to topic
838         */
839        function bbp_get_forum_last_topic_permalink( $forum_id = 0 ) {
840                $forum_id = bbp_get_forum_id( $forum_id );
841                return apply_filters( 'bbp_get_forum_last_topic_permalink', bbp_get_topic_permalink( bbp_get_forum_last_topic_id( $forum_id ) ), $forum_id );
842        }
843
844/**
845 * Return the author ID of the last topic of a forum
846 *
847 * @since bbPress (r2625)
848 *
849 * @param int $forum_id Optional. Forum id
850 * @uses bbp_get_forum_id() To get the forum id
851 * @uses bbp_get_forum_last_topic_id() To get the forum's last topic id
852 * @uses bbp_get_topic_author_id() To get the topic's author id
853 * @uses apply_filters() Calls 'bbp_get_forum_last_topic_author' with the author
854 *                        id and forum id
855 * @return int Forum's last topic's author id
856 */
857function bbp_get_forum_last_topic_author_id( $forum_id = 0 ) {
858        $forum_id  = bbp_get_forum_id( $forum_id );
859        $author_id = bbp_get_topic_author_id( bbp_get_forum_last_topic_id( $forum_id ) );
860        return (int) apply_filters( 'bbp_get_forum_last_topic_author_id', (int) $author_id, $forum_id );
861}
862
863/**
864 * Output link to author of last topic of forum
865 *
866 * @since bbPress (r2625)
867 *
868 * @param int $forum_id Optional. Forum id
869 * @uses bbp_get_forum_last_topic_author_link() To get the forum's last topic's
870 *                                               author link
871 */
872function bbp_forum_last_topic_author_link( $forum_id = 0 ) {
873        echo bbp_get_forum_last_topic_author_link( $forum_id );
874}
875        /**
876         * Return link to author of last topic of forum
877         *
878         * @since bbPress (r2625)
879         *
880         * @param int $forum_id Optional. Forum id
881         * @uses bbp_get_forum_id() To get the forum id
882         * @uses bbp_get_forum_last_topic_author_id() To get the forum's last
883         *                                             topic's author id
884         * @uses bbp_get_user_profile_link() To get the author's profile link
885         * @uses apply_filters() Calls 'bbp_get_forum_last_topic_author_link'
886         *                        with the author link and forum id
887         * @return string Forum's last topic's author link
888         */
889        function bbp_get_forum_last_topic_author_link( $forum_id = 0 ) {
890                $forum_id    = bbp_get_forum_id( $forum_id );
891                $author_id   = bbp_get_forum_last_topic_author_id( $forum_id );
892                $author_link = bbp_get_user_profile_link( $author_id );
893                return apply_filters( 'bbp_get_forum_last_topic_author_link', $author_link, $forum_id );
894        }
895
896/** Forum Last Reply **********************************************************/
897
898/**
899 * Output the forums last reply id
900 *
901 * @since bbPress (r2464)
902 *
903 * @uses bbp_get_forum_last_reply_id() To get the forum's last reply id
904 * @param int $forum_id Optional. Forum id
905 */
906function bbp_forum_last_reply_id( $forum_id = 0 ) {
907        echo bbp_get_forum_last_reply_id( $forum_id );
908}
909        /**
910         * Return the forums last reply id
911         *
912         * @since bbPress (r2464)
913         *
914         * @param int $forum_id Optional. Forum id
915         * @uses bbp_get_forum_id() To get the forum id
916         * @uses get_post_meta() To get the forum's last reply id
917         * @uses bbp_get_forum_last_topic_id() To get the forum's last topic id
918         * @uses apply_filters() Calls 'bbp_get_forum_last_reply_id' with
919         *                        the last reply id and forum id
920         * @return int Forum's last reply id
921         */
922        function bbp_get_forum_last_reply_id( $forum_id = 0 ) {
923                $forum_id = bbp_get_forum_id( $forum_id );
924                $reply_id = get_post_meta( $forum_id, '_bbp_last_reply_id', true );
925
926                if ( empty( $reply_id ) )
927                        $reply_id = bbp_get_forum_last_topic_id( $forum_id );
928
929                return (int) apply_filters( 'bbp_get_forum_last_reply_id', (int) $reply_id, $forum_id );
930        }
931
932/**
933 * Output the title of the last reply inside a forum
934 *
935 * @param int $forum_id Optional. Forum id
936 * @uses bbp_get_forum_last_reply_title() To get the forum's last reply's title
937 */
938function bbp_forum_last_reply_title( $forum_id = 0 ) {
939        echo bbp_get_forum_last_reply_title( $forum_id );
940}
941        /**
942         * Return the title of the last reply inside a forum
943         *
944         * @param int $forum_id Optional. Forum id
945         * @uses bbp_get_forum_id() To get the forum id
946         * @uses bbp_get_forum_last_reply_id() To get the forum's last reply id
947         * @uses bbp_get_reply_title() To get the reply title
948         * @uses apply_filters() Calls 'bbp_get_forum_last_reply_title' with the
949         *                        reply title and forum id
950         * @return string
951         */
952        function bbp_get_forum_last_reply_title( $forum_id = 0 ) {
953                $forum_id = bbp_get_forum_id( $forum_id );
954                return apply_filters( 'bbp_get_forum_last_reply_title', bbp_get_reply_title( bbp_get_forum_last_reply_id( $forum_id ) ), $forum_id );
955        }
956
957/**
958 * Output the link to the last reply in a forum
959 *
960 * @since bbPress (r2464)
961 *
962 * @param int $forum_id Optional. Forum id
963 * @uses bbp_get_forum_last_reply_permalink() To get the forum last reply link
964 */
965function bbp_forum_last_reply_permalink( $forum_id = 0 ) {
966        echo bbp_get_forum_last_reply_permalink( $forum_id );
967}
968        /**
969         * Return the link to the last reply in a forum
970         *
971         * @since bbPress (r2464)
972         *
973         * @param int $forum_id Optional. Forum id
974         * @uses bbp_get_forum_id() To get the forum id
975         * @uses bbp_get_forum_last_reply_id() To get the forum's last reply id
976         * @uses bbp_get_reply_permalink() To get the reply permalink
977         * @uses apply_filters() Calls 'bbp_get_forum_last_reply_permalink' with
978         *                        the reply link and forum id
979         * @return string Permanent link to the forum's last reply
980         */
981        function bbp_get_forum_last_reply_permalink( $forum_id = 0 ) {
982                $forum_id = bbp_get_forum_id( $forum_id );
983                return apply_filters( 'bbp_get_forum_last_reply_permalink', bbp_get_reply_permalink( bbp_get_forum_last_reply_id( $forum_id ) ), $forum_id );
984        }
985
986/**
987 * Output the url to the last reply in a forum
988 *
989 * @since bbPress (r2683)
990 *
991 * @param int $forum_id Optional. Forum id
992 * @uses bbp_get_forum_last_reply_url() To get the forum last reply url
993 */
994function bbp_forum_last_reply_url( $forum_id = 0 ) {
995        echo bbp_get_forum_last_reply_url( $forum_id );
996}
997        /**
998         * Return the url to the last reply in a forum
999         *
1000         * @since bbPress (r2683)
1001         *
1002         * @param int $forum_id Optional. Forum id
1003         * @uses bbp_get_forum_id() To get the forum id
1004         * @uses bbp_get_forum_last_reply_id() To get the forum's last reply id
1005         * @uses bbp_get_reply_url() To get the reply url
1006         * @uses bbp_get_forum_last_topic_permalink() To get the forum's last
1007         *                                             topic's permalink
1008         * @uses apply_filters() Calls 'bbp_get_forum_last_reply_url' with the
1009         *                        reply url and forum id
1010         * @return string Paginated URL to latest reply
1011         */
1012        function bbp_get_forum_last_reply_url( $forum_id = 0 ) {
1013                $forum_id = bbp_get_forum_id( $forum_id );
1014
1015                // If forum has replies, get the last reply and use its url
1016                $reply_id = bbp_get_forum_last_reply_id( $forum_id );
1017                if ( !empty( $reply_id ) ) {
1018                        $reply_url = bbp_get_reply_url( $reply_id );
1019
1020                // No replies, so look for topics and use last permalink
1021                } else {
1022                        $reply_url = bbp_get_forum_last_topic_permalink( $forum_id );
1023
1024                        // No topics either, so set $reply_url as empty string
1025                        if ( empty( $reply_url ) ) {
1026                                $reply_url = '';
1027                        }
1028                }
1029
1030                // Filter and return
1031                return apply_filters( 'bbp_get_forum_last_reply_url', $reply_url, $forum_id );
1032        }
1033
1034/**
1035 * Output author ID of last reply of forum
1036 *
1037 * @since bbPress (r2625)
1038 *
1039 * @param int $forum_id Optional. Forum id
1040 * @uses bbp_get_forum_last_reply_author_id() To get the forum's last reply
1041 *                                             author id
1042 */
1043function bbp_forum_last_reply_author_id( $forum_id = 0 ) {
1044        echo bbp_get_forum_last_reply_author_id( $forum_id );
1045}
1046        /**
1047         * Return author ID of last reply of forum
1048         *
1049         * @since bbPress (r2625)
1050         *
1051         * @param int $forum_id Optional. Forum id
1052         * @uses bbp_get_forum_id() To get the forum id
1053         * @uses bbp_get_forum_last_reply_author_id() To get the forum's last
1054         *                                             reply's author id
1055         * @uses bbp_get_reply_author_id() To get the reply's author id
1056         * @uses apply_filters() Calls 'bbp_get_forum_last_reply_author_id' with
1057         *                        the author id and forum id
1058         * @return int Forum's last reply author id
1059         */
1060        function bbp_get_forum_last_reply_author_id( $forum_id = 0 ) {
1061                $forum_id  = bbp_get_forum_id( $forum_id );
1062                $author_id = bbp_get_reply_author_id( bbp_get_forum_last_reply_id( $forum_id ) );
1063                return apply_filters( 'bbp_get_forum_last_reply_author_id', $author_id, $forum_id );
1064        }
1065
1066/**
1067 * Output link to author of last reply of forum
1068 *
1069 * @since bbPress (r2625)
1070 *
1071 * @param int $forum_id Optional. Forum id
1072 * @uses bbp_get_forum_last_reply_author_link() To get the forum's last reply's
1073 *                                               author link
1074 */
1075function bbp_forum_last_reply_author_link( $forum_id = 0 ) {
1076        echo bbp_get_forum_last_reply_author_link( $forum_id );
1077}
1078        /**
1079         * Return link to author of last reply of forum
1080         *
1081         * @since bbPress (r2625)
1082         *
1083         * @param int $forum_id Optional. Forum id
1084         * @uses bbp_get_forum_id() To get the forum id
1085         * @uses bbp_get_forum_last_reply_author_id() To get the forum's last
1086         *                                             reply's author id
1087         * @uses bbp_get_user_profile_link() To get the reply's author's profile
1088         *                                    link
1089         * @uses apply_filters() Calls 'bbp_get_forum_last_reply_author_link'
1090         *                        with the author link and forum id
1091         * @return string Link to author of last reply of forum
1092         */
1093        function bbp_get_forum_last_reply_author_link( $forum_id = 0 ) {
1094                $forum_id    = bbp_get_forum_id( $forum_id );
1095                $author_id   = bbp_get_forum_last_reply_author_id( $forum_id );
1096                $author_link = bbp_get_user_profile_link( $author_id );
1097                return apply_filters( 'bbp_get_forum_last_reply_author_link', $author_link, $forum_id );
1098        }
1099
1100/** Forum Counts **************************************************************/
1101
1102/**
1103 * Output the topics link of the forum
1104 *
1105 * @since bbPress (r2883)
1106 *
1107 * @param int $forum_id Optional. Topic id
1108 * @uses bbp_get_forum_topics_link() To get the forum topics link
1109 */
1110function bbp_forum_topics_link( $forum_id = 0 ) {
1111        echo bbp_get_forum_topics_link( $forum_id );
1112}
1113
1114        /**
1115         * Return the topics link of the forum
1116         *
1117         * @since bbPress (r2883)
1118         *
1119         * @param int $forum_id Optional. Topic id
1120         * @uses bbp_get_forum_id() To get the forum id
1121         * @uses bbp_get_forum() To get the forum
1122         * @uses bbp_get_forum_topic_count() To get the forum topic count
1123         * @uses bbp_get_forum_permalink() To get the forum permalink
1124         * @uses remove_query_arg() To remove args from the url
1125         * @uses bbp_get_forum_topic_count_hidden() To get the forum hidden
1126         *                                           topic count
1127         * @uses current_user_can() To check if the current user can edit others
1128         *                           topics
1129         * @uses add_query_arg() To add custom args to the url
1130         * @uses apply_filters() Calls 'bbp_get_forum_topics_link' with the
1131         *                        topics link and forum id
1132         */
1133        function bbp_get_forum_topics_link( $forum_id = 0 ) {
1134
1135                $forum    = bbp_get_forum( $forum_id );
1136                $forum_id = $forum->ID;
1137                $topics   = bbp_get_forum_topic_count( $forum_id );
1138                $topics   = sprintf( _n( '%s topic', '%s topics', $topics, 'bbpress' ), $topics );
1139                $retval   = '';
1140
1141                // First link never has view=all
1142                if ( bbp_get_view_all( 'edit_others_topics' ) )
1143                        $retval .= "<a href='" . esc_url( bbp_remove_view_all( bbp_get_forum_permalink( $forum_id ) ) ) . "'>$topics</a>";
1144                else
1145                        $retval .= $topics;
1146
1147                // Get deleted topics
1148                $deleted = bbp_get_forum_topic_count_hidden( $forum_id );
1149
1150                // This forum has hidden topics
1151                if ( !empty( $deleted ) && current_user_can( 'edit_others_topics' ) ) {
1152
1153                        // Extra text
1154                        $extra = sprintf( __( ' (+ %d hidden)', 'bbpress' ), $deleted );
1155
1156                        // No link
1157                        if ( bbp_get_view_all() ) {
1158                                $retval .= " $extra";
1159
1160                        // Link
1161                        } else {
1162                                $retval .= " <a href='" . esc_url( bbp_add_view_all( bbp_get_forum_permalink( $forum_id ), true ) ) . "'>$extra</a>";
1163                        }
1164                }
1165
1166                return apply_filters( 'bbp_get_forum_topics_link', $retval, $forum_id );
1167        }
1168
1169/**
1170 * Output total sub-forum count of a forum
1171 *
1172 * @since bbPress (r2464)
1173 *
1174 * @uses bbp_get_forum_subforum_count() To get the forum's subforum count
1175 * @param int $forum_id Optional. Forum id to check
1176 */
1177function bbp_forum_subforum_count( $forum_id = 0 ) {
1178        echo bbp_get_forum_subforum_count( $forum_id );
1179}
1180        /**
1181         * Return total subforum count of a forum
1182         *
1183         * @since bbPress (r2464)
1184         *
1185         * @param int $forum_id Optional. Forum id
1186         * @uses bbp_get_forum_id() To get the forum id
1187         * @uses get_post_meta() To get the subforum count
1188         * @uses apply_filters() Calls 'bbp_get_forum_subforum_count' with the
1189         *                        subforum count and forum id
1190         * @return int Forum's subforum count
1191         */
1192        function bbp_get_forum_subforum_count( $forum_id = 0 ) {
1193                $forum_id    = bbp_get_forum_id( $forum_id );
1194                $forum_count = get_post_meta( $forum_id, '_bbp_forum_subforum_count', true );
1195
1196                return (int) apply_filters( 'bbp_get_forum_subforum_count', (int) $forum_count, $forum_id );
1197        }
1198
1199/**
1200 * Output total topic count of a forum
1201 *
1202 * @since bbPress (r2464)
1203 *
1204 * @param int $forum_id Optional. Forum id
1205 * @param bool $total_count Optional. To get the total count or normal count?
1206 * @uses bbp_get_forum_topic_count() To get the forum topic count
1207 */
1208function bbp_forum_topic_count( $forum_id = 0, $total_count = true ) {
1209        echo bbp_get_forum_topic_count( $forum_id, $total_count );
1210}
1211        /**
1212         * Return total topic count of a forum
1213         *
1214         * @since bbPress (r2464)
1215         *
1216         * @param int $forum_id Optional. Forum id
1217         * @param bool $total_count Optional. To get the total count or normal
1218         *                           count? Defaults to total.
1219         * @uses bbp_get_forum_id() To get the forum id
1220         * @uses get_post_meta() To get the forum topic count
1221         * @uses apply_filters() Calls 'bbp_get_forum_topic_count' with the
1222         *                        topic count and forum id
1223         * @return int Forum topic count
1224         */
1225        function bbp_get_forum_topic_count( $forum_id = 0, $total_count = true ) {
1226                $forum_id = bbp_get_forum_id( $forum_id );
1227                $topics   = get_post_meta( $forum_id, empty( $total_count ) ? '_bbp_topic_count' : '_bbp_total_topic_count', true );
1228
1229                return (int) apply_filters( 'bbp_get_forum_topic_count', (int) $topics, $forum_id );
1230        }
1231
1232/**
1233 * Output total reply count of a forum
1234 *
1235 * @since bbPress (r2464)
1236 *
1237 * @param int $forum_id Optional. Forum id
1238 * @param bool $total_count Optional. To get the total count or normal count?
1239 * @uses bbp_get_forum_reply_count() To get the forum reply count
1240 */
1241function bbp_forum_reply_count( $forum_id = 0, $total_count = true ) {
1242        echo bbp_get_forum_reply_count( $forum_id, $total_count );
1243}
1244        /**
1245         * Return total post count of a forum
1246         *
1247         * @since bbPress (r2464)
1248         *
1249         * @param int $forum_id Optional. Forum id
1250         * @param bool $total_count Optional. To get the total count or normal
1251         *                           count?
1252         * @uses bbp_get_forum_id() To get the forum id
1253         * @uses get_post_meta() To get the forum reply count
1254         * @uses apply_filters() Calls 'bbp_get_forum_reply_count' with the
1255         *                        reply count and forum id
1256         * @return int Forum reply count
1257         */
1258        function bbp_get_forum_reply_count( $forum_id = 0, $total_count = true ) {
1259                $forum_id = bbp_get_forum_id( $forum_id );
1260                $replies  = get_post_meta( $forum_id, empty( $total_count ) ? '_bbp_reply_count' : '_bbp_total_reply_count', true );
1261
1262                return (int) apply_filters( 'bbp_get_forum_reply_count', (int) $replies, $forum_id );
1263        }
1264
1265/**
1266 * Output total post count of a forum
1267 *
1268 * @since bbPress (r2954)
1269 *
1270 * @param int $forum_id Optional. Forum id
1271 * @param bool $total_count Optional. To get the total count or normal count?
1272 * @uses bbp_get_forum_post_count() To get the forum post count
1273 */
1274function bbp_forum_post_count( $forum_id = 0, $total_count = true ) {
1275        echo bbp_get_forum_post_count( $forum_id, $total_count );
1276}
1277        /**
1278         * Return total post count of a forum
1279         *
1280         * @since bbPress (r2954)
1281         *
1282         * @param int $forum_id Optional. Forum id
1283         * @param bool $total_count Optional. To get the total count or normal
1284         *                           count?
1285         * @uses bbp_get_forum_id() To get the forum id
1286         * @uses get_post_meta() To get the forum post count
1287         * @uses apply_filters() Calls 'bbp_get_forum_post_count' with the
1288         *                        post count and forum id
1289         * @return int Forum post count
1290         */
1291        function bbp_get_forum_post_count( $forum_id = 0, $total_count = true ) {
1292                $forum_id = bbp_get_forum_id( $forum_id );
1293                $topics   = bbp_get_forum_topic_count( $forum_id, $total_count );
1294                $replies  = get_post_meta( $forum_id, empty( $total_count ) ? '_bbp_reply_count' : '_bbp_total_reply_count', true );
1295
1296                return (int) apply_filters( 'bbp_get_forum_post_count', (int) $replies + (int) $topics, $forum_id );
1297        }
1298
1299/**
1300 * Output total hidden topic count of a forum (hidden includes trashed and
1301 * spammed topics)
1302 *
1303 * @since bbPress (r2883)
1304 *
1305 * @param int $forum_id Optional. Topic id
1306 * @uses bbp_get_forum_topic_count_hidden() To get the forum hidden topic count
1307 */
1308function bbp_forum_topic_count_hidden( $forum_id = 0 ) {
1309        echo bbp_get_forum_topic_count_hidden( $forum_id );
1310}
1311        /**
1312         * Return total hidden topic count of a forum (hidden includes trashed
1313         * and spammed topics)
1314         *
1315         * @since bbPress (r2883)
1316         *
1317         * @param int $forum_id Optional. Topic id
1318         * @uses bbp_get_forum_id() To get the forum id
1319         * @uses get_post_meta() To get the hidden topic count
1320         * @uses apply_filters() Calls 'bbp_get_forum_topic_count_hidden' with
1321         *                        the hidden topic count and forum id
1322         * @return int Topic hidden topic count
1323         */
1324        function bbp_get_forum_topic_count_hidden( $forum_id = 0 ) {
1325                $forum_id = bbp_get_forum_id( $forum_id );
1326                $topics   = get_post_meta( $forum_id, '_bbp_topic_count_hidden', true );
1327
1328                return (int) apply_filters( 'bbp_get_forum_topic_count_hidden', (int) $topics, $forum_id );
1329        }
1330
1331/**
1332 * Output the status of the forum
1333 *
1334 * @since bbPress (r2667)
1335 *
1336 * @param int $forum_id Optional. Forum id
1337 * @uses bbp_get_forum_status() To get the forum status
1338 */
1339function bbp_forum_status( $forum_id = 0 ) {
1340        echo bbp_get_forum_status( $forum_id );
1341}
1342        /**
1343         * Return the status of the forum
1344         *
1345         * @since bbPress (r2667)
1346         *
1347         * @param int $forum_id Optional. Forum id
1348         * @uses bbp_get_forum_id() To get the forum id
1349         * @uses get_post_status() To get the forum's status
1350         * @uses apply_filters() Calls 'bbp_get_forum_status' with the status
1351         *                        and forum id
1352         * @return string Status of forum
1353         */
1354        function bbp_get_forum_status( $forum_id = 0 ) {
1355                $forum_id = bbp_get_forum_id( $forum_id );
1356                $status   = get_post_meta( $forum_id, '_bbp_status', true );
1357                if ( empty( $status ) )
1358                        $status = 'open';
1359
1360                return apply_filters( 'bbp_get_forum_status', $status, $forum_id );
1361        }
1362
1363/**
1364 * Output the visibility of the forum
1365 *
1366 * @since bbPress (r2997)
1367 *
1368 * @param int $forum_id Optional. Forum id
1369 * @uses bbp_get_forum_visibility() To get the forum visibility
1370 */
1371function bbp_forum_visibility( $forum_id = 0 ) {
1372        echo bbp_get_forum_visibility( $forum_id );
1373}
1374        /**
1375         * Return the visibility of the forum
1376         *
1377         * @since bbPress (r2997)
1378         *
1379         * @param int $forum_id Optional. Forum id
1380         * @uses bbp_get_forum_id() To get the forum id
1381         * @uses get_post_visibility() To get the forum's visibility
1382         * @uses apply_filters() Calls 'bbp_get_forum_visibility' with the visibility
1383         *                        and forum id
1384         * @return string Status of forum
1385         */
1386        function bbp_get_forum_visibility( $forum_id = 0 ) {
1387                $forum_id = bbp_get_forum_id( $forum_id );
1388
1389                return apply_filters( 'bbp_get_forum_visibility', get_post_status( $forum_id ), $forum_id );
1390        }
1391
1392/**
1393 * Output the type of the forum
1394 *
1395 * @since bbPress (r3563)
1396 *
1397 * @param int $forum_id Optional. Forum id
1398 * @uses bbp_get_forum_type() To get the forum type
1399 */
1400function bbp_forum_type( $forum_id = 0 ) {
1401        echo bbp_get_forum_type( $forum_id );
1402}
1403        /**
1404         * Return the type of forum (category/forum/etc...)
1405         *
1406         * @since bbPress (r3563)
1407         *
1408         * @param int $forum_id Optional. Forum id
1409         * @uses get_post_meta() To get the forum category meta
1410         * @return bool Whether the forum is a category or not
1411         */
1412        function bbp_get_forum_type( $forum_id = 0 ) {
1413                $forum_id = bbp_get_forum_id( $forum_id );
1414                $retval   = get_post_meta( $forum_id, '_bbp_forum_type', true );
1415                if ( empty( $retval ) )
1416                        $retval = 'forum';
1417
1418                return apply_filters( 'bbp_get_forum_type', $retval, $forum_id );
1419        }
1420
1421/**
1422 * Is the forum a category?
1423 *
1424 * @since bbPress (r2746)
1425 *
1426 * @param int $forum_id Optional. Forum id
1427 * @uses bbp_get_forum_type() To get the forum type
1428 * @return bool Whether the forum is a category or not
1429 */
1430function bbp_is_forum_category( $forum_id = 0 ) {
1431        $forum_id = bbp_get_forum_id( $forum_id );
1432        $type     = bbp_get_forum_type( $forum_id );
1433        $retval   = ( !empty( $type ) && 'category' == $type );
1434
1435        return (bool) apply_filters( 'bbp_is_forum_category', (bool) $retval, $forum_id );
1436}
1437
1438/**
1439 * Is the forum open?
1440 *
1441 * @since bbPress (r2746)
1442 * @param int $forum_id Optional. Forum id
1443 *
1444 * @param int $forum_id Optional. Forum id
1445 * @uses bbp_is_forum_closed() To check if the forum is closed or not
1446 * @return bool Whether the forum is open or not
1447 */
1448function bbp_is_forum_open( $forum_id = 0 ) {
1449        return !bbp_is_forum_closed( $forum_id );
1450}
1451
1452        /**
1453         * Is the forum closed?
1454         *
1455         * @since bbPress (r2746)
1456         *
1457         * @param int $forum_id Optional. Forum id
1458         * @param bool $check_ancestors Check if the ancestors are closed (only
1459         *                               if they're a category)
1460         * @uses bbp_get_forum_status() To get the forum status
1461         * @uses bbp_get_forum_ancestors() To get the forum ancestors
1462         * @uses bbp_is_forum_category() To check if the forum is a category
1463         * @uses bbp_is_forum_closed() To check if the forum is closed
1464         * @return bool True if closed, false if not
1465         */
1466        function bbp_is_forum_closed( $forum_id = 0, $check_ancestors = true ) {
1467
1468                $forum_id = bbp_get_forum_id( $forum_id );
1469                $retval    = ( bbp_get_closed_status_id() == bbp_get_forum_status( $forum_id ) );
1470
1471                if ( !empty( $check_ancestors ) ) {
1472                        $ancestors = bbp_get_forum_ancestors( $forum_id );
1473
1474                        foreach ( (array) $ancestors as $ancestor ) {
1475                                if ( bbp_is_forum_category( $ancestor, false ) && bbp_is_forum_closed( $ancestor, false ) ) {
1476                                        $retval = true;
1477                                }
1478                        }
1479                }
1480
1481                return (bool) apply_filters( 'bbp_is_forum_closed', (bool) $retval, $forum_id, $check_ancestors );
1482        }
1483
1484/**
1485 * Is the forum public?
1486 *
1487 * @since bbPress (r2997)
1488 *
1489 * @param int $forum_id Optional. Forum id
1490 * @param bool $check_ancestors Check if the ancestors are public (only if
1491 *                               they're a category)
1492 * @uses get_post_meta() To get the forum public meta
1493 * @uses bbp_get_forum_ancestors() To get the forum ancestors
1494 * @uses bbp_is_forum_category() To check if the forum is a category
1495 * @uses bbp_is_forum_closed() To check if the forum is closed
1496 * @return bool True if closed, false if not
1497 */
1498function bbp_is_forum_public( $forum_id = 0, $check_ancestors = true ) {
1499
1500        $forum_id   = bbp_get_forum_id( $forum_id );
1501        $visibility = bbp_get_forum_visibility( $forum_id );
1502
1503        // If post status is public, return true
1504        $retval = ( bbp_get_public_status_id() == $visibility );
1505
1506        // Check ancestors and inherit their privacy setting for display
1507        if ( !empty( $check_ancestors ) ) {
1508                $ancestors = bbp_get_forum_ancestors( $forum_id );
1509
1510                foreach ( (array) $ancestors as $ancestor ) {
1511                        if ( bbp_is_forum( $ancestor ) && bbp_is_forum_public( $ancestor, false ) ) {
1512                                $retval = true;
1513                        }
1514                }
1515        }
1516
1517        return (bool) apply_filters( 'bbp_is_forum_public', (bool) $retval, $forum_id, $check_ancestors );
1518}
1519
1520/**
1521 * Is the forum private?
1522 *
1523 * @since bbPress (r2746)
1524 *
1525 * @param int $forum_id Optional. Forum id
1526 * @param bool $check_ancestors Check if the ancestors are private (only if
1527 *                               they're a category)
1528 * @uses get_post_meta() To get the forum private meta
1529 * @uses bbp_get_forum_ancestors() To get the forum ancestors
1530 * @uses bbp_is_forum_category() To check if the forum is a category
1531 * @uses bbp_is_forum_closed() To check if the forum is closed
1532 * @return bool True if closed, false if not
1533 */
1534function bbp_is_forum_private( $forum_id = 0, $check_ancestors = true ) {
1535
1536        $forum_id   = bbp_get_forum_id( $forum_id );
1537        $visibility = bbp_get_forum_visibility( $forum_id );
1538
1539        // If post status is private, return true
1540        $retval = ( bbp_get_private_status_id() == $visibility );
1541
1542        // Check ancestors and inherit their privacy setting for display
1543        if ( !empty( $check_ancestors ) ) {
1544                $ancestors = bbp_get_forum_ancestors( $forum_id );
1545
1546                foreach ( (array) $ancestors as $ancestor ) {
1547                        if ( bbp_is_forum( $ancestor ) && bbp_is_forum_private( $ancestor, false ) ) {
1548                                $retval = true;
1549                        }
1550                }
1551        }
1552
1553        return (bool) apply_filters( 'bbp_is_forum_private', (bool) $retval, $forum_id, $check_ancestors );
1554}
1555
1556/**
1557 * Is the forum hidden?
1558 *
1559 * @since bbPress (r2997)
1560 *
1561 * @param int $forum_id Optional. Forum id
1562 * @param bool $check_ancestors Check if the ancestors are private (only if
1563 *                               they're a category)
1564 * @uses get_post_meta() To get the forum private meta
1565 * @uses bbp_get_forum_ancestors() To get the forum ancestors
1566 * @uses bbp_is_forum_category() To check if the forum is a category
1567 * @uses bbp_is_forum_closed() To check if the forum is closed
1568 * @return bool True if closed, false if not
1569 */
1570function bbp_is_forum_hidden( $forum_id = 0, $check_ancestors = true ) {
1571
1572        $forum_id   = bbp_get_forum_id( $forum_id );
1573        $visibility = bbp_get_forum_visibility( $forum_id );
1574
1575        // If post status is private, return true
1576        $retval = ( bbp_get_hidden_status_id() == $visibility );
1577
1578        // Check ancestors and inherit their privacy setting for display
1579        if ( !empty( $check_ancestors ) ) {
1580                $ancestors = bbp_get_forum_ancestors( $forum_id );
1581
1582                foreach ( (array) $ancestors as $ancestor ) {
1583                        if ( bbp_is_forum( $ancestor ) && bbp_is_forum_hidden( $ancestor, false ) ) {
1584                                $retval = true;
1585                        }
1586                }
1587        }
1588
1589        return (bool) apply_filters( 'bbp_is_forum_hidden', (bool) $retval, $forum_id, $check_ancestors );
1590}
1591
1592/**
1593 * Output the author of the forum
1594 *
1595 * @since bbPress (r3675)
1596 *
1597 * @param int $forum_id Optional. Forum id
1598 * @uses bbp_get_forum_author() To get the forum author
1599 */
1600function bbp_forum_author_display_name( $forum_id = 0 ) {
1601        echo bbp_get_forum_author_display_name( $forum_id );
1602}
1603        /**
1604         * Return the author of the forum
1605         *
1606         * @since bbPress (r3675)
1607         *
1608         * @param int $forum_id Optional. Forum id
1609         * @uses bbp_get_forum_id() To get the forum id
1610         * @uses bbp_get_forum_author_id() To get the forum author id
1611         * @uses get_the_author_meta() To get the display name of the author
1612         * @uses apply_filters() Calls 'bbp_get_forum_author' with the author
1613         *                        and forum id
1614         * @return string Author of forum
1615         */
1616        function bbp_get_forum_author_display_name( $forum_id = 0 ) {
1617                $forum_id = bbp_get_forum_id( $forum_id );
1618                $author   = get_the_author_meta( 'display_name', bbp_get_forum_author_id( $forum_id ) );
1619
1620                return apply_filters( 'bbp_get_forum_author_display_name', $author, $forum_id );
1621        }
1622
1623/**
1624 * Output the author ID of the forum
1625 *
1626 * @since bbPress (r3675)
1627 *
1628 * @param int $forum_id Optional. Forum id
1629 * @uses bbp_get_forum_author_id() To get the forum author id
1630 */
1631function bbp_forum_author_id( $forum_id = 0 ) {
1632        echo bbp_get_forum_author_id( $forum_id );
1633}
1634        /**
1635         * Return the author ID of the forum
1636         *
1637         * @since bbPress (r3675)
1638         *
1639         * @param int $forum_id Optional. Forum id
1640         * @uses bbp_get_forum_id() To get the forum id
1641         * @uses get_post_field() To get the forum author id
1642         * @uses apply_filters() Calls 'bbp_get_forum_author_id' with the author
1643         *                        id and forum id
1644         * @return string Author of forum
1645         */
1646        function bbp_get_forum_author_id( $forum_id = 0 ) {
1647                $forum_id  = bbp_get_forum_id( $forum_id );
1648                $author_id = get_post_field( 'post_author', $forum_id );
1649
1650                return (int) apply_filters( 'bbp_get_forum_author_id', (int) $author_id, $forum_id );
1651        }
1652
1653/**
1654 * Replace forum meta details for users that cannot view them.
1655 *
1656 * @since bbPress (r3162)
1657 *
1658 * @param string $retval
1659 * @param int $forum_id
1660 *
1661 * @uses bbp_is_forum_private()
1662 * @uses current_user_can()
1663 *
1664 * @return string
1665 */
1666function bbp_suppress_private_forum_meta( $retval, $forum_id ) {
1667        if ( bbp_is_forum_private( $forum_id, false ) && !current_user_can( 'read_private_forums' ) )
1668                $retval = '-';
1669
1670        return apply_filters( 'bbp_suppress_private_forum_meta', $retval );
1671}
1672
1673/**
1674 * Replace forum author details for users that cannot view them.
1675 *
1676 * @since bbPress (r3162)
1677 *
1678 * @param string $retval
1679 * @param int $forum_id
1680 *
1681 * @uses bbp_is_forum_private()
1682 * @uses get_post_field()
1683 * @uses bbp_get_topic_post_type()
1684 * @uses bbp_is_forum_private()
1685 * @uses bbp_get_topic_forum_id()
1686 * @uses bbp_get_reply_post_type()
1687 * @uses bbp_get_reply_forum_id()
1688 *
1689 * @return string
1690 */
1691function bbp_suppress_private_author_link( $author_link, $args ) {
1692
1693        // Assume the author link is the return value
1694        $retval = $author_link;
1695
1696        // Show the normal author link
1697        if ( !empty( $args['post_id'] ) && !current_user_can( 'read_private_forums' ) ) {
1698
1699                // What post type are we looking at?
1700                $post_type = get_post_field( 'post_type', $args['post_id'] );
1701
1702                switch ( $post_type ) {
1703
1704                        // Topic
1705                        case bbp_get_topic_post_type() :
1706                                if ( bbp_is_forum_private( bbp_get_topic_forum_id( $args['post_id'] ) ) )
1707                                        $retval = '';
1708
1709                                break;
1710
1711                        // Reply
1712                        case bbp_get_reply_post_type() :
1713                                if ( bbp_is_forum_private( bbp_get_reply_forum_id( $args['post_id'] ) ) )
1714                                        $retval = '';
1715
1716                                break;
1717
1718                        // Post
1719                        default :
1720                                if ( bbp_is_forum_private( $args['post_id'] ) )
1721                                        $retval = '';
1722
1723                                break;
1724                }
1725        }
1726
1727        return apply_filters( 'bbp_suppress_private_author_link', $retval );
1728}
1729
1730/**
1731 * Output the row class of a forum
1732 *
1733 * @since bbPress (r2667)
1734 *
1735 * @param int $forum_id Optional. Forum ID.
1736 * @uses bbp_get_forum_class() To get the row class of the forum
1737 */
1738function bbp_forum_class( $forum_id = 0 ) {
1739        echo bbp_get_forum_class( $forum_id );
1740}
1741        /**
1742         * Return the row class of a forum
1743         *
1744         * @since bbPress (r2667)
1745         *
1746         * @param int $forum_id Optional. Forum ID
1747         * @uses bbp_get_forum_id() To validate the forum id
1748         * @uses bbp_is_forum_category() To see if forum is a category
1749         * @uses bbp_get_forum_status() To get the forum status
1750         * @uses bbp_get_forum_visibility() To get the forum visibility
1751         * @uses bbp_get_forum_parent_id() To get the forum parent id
1752         * @uses get_post_class() To get all the classes including ours
1753         * @uses apply_filters() Calls 'bbp_get_forum_class' with the classes
1754         * @return string Row class of the forum
1755         */
1756        function bbp_get_forum_class( $forum_id = 0 ) {
1757                $bbp       = bbpress();
1758                $forum_id  = bbp_get_forum_id( $forum_id );
1759                $count     = isset( $bbp->forum_query->current_post ) ? $bbp->forum_query->current_post : 1;
1760                $classes   = array();
1761                $classes[] = ( (int) $count % 2 )                 ? 'even'            : 'odd';
1762                $classes[] = bbp_is_forum_category( $forum_id )   ? 'status-category' : '';
1763                $classes[] = 'bbp-forum-status-' . bbp_get_forum_status( $forum_id );
1764                $classes[] = 'bbp-forum-visibility-' . bbp_get_forum_visibility( $forum_id );
1765                $classes[] = bbp_get_forum_parent_id( $forum_id ) ? 'bbp-parent-forum-' . bbp_get_forum_parent_id( $forum_id ) : '';
1766                $classes   = array_filter( $classes );
1767                $classes   = get_post_class( $classes, $forum_id );
1768                $classes   = apply_filters( 'bbp_get_forum_class', $classes, $forum_id );
1769                $retval    = 'class="' . join( ' ', $classes ) . '"';
1770
1771                return $retval;
1772        }
1773
1774/** Single Forum **************************************************************/
1775
1776/**
1777 * Output a fancy description of the current forum, including total topics,
1778 * total replies, and last activity.
1779 *
1780 * @since bbPress (r2860)
1781 *
1782 * @param array $args Arguments passed to alter output
1783 * @uses bbp_get_single_forum_description() Return the eventual output
1784 */
1785function bbp_single_forum_description( $args = '' ) {
1786        echo bbp_get_single_forum_description( $args );
1787}
1788        /**
1789         * Return a fancy description of the current forum, including total
1790         * topics, total replies, and last activity.
1791         *
1792         * @since bbPress (r2860)
1793         *
1794         * @param mixed $args This function supports these arguments:
1795         *  - forum_id: Forum id
1796         *  - before: Before the text
1797         *  - after: After the text
1798         *  - size: Size of the avatar
1799         * @uses bbp_get_forum_id() To get the forum id
1800         * @uses bbp_get_forum_topic_count() To get the forum topic count
1801         * @uses bbp_get_forum_reply_count() To get the forum reply count
1802         * @uses bbp_get_forum_subforum_count() To get the forum subforum count
1803         * @uses bbp_get_forum_freshness_link() To get the forum freshness link
1804         * @uses bbp_get_forum_last_active_id() To get the forum last active id
1805         * @uses bbp_get_author_link() To get the author link
1806         * @uses add_filter() To add the 'view all' filter back
1807         * @uses apply_filters() Calls 'bbp_get_single_forum_description' with
1808         *                        the description and args
1809         * @return string Filtered forum description
1810         */
1811        function bbp_get_single_forum_description( $args = '' ) {
1812
1813                // Default arguments
1814                $defaults = array (
1815                        'forum_id'  => 0,
1816                        'before'    => '<div class="bbp-template-notice info"><p class="bbp-forum-content">',
1817                        'after'     => '</p></div>',
1818                        'size'      => 14,
1819                        'feed'      => true
1820                );
1821                $r = wp_parse_args( $args, $defaults );
1822                extract( $r );
1823
1824                // Validate forum_id
1825                $forum_id = bbp_get_forum_id( $forum_id );
1826
1827                // Unhook the 'view all' query var adder
1828                remove_filter( 'bbp_get_forum_permalink', 'bbp_add_view_all' );
1829
1830                // Build the forum description
1831                $topic_count = bbp_get_forum_topics_link   ( $forum_id );
1832                $reply_count = bbp_get_forum_reply_count   ( $forum_id );
1833                $time_since  = bbp_get_forum_freshness_link( $forum_id );
1834
1835                // Singlular/Plural
1836                $reply_count     = sprintf( _n( '%s reply', '%s replies', $reply_count, 'bbpress' ), $reply_count );
1837
1838                // Forum has posts
1839                $last_reply = bbp_get_forum_last_active_id( $forum_id );
1840                if ( !empty( $last_reply ) ) {
1841
1842                        // Freshness author
1843                        $last_updated_by = bbp_get_author_link( array( 'post_id' => $last_reply, 'size' => $size ) );
1844
1845                        // Category
1846                        if ( bbp_is_forum_category( $forum_id ) ) {
1847                                $retstr = sprintf( __( 'This category contains %1$s and %2$s, and was last updated by %3$s %4$s ago.', 'bbpress' ), $topic_count, $reply_count, $last_updated_by, $time_since );
1848
1849                        // Forum
1850                        } else {
1851                                $retstr = sprintf( __( 'This forum contains %1$s and %2$s, and was last updated by %3$s %4$s ago.',    'bbpress' ), $topic_count, $reply_count, $last_updated_by, $time_since );
1852                        }
1853
1854                // Forum has no last active data
1855                } else {
1856
1857                        // Category
1858                        if ( bbp_is_forum_category( $forum_id ) ) {
1859                                $retstr = sprintf( __( 'This category contains %1$s and %2$s.', 'bbpress' ), $topic_count, $reply_count );
1860
1861                        // Forum
1862                        } else {
1863                                $retstr = sprintf( __( 'This forum contains %1$s and %2$s.',    'bbpress' ), $topic_count, $reply_count );
1864                        }
1865                }
1866
1867                // Add feeds
1868                //$feed_links = ( !empty( $feed ) ) ? bbp_get_forum_topics_feed_link ( $forum_id ) . bbp_get_forum_replies_feed_link( $forum_id ) : '';
1869
1870                // Add the 'view all' filter back
1871                add_filter( 'bbp_get_forum_permalink', 'bbp_add_view_all' );
1872
1873                // Combine the elements together
1874                $retstr = $before . $retstr . $after;
1875
1876                // Return filtered result
1877                return apply_filters( 'bbp_get_single_forum_description', $retstr, $args );
1878        }
1879
1880/** Forms *********************************************************************/
1881
1882/**
1883 * Output the value of forum title field
1884 *
1885 * @since bbPress (r3551)
1886 *
1887 * @uses bbp_get_form_forum_title() To get the value of forum title field
1888 */
1889function bbp_form_forum_title() {
1890        echo bbp_get_form_forum_title();
1891}
1892        /**
1893         * Return the value of forum title field
1894         *
1895         * @since bbPress (r3551)
1896         *
1897         * @uses bbp_is_forum_edit() To check if it's forum edit page
1898         * @uses apply_filters() Calls 'bbp_get_form_forum_title' with the title
1899         * @return string Value of forum title field
1900         */
1901        function bbp_get_form_forum_title() {
1902
1903                // Get _POST data
1904                if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_title'] ) )
1905                        $forum_title = $_POST['bbp_forum_title'];
1906
1907                // Get edit data
1908                elseif ( bbp_is_forum_edit() )
1909                        $forum_title = bbp_get_global_post_field( 'post_title', 'raw' );
1910
1911                // No data
1912                else
1913                        $forum_title = '';
1914
1915                return apply_filters( 'bbp_get_form_forum_title', esc_attr( $forum_title ) );
1916        }
1917
1918/**
1919 * Output the value of forum content field
1920 *
1921 * @since bbPress (r3551)
1922 *
1923 * @uses bbp_get_form_forum_content() To get value of forum content field
1924 */
1925function bbp_form_forum_content() {
1926        echo bbp_get_form_forum_content();
1927}
1928        /**
1929         * Return the value of forum content field
1930         *
1931         * @since bbPress (r3551)
1932         *
1933         * @uses bbp_is_forum_edit() To check if it's the forum edit page
1934         * @uses apply_filters() Calls 'bbp_get_form_forum_content' with the content
1935         * @return string Value of forum content field
1936         */
1937        function bbp_get_form_forum_content() {
1938
1939                // Get _POST data
1940                if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_content'] ) )
1941                        $forum_content = $_POST['bbp_forum_content'];
1942
1943                // Get edit data
1944                elseif ( bbp_is_forum_edit() )
1945                        $forum_content = bbp_get_global_post_field( 'post_content', 'raw' );
1946
1947                // No data
1948                else
1949                        $forum_content = '';
1950
1951                return apply_filters( 'bbp_get_form_forum_content', esc_textarea( $forum_content ) );
1952        }
1953
1954/**
1955 * Output value of forum parent
1956 *
1957 * @since bbPress (r3551)
1958 *
1959 * @uses bbp_get_form_forum_parent() To get the topic's forum id
1960 */
1961function bbp_form_forum_parent() {
1962        echo bbp_get_form_forum_parent();
1963}
1964        /**
1965         * Return value of forum parent
1966         *
1967         * @since bbPress (r3551)
1968         *
1969         * @uses bbp_is_topic_edit() To check if it's the topic edit page
1970         * @uses bbp_get_forum_parent_id() To get the topic forum id
1971         * @uses apply_filters() Calls 'bbp_get_form_forum_parent' with the forum
1972         * @return string Value of topic content field
1973         */
1974        function bbp_get_form_forum_parent() {
1975
1976                // Get _POST data
1977                if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_id'] ) )
1978                        $forum_parent = $_POST['bbp_forum_id'];
1979
1980                // Get edit data
1981                elseif ( bbp_is_forum_edit() )
1982                        $forum_parent = bbp_get_forum_parent_id();
1983
1984                // No data
1985                else
1986                        $forum_parent = 0;
1987
1988                return apply_filters( 'bbp_get_form_forum_parent', esc_attr( $forum_parent ) );
1989        }
1990
1991/**
1992 * Output value of forum type
1993 *
1994 * @since bbPress (r3563)
1995 *
1996 * @uses bbp_get_form_forum_type() To get the topic's forum id
1997 */
1998function bbp_form_forum_type() {
1999        echo bbp_get_form_forum_type();
2000}
2001        /**
2002         * Return value of forum type
2003         *
2004         * @since bbPress (r3563)
2005         *
2006         * @uses bbp_is_topic_edit() To check if it's the topic edit page
2007         * @uses bbp_get_forum_type_id() To get the topic forum id
2008         * @uses apply_filters() Calls 'bbp_get_form_forum_type' with the forum
2009         * @return string Value of topic content field
2010         */
2011        function bbp_get_form_forum_type() {
2012
2013                // Get _POST data
2014                if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_type'] ) )
2015                        $forum_type = $_POST['bbp_forum_type'];
2016
2017                // Get edit data
2018                elseif ( bbp_is_forum_edit() )
2019                        $forum_type = bbp_get_forum_type();
2020
2021                // No data
2022                else
2023                        $forum_type = 'forum';
2024
2025                return apply_filters( 'bbp_get_form_forum_type', esc_attr( $forum_type ) );
2026        }
2027
2028/**
2029 * Output value of forum visibility
2030 *
2031 * @since bbPress (r3563)
2032 *
2033 * @uses bbp_get_form_forum_visibility() To get the topic's forum id
2034 */
2035function bbp_form_forum_visibility() {
2036        echo bbp_get_form_forum_visibility();
2037}
2038        /**
2039         * Return value of forum visibility
2040         *
2041         * @since bbPress (r3563)
2042         *
2043         * @uses bbp_is_topic_edit() To check if it's the topic edit page
2044         * @uses bbp_get_forum_visibility_id() To get the topic forum id
2045         * @uses apply_filters() Calls 'bbp_get_form_forum_visibility' with the forum
2046         * @return string Value of topic content field
2047         */
2048        function bbp_get_form_forum_visibility() {
2049
2050                // Get _POST data
2051                if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_visibility'] ) )
2052                        $forum_visibility = $_POST['bbp_forum_visibility'];
2053
2054                // Get edit data
2055                elseif ( bbp_is_forum_edit() )
2056                        $forum_visibility = bbp_get_forum_visibility();
2057
2058                // No data
2059                else
2060                        $forum_visibility = bbpress()->public_status_id;
2061
2062                return apply_filters( 'bbp_get_form_forum_visibility', esc_attr( $forum_visibility ) );
2063        }
2064
2065/** Form Dropdows *************************************************************/
2066
2067/**
2068 * Output value forum type dropdown
2069 *
2070 * @since bbPress (r3563)
2071 *
2072 * @param int $forum_id The forum id to use
2073 * @uses bbp_get_form_forum_type() To get the topic's forum id
2074 */
2075function bbp_form_forum_type_dropdown( $forum_id = 0 ) {
2076        echo bbp_get_form_forum_type_dropdown( $forum_id );
2077}
2078        /**
2079         * Return the forum type dropdown
2080         *
2081         * @since bbPress (r3563)
2082         *
2083         * @param int $forum_id The forum id to use
2084         * @uses bbp_is_topic_edit() To check if it's the topic edit page
2085         * @uses bbp_get_forum_type() To get the forum type
2086         * @uses apply_filters()
2087         * @return string HTML select list for selecting forum type
2088         */
2089        function bbp_get_form_forum_type_dropdown( $forum_id = 0 ) {
2090                $forum_id   = bbp_get_forum_id( $forum_id );
2091                $forum_attr = apply_filters( 'bbp_forum_types', array(
2092                        'forum'    => __( 'Forum',    'bbpress' ),
2093                        'category' => __( 'Category', 'bbpress' )
2094                ) );
2095                $type_output = '<select name="bbp_forum_type" id="bbp_forum_type_select">' . "\n";
2096
2097                foreach( $forum_attr as $value => $label )
2098                        $type_output .= "\t" . '<option value="' . $value . '"' . selected( bbp_get_forum_type( $forum_id ), $value, false ) . '>' . esc_html( $label ) . '</option>' . "\n";
2099
2100                $type_output .= '</select>';
2101
2102                return apply_filters( 'bbp_get_form_forum_type_dropdown', $type_output, $forum_id, $forum_attr );
2103        }
2104
2105/**
2106 * Output value forum status dropdown
2107 *
2108 * @since bbPress (r3563)
2109 *
2110 * @param int $forum_id The forum id to use
2111 * @uses bbp_get_form_forum_status() To get the topic's forum id
2112 */
2113function bbp_form_forum_status_dropdown( $forum_id = 0 ) {
2114        echo bbp_get_form_forum_status_dropdown( $forum_id );
2115}
2116        /**
2117         * Return the forum status dropdown
2118         *
2119         * @since bbPress (r3563)
2120         *
2121         * @param int $forum_id The forum id to use
2122         * @uses bbp_is_topic_edit() To check if it's the topic edit page
2123         * @uses bbp_get_forum_status() To get the forum status
2124         * @uses apply_filters()
2125         * @return string HTML select list for selecting forum status
2126         */
2127        function bbp_get_form_forum_status_dropdown( $forum_id = 0 ) {
2128                $forum_id   = bbp_get_forum_id( $forum_id );
2129                $forum_attr = apply_filters( 'bbp_forum_statuses', array(
2130                        'open'   => _x( 'Open',   'Forum Status', 'bbpress' ),
2131                        'closed' => _x( 'Closed', 'Forum Status', 'bbpress' )
2132                ) );
2133                $status_output = '<select name="bbp_forum_status" id="bbp_forum_status_select">' . "\n";
2134
2135                foreach( $forum_attr as $value => $label )
2136                        $status_output .= "\t" . '<option value="' . $value . '"' . selected( bbp_get_forum_status( $forum_id ), $value, false ) . '>' . esc_html( $label ) . '</option>' . "\n";
2137
2138                $status_output .= '</select>';
2139
2140                return apply_filters( 'bbp_get_form_forum_status_dropdown', $status_output, $forum_id, $forum_attr );
2141        }
2142
2143/**
2144 * Output value forum visibility dropdown
2145 *
2146 * @since bbPress (r3563)
2147 *
2148 * @param int $forum_id The forum id to use
2149 * @uses bbp_get_form_forum_visibility() To get the topic's forum id
2150 */
2151function bbp_form_forum_visibility_dropdown( $forum_id = 0 ) {
2152        echo bbp_get_form_forum_visibility_dropdown( $forum_id );
2153}
2154        /**
2155         * Return the forum visibility dropdown
2156         *
2157         * @since bbPress (r3563)
2158         *
2159         * @param int $forum_id The forum id to use
2160         * @uses bbp_is_topic_edit() To check if it's the topic edit page
2161         * @uses bbp_get_forum_visibility() To get the forum visibility
2162         * @uses apply_filters()
2163         * @return string HTML select list for selecting forum visibility
2164         */
2165        function bbp_get_form_forum_visibility_dropdown( $forum_id = 0 ) {
2166                $forum_id   = bbp_get_forum_id( $forum_id );
2167                $forum_attr = apply_filters( 'bbp_forum_visibilities', array(
2168                        bbp_get_public_status_id()  => __( 'Public',  'bbpress' ),
2169                        bbp_get_private_status_id() => __( 'Private', 'bbpress' ),
2170                        bbp_get_hidden_status_id()  => __( 'Hidden',  'bbpress' )
2171                ) );
2172                $visibility_output = '<select name="bbp_forum_visibility" id="bbp_forum_visibility_select">' . "\n";
2173
2174                foreach( $forum_attr as $value => $label )
2175                        $visibility_output .= "\t" . '<option value="' . $value . '"' . selected( bbp_get_forum_visibility( $forum_id ), $value, false ) . '>' . esc_html( $label ) . '</option>' . "\n";
2176
2177                $visibility_output .= '</select>';
2178
2179                return apply_filters( 'bbp_get_form_forum_visibility_dropdown', $visibility_output, $forum_id, $forum_attr );
2180        }
2181
2182/** Feeds *********************************************************************/
2183
2184/**
2185 * Output the link for the forum feed
2186 *
2187 * @since bbPress (r3172)
2188 *
2189 * @param type $forum_id Optional. Forum ID.
2190 *
2191 * @uses bbp_get_forum_topics_feed_link()
2192 */
2193function bbp_forum_topics_feed_link( $forum_id = 0 ) {
2194        echo bbp_get_forum_topics_feed_link( $forum_id );
2195}
2196        /**
2197         * Retrieve the link for the forum feed
2198         *
2199         * @since bbPress (r3172)
2200         *
2201         * @param int $forum_id Optional. Forum ID.
2202         *
2203         * @uses bbp_get_forum_id()
2204         * @uses get_option()
2205         * @uses trailingslashit()
2206         * @uses bbp_get_forum_permalink()
2207         * @uses user_trailingslashit()
2208         * @uses bbp_get_forum_post_type()
2209         * @uses get_post_field()
2210         * @uses apply_filters()
2211         *
2212         * @return string
2213         */
2214        function bbp_get_forum_topics_feed_link( $forum_id = 0 ) {
2215
2216                // Validate forum id
2217                $forum_id = bbp_get_forum_id( $forum_id );
2218
2219                // Forum is valid
2220                if ( !empty( $forum_id ) ) {
2221
2222                        // Define local variable(s)
2223                        $link = '';
2224
2225                        // Pretty permalinks
2226                        if ( get_option( 'permalink_structure' ) ) {
2227
2228                                // Forum link
2229                                $url = trailingslashit( bbp_get_forum_permalink( $forum_id ) ) . 'feed';
2230                                $url = user_trailingslashit( $url, 'single_feed' );
2231
2232                        // Unpretty permalinks
2233                        } else {
2234                                $url = home_url( add_query_arg( array(
2235                                        'feed'                    => 'rss2',
2236                                        bbp_get_forum_post_type() => get_post_field( 'post_name', $forum_id )
2237                                ) ) );
2238                        }
2239
2240                        $link = '<a href="' . $url . '" class="bbp-forum-rss-link topics"><span>' . __( 'Topics', 'bbpress' ) . '</span></a>';
2241                }
2242
2243                return apply_filters( 'bbp_get_forum_topics_feed_link', $link, $url, $forum_id );
2244        }
2245
2246/**
2247 * Output the link for the forum replies feed
2248 *
2249 * @since bbPress (r3172)
2250 *
2251 * @param type $forum_id Optional. Forum ID.
2252 *
2253 * @uses bbp_get_forum_replies_feed_link()
2254 */
2255function bbp_forum_replies_feed_link( $forum_id = 0 ) {
2256        echo bbp_get_forum_replies_feed_link( $forum_id );
2257}
2258        /**
2259         * Retrieve the link for the forum replies feed
2260         *
2261         * @since bbPress (r3172)
2262         *
2263         * @param int $forum_id Optional. Forum ID.
2264         *
2265         * @uses bbp_get_forum_id()
2266         * @uses get_option()
2267         * @uses trailingslashit()
2268         * @uses bbp_get_forum_permalink()
2269         * @uses user_trailingslashit()
2270         * @uses bbp_get_forum_post_type()
2271         * @uses get_post_field()
2272         * @uses apply_filters()
2273         *
2274         * @return string
2275         */
2276        function bbp_get_forum_replies_feed_link( $forum_id = 0 ) {
2277
2278                // Validate forum id
2279                $forum_id = bbp_get_forum_id( $forum_id );
2280
2281                // Forum is valid
2282                if ( !empty( $forum_id ) ) {
2283
2284                        // Define local variable(s)
2285                        $link = '';
2286
2287                        // Pretty permalinks
2288                        if ( get_option( 'permalink_structure' ) ) {
2289
2290                                // Forum link
2291                                $url = trailingslashit( bbp_get_forum_permalink( $forum_id ) ) . 'feed';
2292                                $url = user_trailingslashit( $url, 'single_feed' );
2293                                $url = add_query_arg( array( 'type' => 'reply' ), $url );
2294
2295                        // Unpretty permalinks
2296                        } else {
2297                                $url = home_url( add_query_arg( array(
2298                                        'type'                    => 'reply',
2299                                        'feed'                    => 'rss2',
2300                                        bbp_get_forum_post_type() => get_post_field( 'post_name', $forum_id )
2301                                ) ) );
2302                        }
2303
2304                        $link = '<a href="' . $url . '" class="bbp-forum-rss-link replies"><span>' . __( 'Replies', 'bbpress' ) . '</span></a>';
2305                }
2306
2307                return apply_filters( 'bbp_get_forum_replies_feed_link', $link, $url, $forum_id );
2308        }
2309
2310?>