wenpai.org/wp-content/plugins/bbp-style-pack/includes/shortcodes.php
2024-06-21 23:57:39 +08:00

431 lines
13 KiB
PHP

<?php
// Exit if accessed directly
defined( 'ABSPATH' ) || exit;
// NOTE: Updated shortcodes for version 5.6.3
// All y/n and yes/no option values have been converted to true/false.
// Legacy checks included to account for y/n and yes/no to prevent breaking existing shortcode uses on sites.
// true/false now standard for shortcodes.
// shortcodes functions
add_shortcode('bsp-display-topic-index', 'bsp_display_topic_index');
add_shortcode('bsp-display-newest-users', 'bsp_display_newest_users');
add_shortcode('bsp-display-forum-index', 'bsp_display_selected_forum');
add_shortcode ('bsp-profile', 'bsp_display_edit_profile_link') ;
add_shortcode ('bsp-forum-subscriber-count', 'bsp_forum_subscriber_count') ;
add_shortcode ('bsp-force-login', 'bsp_forum_login') ;
//add_shortcode ('bsp-display-topic' , 'bsp_display_topic' ) ;
function bsp_display_topic_index($attr, $content = '' ) {
// Unset globals
bsp_unset_globals();
global $show;
global $forum;
global $stickies;
global $display;
global $noreply;
if (!empty( $attr['show'])) $show = absint( trim( strtolower( $attr['show'] ) ) );
if (!empty( $attr['forum'])) $forum = trim( strtolower( $attr['forum'] ) );
if (!empty( $attr['show_stickies'])) $stickies = trim( strtolower( $attr['show_stickies'] ) );
if (!empty( $attr['template'])) $display = trim( strtolower( $attr['template'] ) );
if (!empty( $attr['noreply'])) $noreply = trim( strtolower( $attr['noreply'] ) );
// Filter the query
if ( ! bbp_is_topic_archive() ) {
add_filter( 'bbp_before_has_topics_parse_args', 'bsp_display_topic_index_query' );
}
// Start output buffer
bsp_start( 'bbp_topic_archive' );
// Output template
global $display ;
if ($display == 'short') {
?>
<div id="bbpress-forums">
<?php
if ( bbp_is_topic_tag() ) bbp_topic_tag_description();
if ( bbp_has_topics() ) bbp_get_template_part( 'loop', 'topics' );
else bbp_get_template_part( 'feedback', 'no-topics' ); ?>
</div>
<?php
}
elseif ($display == 'list') {
if ( bbp_has_topics() ) {
?>
<ul class="bbp-body">
<?php while ( bbp_topics() ) : bbp_the_topic(); ?>
<li class="bsp-list"><a class="bbp-topic-permalink" href="<?php bbp_topic_permalink(); ?>"><?php bbp_topic_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php
}
}
else bbp_get_template_part( 'content', 'archive-topic' );
// Return contents of output buffer
return bsp_end();
}
function bsp_start( $query_name = '' ) {
// Set query name
bbp_set_query_name( $query_name );
// Start output buffer
ob_start();
}
function bsp_end() {
// Unset globals
bsp_unset_globals();
// Reset the query name
bbp_reset_query_name();
// Return and flush the output buffer
return ob_get_clean();
}
function bsp_unset_globals() {
$bbp = bbpress();
// Unset global queries
$bbp->forum_query = new WP_Query();
$bbp->topic_query = new WP_Query();
$bbp->reply_query = new WP_Query();
$bbp->search_query = new WP_Query();
// Unset global ID's
$bbp->current_view_id = 0;
$bbp->current_forum_id = 0;
$bbp->current_topic_id = 0;
$bbp->current_reply_id = 0;
$bbp->current_topic_tag_id = 0;
// Reset the post data
wp_reset_postdata();
}
function bsp_display_topic_index_query( $args = array() ) {
global $forum;
global $stickies;
global $show;
global $noreply;
if (!empty( $forum)) {
$forums = explode(',', $forum);
$args['post_parent__in'] = $forums;
$args['post_parent'] = '' ;
}
if ( !empty( $stickies ) ) {
if ($stickies == 'true' ) $args['show_stickies'] = true;
if ($stickies == 'false' ) $args['show_stickies'] = false;
}
else $args['show_stickies'] = false;
if ( !empty( $noreply ) ) {
if ( $noreply == 'true' ) {
$args['meta_query'] = array(
array(
'key' => '_bbp_reply_count',
'value' => '0',
'compare' => '=',
'type' => 'NUMERIC',
),
);
}
}
if ( !empty ( $show ) ) {
$args['posts_per_page'] = $show;
$args['max_num_pages'] = 1;
$args['paged'] = 1;
}
else {
$args['posts_per_page'] = bbp_get_topics_per_page() ;
$args['max_num_pages'] = false;
}
$args['author'] = 0;
$args['order'] = 'DESC';
//allow private groups and/or other plugins to filter this query
return apply_filters( 'bsp_display_topic_index_query', $args );
}
// adds a shortcode that displays the latest wordpress registered
function bsp_display_newest_users ($attr) {
if ( is_numeric( $attr['show'] )) $number = absint( $attr['show'] );
else $number = 5;
$users = get_users( array( 'orderby' => 'registered', 'order' => 'desc', 'number' => $number ) );
$heading1= __('Newest users','bbp-style-pack');
$heading2= __('Date joined','bbp-style-pack');
echo '<table><th align=left>'.$heading1.'</th><th align=left>'.$heading2.'</th>';
foreach ( $users as $user ) {
$date=date_i18n("jS M Y", strtotime( $user->user_registered ) );
echo '<tr><td>' . esc_html( $user->display_name ).'</td>';
echo '<td>'.$date.'</td>';
echo '</tr>';
}
echo '</table>';
}
//adds a shortcode to display the index from a single forum
function bsp_display_selected_forum($attr, $content = '' ) {
// Sanity check required info
if ( !empty( $content ) || ( empty( $attr['forum'] ) ) )
//$content = 'no forum(s) set ' ;
return $content;
// Unset globals
bsp_unset_globals();
global $forum;
if ( !empty( $attr['forum'] ) ) $forum = trim( strtolower( $attr['forum'] ) );
if ( !empty( $attr['breadcrumb'] ) ) {
if ( trim( strtolower( $attr['breadcrumb'] ) ) == 'no' || trim( strtolower( $attr['breadcrumb'] ) ) == 'false' ) {
add_filter ('bbp_no_breadcrumb', '__return_false');
}
}
if ( !empty( $attr['search'] ) ) {
if ( trim( strtolower( $attr['search'] ) ) == 'no' || trim( strtolower( $attr['search'] ) ) == 'false' ) {
add_filter ('bbp_allow_search', '__return_false');
}
}
// Filter the query
if ( ! bbp_is_forum_archive() ) {
add_filter( 'bbp_before_has_forums_parse_args', 'bsp_display_forum_query' );
}
if ( !empty( $attr['title'] ) ) {
global $title;
$title = $attr['title'];
add_filter( 'gettext', 'bsp_change_category_text', 20, 3 );
}
// Start output buffer
bsp_start( 'bbp_forum_archive' );
// Output template
bbp_get_template_part( 'content', 'archive-forum' );
// Return contents of output buffer
return bsp_end();
}
function bsp_display_forum_query( $args ) {
global $forum;
// split the string into pieces
$forums = explode( ',', trim( $forum ) );
$args['post__in'] = $forums;
$args['post_parent'] = '';
$args['orderby'] = 'post__in';
//allow private groups and/or other plugins to filter this query
return apply_filters( 'bsp_display_forum_query', $args );
}
function bsp_no_search () {
return false;
}
function bsp_display_edit_profile_link ($atts) {
global $bsp_login;
if ( !is_user_logged_in() ) {
return;
}
else {
if ( empty ($atts) ) $atts = array();
$edit = false;
if ( !empty($atts['edit'] ) ) {
if ( trim( strtolower( $atts['edit'] ) ) == 'y' || trim( strtolower( $atts['edit'] ) ) == 'true' ) $edit = true;
}
if ( isset($atts['label'] ) ) {
$profile = $atts['label'];
}
else $profile = __( 'My Profile', 'bbp-style-pack' );
$user_id = get_current_user_id();
$link = bbp_get_user_profile_url( $user_id );
if ( $edit ) $link.= 'edit';
$profilelink = '<a href="'.$link.'">'.$profile.'</a></li>';
return $profilelink;
}
}
function bsp_change_category_text( $translated_text, $text, $domain ) {
global $title ;
if ( $text == 'Forum' ) {
$translated_text = $title ;
}
return $translated_text;
}
function bsp_forum_subscriber_count ($attr, $content = '') {
//bail if no forum set
if ( empty ( $attr['forum'] ) ) return;
if ( empty ( $attr['before'] ) ) $attr['before'] = '';
if ( empty ( $attr['after'] ) ) $attr['after'] = '';
$count = 0;
$users= get_users();
if ( $users ) :
foreach ( $users as $user ) {
$user_id = $user->ID;
$subscriptions = bbp_get_user_subscribed_forum_ids( $user_id );
if ( in_array ( $attr['forum'], $subscriptions ) ) $count++;
}
endif;
echo $attr['before'].$count.$attr['after'];
}
//adds a single topic without the reply form
function bsp_display_topic( $attr, $content = '' ) {
// Sanity check required info
if ( !empty( $content ) || ( empty( $attr['id'] ) || !is_numeric( $attr['id'] ) ) )
return $content;
// Unset globals
bsp_unset_globals();
// Set passed attribute to $forum_id for clarity
$topic_id = bbpress()->current_topic_id = $attr['id'];
$forum_id = bbp_get_topic_forum_id( $topic_id );
// Bail if ID passed is not a topic
if ( !bbp_is_topic( $topic_id ) )
return $content;
// Reset the queries if not in theme compat
if ( !bbp_is_theme_compat_active() ) {
$bbp = bbpress();
// Reset necessary forum_query attributes for topics loop to function
$bbp->forum_query->query_vars['post_type'] = bbp_get_forum_post_type();
$bbp->forum_query->in_the_loop = true;
$bbp->forum_query->post = get_post( $forum_id );
// Reset necessary topic_query attributes for topics loop to function
$bbp->topic_query->query_vars['post_type'] = bbp_get_topic_post_type();
$bbp->topic_query->in_the_loop = true;
$bbp->topic_query->post = get_post( $topic_id );
}
// Start output buffer
bsp_start( 'bbp_single_topic' );
// Check forum caps
if ( bbp_user_can_view_forum( array( 'forum_id' => $forum_id ) ) ) {
?>
<div id="bbpress-forums">
<?php bbp_breadcrumb(); ?>
<?php do_action( 'bbp_template_before_single_topic' ); ?>
<?php if ( post_password_required() ) : ?>
<?php bbp_get_template_part( 'form', 'protected' ); ?>
<?php else : ?>
<?php bbp_topic_tag_list(); ?>
<?php bbp_single_topic_description(); ?>
<?php if ( bbp_show_lead_topic() ) : ?>
<?php bbp_get_template_part( 'content', 'single-topic-lead' ); ?>
<?php endif; ?>
<?php if ( bbp_has_replies() ) : ?>
<?php bbp_get_template_part( 'pagination', 'replies' ); ?>
<?php bbp_get_template_part( 'loop', 'replies' ); ?>
<?php bbp_get_template_part( 'pagination', 'replies' ); ?>
<?php endif; ?>
<?php endif; ?>
<?php do_action( 'bbp_template_after_single_topic' ); ?>
<?php
// Forum is private and user does not have caps
} elseif ( bbp_is_forum_private( $forum_id, false ) ) {
bbp_get_template_part( 'feedback', 'no-access' );
}
// Return contents of output buffer
return bsp_end();
}
function bsp_forum_login ($atts) {
// Unset globals
bsp_unset_globals();
// Start output buffer
bsp_start( 'bbp_login' );
// Output templates
if ( ! is_user_logged_in() ) {
if (!empty($atts['message'])) {
echo '<p>'.($atts['message']).'</p>' ;
}
bbp_get_template_part( 'form', 'user-login' );
} else {
bbp_get_template_part( 'content', 'archive-forum' );
}
// Return contents of output buffer
return bsp_end();
}