wenpai.org/wp-content/plugins/bbp-style-pack/blocks/bsp-latest-activity-widget.php
2024-12-09 23:55:39 +08:00

248 lines
9.8 KiB
PHP

<?php
// Exit if accessed directly
defined( 'ABSPATH' ) || exit;
//where to show...
$check = true ;
if ( !empty( $attributes['bbpressOnly'] ) ) {
//then set to false and make below turn to true
$check = false ;
//only show on bbpress pages or if in wdigets or page/post edits
if (is_bbpress()) $check=true ;
elseif (isset($_REQUEST['context'])&& $_REQUEST['context'] == 'edit') {
$check = true ;
}
}
//if check is false, then return ;
if (!$check) return ;
//see if we have multiple forums
// Sanitise to make sure it is valid
$attributes['laParentForum'] = str_replace(' ', '', $attributes['laParentForum']);
//check that laParentForum only contains numbers or numbers separated by commas
$re = '/^\d+(?:,\d+)*$/';
if ( !preg_match($re, $attributes['laParentForum']) ) {
$attributes['laParentForum'] = 'all';
}
//check if it's all and if so set post_parent__in
if (empty ($attributes['laParentForum'])) $attributes['laParentForum'] = '' ;
if ($attributes['laParentForum'] == 'all' ) $attributes['post_parent__in'] =''; //to set up a null post parent in
//then test if it's not number (either single forum or 0 for root) - if it is, then that's also ok, so don't do further tests
elseif ( !is_numeric( $attributes['laParentForum'] ) ) {
//otherwise it is a list of forums (or rubbish!) so we need to create a post_parent_in array
$attributes['post_parent__in'] = explode(",",$attributes['laParentForum']);
$attributes['laParentForum'] = '' ; // to nullify it
}
//it's a single forum so
else $attributes['post_parent__in'] =''; //to set up a null post parent in
//now check if we should actually be excluding instead of including - done this way as $attributes['laExcludeForum'] may be blank, which means we need to do the above to ensure it catches include forums if it is.
if (!empty ($attributes['laExcludeForum'])) {
$attributes['post_parent__in'] = '' ; // to get rid of it
$attributes['laParentForum'] = '' ; // to nullify it
//we should be excluding, so ...
// Sanitise to make sure it is valid
$attributes['laExcludedForum'] = str_replace(' ', '', $attributes['laExcludedForum']);
//check that laExcludedForum only contains numbers or numbers separated by commas
if ( !preg_match($re, $attributes['laExcludedForum']) ) {
$attributes['laExcludedForum'] = '';
}
//check if it makes sense !
if (is_numeric( $attributes['laExcludedForum'] ) ) $attributes['post_parent__not_in'] = array ($attributes['laExcludedForum']) ;
if ( !is_numeric( $attributes['laExcludedForum'] ) ) {
//otherwise it is a list of forums (or rubbish!) so we need to create a post_parent__not_in array
$attributes['post_parent__not_in'] = explode(",",$attributes['laExcludedForum']);
}
}
// How do we want to order our results?
if (empty ($attributes['laOrderBy'] )) $attributes['laOrderBy'] = '';
switch ( $attributes['laOrderBy'] ) {
// Order by most recent replies
case 'freshness' :
$topics_query = array(
'post_type' => bbp_get_topic_post_type(),
'post_parent' => $attributes['laParentForum'],
'posts_per_page' => (int) $attributes['laMaxShown'],
'post_status' => array( bbp_get_public_status_id(), bbp_get_closed_status_id() ),
'ignore_sticky_posts' => true,
'no_found_rows' => true,
'meta_key' => '_bbp_last_active_time',
'orderby' => 'meta_value',
'order' => 'DESC',
);
break;
// Order by total number of replies
case 'popular' :
$topics_query = array(
'post_type' => bbp_get_topic_post_type(),
'post_parent' => $attributes['laParentForum'],
'posts_per_page' => (int) $attributes['laMaxShown'],
'post_status' => array( bbp_get_public_status_id(), bbp_get_closed_status_id() ),
'ignore_sticky_posts' => true,
'no_found_rows' => true,
'meta_key' => '_bbp_reply_count',
'orderby' => 'meta_value',
'order' => 'DESC'
);
break;
// Order by which topic was created most recently
case 'newness' :
default :
$topics_query = array(
'post_type' => bbp_get_topic_post_type(),
'post_parent' => $attributes['laParentForum'],
'posts_per_page' => (int) $attributes['laMaxShown'],
'post_status' => array( bbp_get_public_status_id(), bbp_get_closed_status_id() ),
'ignore_sticky_posts' => true,
'no_found_rows' => true,
'order' => 'DESC'
);
break;
}
//set size for avatar
global $bsp_style_settings_la ;
$avatar_size = (!empty($bsp_style_settings_la['AvatarSize']) ? $bsp_style_settings_la['AvatarSize'] : '14') ;
//allow other plugin (eg private groups) to filter this query
$topics_query = apply_filters( 'bsp_activity_widget', $topics_query ) ;
// The default forum query with allowed forum ids array added
//reset the max to be shown
$topics_query['posts_per_page'] =(int) $attributes['laMaxShown'] ;
//add any include/exclude forums ;
if (!empty ($attributes['post_parent__not_in'])) $topics_query['post_parent__not_in'] = $attributes['post_parent__not_in'] ;
else $topics_query['post_parent__in']= $attributes['post_parent__in'] ;
// Note: private and hidden forums will be excluded via the
// bbp_pre_get_posts_normalize_forum_visibility action and function.
$widget_query = new WP_Query( $topics_query );
// Bail if no topics are found
if ( ! $widget_query->have_posts() ) {
return;
}
echo '<div class="widget bsp-widget bsp-la-container">';
do_action ('bsp_latest_activity_widget_before_title') ;
if ( !empty( $attributes['laTitle'] ) ) {
echo '<span class="bsp-la-title"><h3 class="widget-title bsp-widget-title">' . esc_html($attributes['laTitle']) . '</h3></span>' ;
}
do_action ('bsp_latest_activity_widget_after_title') ;
while ( $widget_query->have_posts() ) :
$widget_query->the_post();
$topic_id = bbp_get_topic_id( $widget_query->post->ID );
$author_link = '';
//check if this topic has a reply
$reply = get_post_meta( $topic_id, '_bbp_last_reply_id',true);
// Maybe get the topic author
if ( ! empty( $attributes['laShowAuthor'] ) ) {
//do we display avatar?
if (!empty ($attributes['laHideAvatar'])) $type='name' ;
else $type='both' ;
//if no reply the author
if (empty ($reply)) $author_link = bbp_get_topic_author_link( array( 'post_id' => $topic_id, 'type' => $type, 'size' => $avatar_size ) );
//if has a reply then get the author of the reply
else $author_link = bbp_get_reply_author_link( array( 'post_id' => $reply, 'type' => $type, 'size' => $avatar_size) );
} ?>
<ul>
<li>
<?php
//if no replies set the link to the topic
if (empty ($reply)) {?>
<a class="bsp-la-reply-topic-title" href="<?php bbp_topic_permalink( $topic_id ); ?>"><?php bbp_topic_title( $topic_id ); ?></a>
<?php }
//if replies then set link to the latest reply
else {
echo '<a class="bsp-la-reply-topic-title " href="' . esc_url( bbp_get_reply_url( $reply ) ) . '" title="' . esc_attr( bbp_get_reply_excerpt( $reply, 50 ) ) . '">' . esc_html(bbp_get_reply_topic_title( $reply )) . '</a>';
} ?>
<?php if ( ! empty( $author_link ) ) : ?>
<div class = "bsp-activity-author">
<?php
if (empty($reply)) {
echo '<span class="bsp-la-text">' ;
echo esc_html($attributes['laTopicAuthorLabel']).'</span> <span class="bsp-la-topic-author topic-author">' . esc_url($author_link) . '</span>' ;
}
else {
echo '<span class="bsp-la-text">' ;
echo esc_html($attributes['laReplyAuthorLabel']).'</span> <span class=" bsp-la-topic-author topic-author">' . esc_url($author_link) . '</span>' ;
} ?>
</div>
<?php endif; ?>
<?php if (bbp_get_topic_post_type() == get_post_type()) {
$topic = get_the_ID(); ?>
<span class="bsp-topic-posts">
<?php //if show author off, then add a <br>
if (empty ($attributes['laShowAuthor'])) echo '<br>' ;
if (!empty ($attributes ['laShowReplyCount'])) {
echo esc_html($attributes['laReplyCountLabel']) ;
bbp_topic_reply_count($topic); ?>
</span>
<?php }
} ?>
<?php if ( ! empty( $attributes['laShowFreshness'] ) ) : ?>
<?php $output = bbp_get_topic_last_active_time( $topic_id ) ;
//shorten freshness?
if ( ! empty( $attributes['laShortenFreshness'] ) ) $output = preg_replace( '/, .*[^ago]/', ' ', $output ); ?>
<div class = "bsp-activity-freshness"><?php
echo '<span class="bsp-la-freshness">'.$output. '</span>' ;
//bbp_topic_last_active_time( $topic_id ); ?></div>
<?php endif; ?>
<?php if ( ! empty( $attributes['laShowForum'] ) ) : ?>
<div class = "bsp-activity-forum">
<?php
$forum = bbp_get_topic_forum_id($topic_id);
if ( ! empty( $attributes['laShowParentForum'] ) && !empty(bbp_get_forum_parent_id($forum)) ) $forum1 = bbp_get_forum_title(bbp_get_forum_parent_id($forum)) . ' - ' . bbp_get_forum_title($forum);
else $forum1 = bbp_get_forum_title($forum) ;
$forum2 = esc_url( bbp_get_forum_permalink( $forum )) ;
echo '<span class="bsp-la-text">' ;
esc_html_e ( 'in ', 'bbp-style-pack' ) ;
echo '</span>' ; ?>
<a class="bsp-la-forum-title bbp-forum-title" href="<?php echo esc_html($forum2); ?>"><?php echo esc_html($forum1) ; ?></a>
</div>
<?php endif; ?>
</li>
</ul>
<?php endwhile; ?>
<?php do_action( 'bbp_after_latest_activity_widget' ); ?>
</div>
<?php