BBP_Forums_Group_Extension::display_forums( $offset )

Output the forums for a group in the edit screens


Description Description

As of right now, bbPress only supports 1-to-1 group forum relationships. In the future, many-to-many should be allowed.


Source Source

File: includes/extend/buddypress/groups.php

	public function display_forums( $offset = 0 ) {

		// Allow actions immediately before group forum output
		do_action( 'bbp_before_group_forum_display' );

		// Load up bbPress once
		$bbp = bbpress();

		/** Query Resets ******************************************************/

		// Forum data
		$forum_action = bp_action_variable( $offset );
		$forum_ids    = bbp_get_group_forum_ids( bp_get_current_group_id() );
		$forum_id     = array_shift( $forum_ids );

		// Always load up the group forum
		bbp_has_forums( array(
			'p'           => $forum_id,
			'post_parent' => null
		) );

		// Set the global forum ID
		$bbp->current_forum_id = $forum_id;

		// Assume forum query
		bbp_set_query_name( 'bbp_single_forum' ); ?>

		<div id="bbpress-forums" class="bbpress-wrapper">

			<?php switch ( $forum_action ) :

				/** Single Forum **********************************************/

				case false  :
				case 'page' :

					// Strip the super stickies from topic query
					add_filter( 'bbp_get_super_stickies', array( $this, 'no_super_stickies'  ), 10, 1 );

					// Unset the super sticky option on topic form
					add_filter( 'bbp_get_topic_types',    array( $this, 'unset_super_sticky' ), 10, 1 );

					// Query forums and show them if they exist
					if ( bbp_forums() ) :

						// Setup the forum
						bbp_the_forum();

						// Only wrap title in H2 if not empty
						$title = bbp_get_forum_title();
						if ( ! empty( $title ) ) {
							echo '<h2>' . $title . '</h2>';
						}

						// Output forum
						bbp_get_template_part( 'content', 'single-forum' );

					// No forums found
					else : ?>

						<div id="message" class="info">
							<p><?php esc_html_e( 'This group does not currently have a forum.', 'bbpress' ); ?></p>
						</div>

					<?php endif;

					break;

				/** Single Topic **********************************************/

				case $this->topic_slug :

					// hide the 'to front' admin links
					add_filter( 'bbp_get_topic_stick_link', array( $this, 'hide_super_sticky_admin_link' ), 10, 2 );

					// Get the topic
					bbp_has_topics( array(
						'name'           => bp_action_variable( $offset + 1 ),
						'posts_per_page' => 1,
						'show_stickies'  => false
					) );

					// If no topic, 404
					if ( ! bbp_topics() ) {
						bp_do_404( bbp_get_forum_permalink( $forum_id ) );

						// Only wrap title in H2 if not empty
						$title = bbp_get_forum_title();
						if ( ! empty( $title ) ) {
							echo '<h2>' . $title . '</h2>';
						}

						// No topics
						bbp_get_template_part( 'feedback', 'no-topics' );
						break;
					}

					// Setup the topic
					bbp_the_topic();

					// Only wrap title in H2 if not empty
					$title = bbp_get_topic_title();
					if ( ! empty( $title ) ) {
						echo '<h2>' . $title . '</h2>';
					}

					// Topic edit
					if ( bp_action_variable( $offset + 2 ) === bbp_get_edit_slug() ) :

						// Unset the super sticky link on edit topic template
						add_filter( 'bbp_get_topic_types', array( $this, 'unset_super_sticky' ), 10, 1 );

						// Get the main query object
						$wp_query = bbp_get_wp_query();

						// Set the edit switches
						$wp_query->bbp_is_edit       = true;
						$wp_query->bbp_is_topic_edit = true;

						// Setup the global forum ID
						$bbp->current_topic_id       = get_the_ID();

						// Merge
						if ( ! empty( $_GET['action'] ) && 'merge' === $_GET['action'] ) :
							bbp_set_query_name( 'bbp_topic_merge' );
							bbp_get_template_part( 'form', 'topic-merge' );

						// Split
						elseif ( ! empty( $_GET['action'] ) && 'split' === $_GET['action'] ) :
							bbp_set_query_name( 'bbp_topic_split' );
							bbp_get_template_part( 'form', 'topic-split' );

						// Edit
						else :
							bbp_set_query_name( 'bbp_topic_form' );
							bbp_get_template_part( 'form', 'topic' );

						endif;

					// Single Topic
					else :
						bbp_set_query_name( 'bbp_single_topic' );
						bbp_get_template_part( 'content', 'single-topic' );
					endif;
					break;

				/** Single Reply **********************************************/

				case $this->reply_slug :

					// Get the reply
					bbp_has_replies( array(
						'name'           => bp_action_variable( $offset + 1 ),
						'posts_per_page' => 1
					) );

					// If no topic, 404
					if ( ! bbp_replies() ) {
						bp_do_404( bbp_get_forum_permalink( $forum_id ) );

						// Only wrap title in H2 if not empty
						$title = bbp_get_forum_title();
						if ( ! empty( $title ) ) {
							echo '<h2>' . $title . '</h2>';
						}

						// No replies
						bbp_get_template_part( 'feedback', 'no-replies' );
						break;
					}

					// Setup the reply
					bbp_the_reply();

					// Only wrap title in H2 if not empty
					$title = bbp_get_reply_title();
					if ( ! empty( $title ) ) {
						echo '<h2>' . $title . '</h2>';
					}

					if ( bp_action_variable( $offset + 2 ) === bbp_get_edit_slug() ) :

						// Get the main query object
						$wp_query = bbp_get_wp_query();

						// Set the edit switches
						$wp_query->bbp_is_edit       = true;
						$wp_query->bbp_is_reply_edit = true;

						// Setup the global reply ID
						$bbp->current_reply_id       = get_the_ID();

						// Move
						if ( ! empty( $_GET['action'] ) && ( 'move' === $_GET['action'] ) ) :
							bbp_set_query_name( 'bbp_reply_move' );
							bbp_get_template_part( 'form', 'reply-move' );

						// Edit
						else :
							bbp_set_query_name( 'bbp_reply_form' );
							bbp_get_template_part( 'form', 'reply' );
						endif;
					endif;
					break;
			endswitch;

			// Reset the query
			wp_reset_query(); ?>

		</div><!-- #bbpress-forums -->

		<?php

		// Allow actions immediately after group forum output
		do_action( 'bbp_after_group_forum_display' );
	}

Top ↑

Changelog Changelog

Changelog
Version Description
2.1.0 Introduced.

Top ↑

User Contributed Notes User Contributed Notes

You must log in before being able to contribute a note or feedback.