| 1 |
<?php |
| 2 |
|
| 3 |
// Exit if accessed directly |
| 4 |
if( ! defined( 'ABSPATH' ) ) exit; |
| 5 |
|
| 6 |
$args = []; |
| 7 |
$view = false; |
| 8 |
$items_count = 0; |
| 9 |
$paged = 1; |
| 10 |
$prefix_query = ''; |
| 11 |
if( ! empty( WPF()->GET['view'] ) ) $view = sanitize_title( WPF()->GET['view'] ); |
| 12 |
if( ! empty( WPF()->GET['wpfpaged'] ) ) $paged = intval( WPF()->GET['wpfpaged'] ); |
| 13 |
if( ! empty( WPF()->GET['wpff'] ) ) $args['forumid'] = intval( WPF()->GET['wpff'] ); |
| 14 |
if( ! empty( WPF()->GET['prefixid'] ) ) { |
| 15 |
$args['prefixid'] = intval( WPF()->GET['prefixid'] ); |
| 16 |
$prefix_query = '&prefixid=' . $args['prefixid']; |
| 17 |
} |
| 18 |
|
| 19 |
$type = ( $view && $view !== 'unapproved' ? 'topics' : wpforo_setting( 'topics', 'recent_posts_type' ) ); |
| 20 |
if( $view === 'unapproved' ) $type = 'posts'; |
| 21 |
if( $view === 'prefix' ) $type = 'topics'; |
| 22 |
if( ! is_user_logged_in() || ! WPF()->usergroup->can( 'aum' ) ) { |
| 23 |
$args['private'] = 0; |
| 24 |
$args['status'] = 0; |
| 25 |
} |
| 26 |
$days = apply_filters( 'wpforo_recent_posts_limit', 30 ); |
| 27 |
|
| 28 |
if( $type === 'topics' ) { |
| 29 |
$end_date = time() - ( intval( $days ) * 24 * 60 * 60 ); |
| 30 |
if( wpfval( $args, 'prefixid' ) ) $args['prefix'] = (int) wpfval( $args, 'prefixid' ); |
| 31 |
$args['where'] = "`modified` > '" . gmdate( 'Y-m-d H:i:s', $end_date ) . "'"; |
| 32 |
$args['orderby'] = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'topics', 'modified' ) : 'modified'; |
| 33 |
$args['order'] = 'DESC'; |
| 34 |
$args['offset'] = ( $paged - 1 ) * wpforo_setting( 'topics', 'topics_per_page' ); |
| 35 |
$args['row_count'] = wpforo_setting( 'topics', 'topics_per_page' ); |
| 36 |
|
| 37 |
switch( $view ) { |
| 38 |
case 'unread': |
| 39 |
$args['read'] = false; |
| 40 |
break; |
| 41 |
case 'no-replies': |
| 42 |
$args['where'] = null; |
| 43 |
$args['include'] = wpforo_get_not_replied_topicids(); |
| 44 |
break; |
| 45 |
case 'solved': |
| 46 |
$args['solved'] = 1; |
| 47 |
break; |
| 48 |
case 'unsolved': |
| 49 |
$args['solved'] = 0; |
| 50 |
break; |
| 51 |
case 'closed': |
| 52 |
$args['closed'] = 1; |
| 53 |
break; |
| 54 |
case 'opened': |
| 55 |
$args['closed'] = 0; |
| 56 |
break; |
| 57 |
case 'sticky': |
| 58 |
$args['type'] = 1; |
| 59 |
break; |
| 60 |
case 'private': |
| 61 |
$args['private'] = 1; |
| 62 |
break; |
| 63 |
case 'unapproved': |
| 64 |
$args['status'] = 1; |
| 65 |
break; |
| 66 |
case 'prefix': |
| 67 |
$args['where'] = null; |
| 68 |
break; |
| 69 |
} |
| 70 |
$topics = $view === 'no-replies' && empty( $args['include'] ) ? [] : WPF()->topic->get_topics( $args, $items_count ); |
| 71 |
} else { |
| 72 |
$end_date = time() - ( intval( $days ) * 24 * 60 * 60 ); |
| 73 |
if( $view !== 'unapproved' ) $args['where'] = "`created` > '" . gmdate( 'Y-m-d H:i:s', $end_date ) . "'"; |
| 74 |
$args['orderby'] = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'posts', 'created' ) : 'created'; |
| 75 |
$args['order'] = 'DESC'; |
| 76 |
$args['offset'] = ( $paged - 1 ) * wpforo_setting( 'topics', 'posts_per_page' ); |
| 77 |
$args['row_count'] = wpforo_setting( 'topics', 'posts_per_page' ); |
| 78 |
switch( $view ) { |
| 79 |
case 'unapproved': |
| 80 |
$args['status'] = 1; |
| 81 |
break; |
| 82 |
} |
| 83 |
$posts = WPF()->post->get_posts( $args, $items_count ); |
| 84 |
} |
| 85 |
?> |
| 86 |
<div class="wpforo-recent-wrap"> |
| 87 |
<div class="wpf-head-bar"> |
| 88 |
<div class="wpf-head-top"> |
| 89 |
<h1 id="wpforo-title"> |
| 90 |
<?php |
| 91 |
switch( $view ) { |
| 92 |
case 'unread': |
| 93 |
$page_title = wpforo_phrase( 'Unread Posts', false ); |
| 94 |
break; |
| 95 |
case 'no-replies': |
| 96 |
$page_title = wpforo_phrase( 'Not Replied Topics', false ); |
| 97 |
break; |
| 98 |
case 'solved': |
| 99 |
$page_title = wpforo_phrase( 'Solved Topics', false ); |
| 100 |
break; |
| 101 |
case 'unsolved': |
| 102 |
$page_title = wpforo_phrase( 'Unsolved Topics', false ); |
| 103 |
break; |
| 104 |
case 'closed': |
| 105 |
$page_title = wpforo_phrase( 'Closed Topics', false ); |
| 106 |
break; |
| 107 |
case 'opened': |
| 108 |
$page_title = wpforo_phrase( 'Open Topics', false ); |
| 109 |
break; |
| 110 |
case 'sticky': |
| 111 |
$page_title = wpforo_phrase( 'Sticky Topics', false ); |
| 112 |
break; |
| 113 |
case 'private': |
| 114 |
$page_title = wpforo_phrase( 'Private Topics', false ); |
| 115 |
break; |
| 116 |
case 'unapproved': |
| 117 |
$page_title = wpforo_phrase( 'Unapproved Posts', false ); |
| 118 |
break; |
| 119 |
default: |
| 120 |
$page_title = wpforo_phrase( 'Recent Posts', false ); |
| 121 |
break; |
| 122 |
} |
| 123 |
?> |
| 124 |
<?php echo apply_filters( 'wpforo_recent_posts_page_title', $page_title, $args, $view ); ?> |
| 125 |
</h1> |
| 126 |
<div class="wpforo-feed" style="float: none;"> |
| 127 |
<?php if( wpforo_setting( 'rss', 'feed' ) ): ?> |
| 128 |
<span class="wpf-feed-forums"> |
| 129 |
<a href="<?php WPF()->feed->rss2_url( true, 'forum' ); ?>" title="<?php wpforo_phrase( 'Forums RSS Feed' ) ?>" target="_blank"> |
| 130 |
<span><?php wpforo_phrase( 'Forums' ) ?></span> <i class="fas fa-rss wpfsx"></i> |
| 131 |
</a> |
| 132 |
</span> |
| 133 |
<sep> | </sep> |
| 134 |
<span class="wpf-feed-topics"> |
| 135 |
<a href="<?php WPF()->feed->rss2_url( true, 'topic' ); ?>" title="<?php wpforo_phrase( 'Topics RSS Feed' ) ?>" target="_blank"> |
| 136 |
<span><?php wpforo_phrase( 'Topics' ) ?></span> <i class="fas fa-rss wpfsx"></i> |
| 137 |
</a> |
| 138 |
</span> |
| 139 |
<?php endif; ?> |
| 140 |
</div> |
| 141 |
</div> |
| 142 |
<div class="wpf-head-bottom"> |
| 143 |
<div class="wpf-head-prefix"> |
| 144 |
<?php do_action( 'wpforo_recent_posts_page_under_head', $args, $view ); ?> |
| 145 |
</div> |
| 146 |
<div class="wpf-head-buttons"> |
| 147 |
<div class="wpf-head-filter"> |
| 148 |
<select onchange="window.location.assign(this.value)"> |
| 149 |
<option value="?view=<?php echo $prefix_query ?>" <?php wpfo_check( $view, 'recent', 'selected' ) ?>> |
| 150 |
<?php wpforo_phrase( 'Recent Posts' ) ?> |
| 151 |
</option> |
| 152 |
<option value="?view=unread<?php echo $prefix_query ?>" <?php wpfo_check( $view, 'unread', 'selected' ) ?>> |
| 153 |
<?php wpforo_phrase( 'Unread Posts' ) ?> |
| 154 |
</option> |
| 155 |
<option value="?view=no-replies<?php echo $prefix_query ?>" <?php wpfo_check( $view, 'no-replies', 'selected' ) ?>> |
| 156 |
<?php wpforo_phrase( 'Not Replied Topics' ) ?> |
| 157 |
</option> |
| 158 |
<option value="?view=solved<?php echo $prefix_query ?>" <?php wpfo_check( $view, 'solved', 'selected' ) ?>> |
| 159 |
<?php wpforo_phrase( 'Solved Topics' ) ?> |
| 160 |
</option> |
| 161 |
<option value="?view=unsolved<?php echo $prefix_query ?>" <?php wpfo_check( $view, 'unsolved', 'selected' ) ?>> |
| 162 |
<?php wpforo_phrase( 'Unsolved Topics' ) ?> |
| 163 |
</option> |
| 164 |
<option value="?view=closed<?php echo $prefix_query ?>" <?php wpfo_check( $view, 'closed', 'selected' ) ?>> |
| 165 |
<?php wpforo_phrase( 'Closed Topics' ) ?> |
| 166 |
</option> |
| 167 |
<option value="?view=opened<?php echo $prefix_query ?>" <?php wpfo_check( $view, 'opened', 'selected' ) ?>> |
| 168 |
<?php wpforo_phrase( 'Open Topics' ) ?> |
| 169 |
</option> |
| 170 |
<option value="?view=sticky<?php echo $prefix_query ?>" <?php wpfo_check( $view, 'sticky', 'selected' ) ?>> |
| 171 |
<?php wpforo_phrase( 'Sticky Topics' ) ?> |
| 172 |
</option> |
| 173 |
<?php if( wpforo_current_user_is( 'admin' ) || wpforo_current_user_is( 'moderator' ) ): ?> |
| 174 |
<option value="?view=private<?php echo $prefix_query ?>" <?php wpfo_check( $view, 'private', 'selected' ) ?>> |
| 175 |
<?php wpforo_phrase( 'Private Topics' ) ?> |
| 176 |
</option> |
| 177 |
<option value="?view=unapproved<?php echo $prefix_query ?>" <?php wpfo_check( $view, 'unapproved', 'selected' ) ?>> |
| 178 |
<?php wpforo_phrase( 'Unapproved Posts' ) ?> |
| 179 |
</option> |
| 180 |
<?php endif; ?> |
| 181 |
</select> |
| 182 |
</div> |
| 183 |
<div class="wpf-snavi"> |
| 184 |
<?php WPF()->tpl->pagenavi( $paged, $items_count, $args['row_count'], false ); ?> |
| 185 |
</div> |
| 186 |
</div> |
| 187 |
</div> |
| 188 |
</div> |
| 189 |
<?php if( $type === 'topics' ): ?> |
| 190 |
<div class="wpforo-recent-content wpfr-topics"> |
| 191 |
<?php if( ! empty( $topics ) ): ?> |
| 192 |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> |
| 193 |
<tr class="wpf-htr"> |
| 194 |
<td class="wpf-shead-avatar"> </td> |
| 195 |
<td class="wpf-shead-title"><?php wpforo_phrase( 'Topic Title' ) ?></td> |
| 196 |
<td class="wpf-shead-forum"><?php wpforo_phrase( 'Forum' ) ?></td> |
| 197 |
</tr> |
| 198 |
<?php foreach( $topics as $topic ) : $topicid = $topic['topicid']; ?> |
| 199 |
<?php |
| 200 |
$posts = []; |
| 201 |
$member = wpforo_member( $topic ); |
| 202 |
$forum = wpforo_forum( $topic['forumid'] ); |
| 203 |
if( isset( $topic['last_post'] ) && $topic['last_post'] != 0 ) { |
| 204 |
$last_post = wpforo_post( $topic['last_post'] ); |
| 205 |
$last_poster = wpforo_member( $last_post ); |
| 206 |
} |
| 207 |
if( isset( $topic['first_postid'] ) && $topic['first_postid'] != 0 ) { |
| 208 |
$first_post = wpforo_post( $topic['first_postid'] ); |
| 209 |
$intro_posts = wpforo_setting( 'topics', 'layout_extended_intro_posts_count' ); |
| 210 |
if( $intro_posts < 1 ) { |
| 211 |
$intro_posts = null; |
| 212 |
} else { |
| 213 |
$intro_posts = ( $intro_posts > 1 ) ? ( $intro_posts - 1 ) : $intro_posts = 0; |
| 214 |
} |
| 215 |
$first_poster = wpforo_member( $first_post ); |
| 216 |
if( ! $view && apply_filters( 'wpforo_recent_topics_intro', true, $topic ) ) { |
| 217 |
$posts = WPF()->post->get_posts( [ 'topicid' => $topic['topicid'], 'orderby' => '`is_first_post` ASC, `created` DESC, `postid` DESC', 'row_count' => $intro_posts ] ); |
| 218 |
} |
| 219 |
} |
| 220 |
$topic_url = wpforo_topic( $topic['topicid'], 'url' ); |
| 221 |
$topic_posturl = ( $view == 'unread' && wpfval( $last_post, 'url' ) ) ? $last_post['url'] : WPF()->topic->get_url( $topicid ); |
| 222 |
$post_toglle = wpforo_setting( 'topics', 'layout_extended_intro_posts_toggle' ); |
| 223 |
?> |
| 224 |
<tr class="wpf-ttr <?php wpforo_unread( $topic['topicid'], 'topic' ); ?>"> |
| 225 |
<td class="wpf-spost-avatar"> |
| 226 |
<?php if( WPF()->usergroup->can( 'va' ) && wpforo_setting( 'profiles', 'avatars' ) ): ?> |
| 227 |
<?php echo wpforo_user_avatar( $member, 30 ) ?> |
| 228 |
<?php endif; ?> |
| 229 |
</td> |
| 230 |
<td class="wpf-spost-title"> |
| 231 |
<?php wpforo_topic_title( $topic, $topic_url, '{i}{p}{au}{t}{/a}{n}{v}', true, 'wpf-spost-title-link' ) ?> |
| 232 |
<p style="font-size:12px"><?php wpforo_member_link( $member, 'by' ); ?> <?php if( wpfkey( $topic, 'created' ) ) wpforo_date( $topic['created'] ); ?> | <span |
| 233 |
style="text-transform: lowercase;"><?php wpforo_phrase( 'Last post' ) ?>:</span> <?php if( wpfkey( $last_post, 'created' ) ) wpforo_date( |
| 234 |
$last_post['created'] |
| 235 |
); ?></p> |
| 236 |
</td> |
| 237 |
<td class="wpf-spost-forum"><a href="<?php echo $forum['url'] ?>"><?php echo esc_html( $forum['title'] ); ?></a></td> |
| 238 |
</tr> |
| 239 |
<?php if( ! empty( $posts ) && is_array( $posts ) ) : ?> |
| 240 |
<tr class="wpf-ptr"> |
| 241 |
<td class="wpf-spost-icon"> </td> |
| 242 |
<td colspan="2" class="wpf-stext"> |
| 243 |
<ul> |
| 244 |
<?php foreach( $posts as $post ) : ?> |
| 245 |
<?php $poster = wpforo_member( $post ); ?> |
| 246 |
<li> |
| 247 |
|
| 248 |
<i class="fas fa-reply fa-rotate-180 wpfsx wpfcl-0"></i> <a href="<?php echo esc_url( (string) wpforo_post( $post['postid'], 'url' ) ); ?>" |
| 249 |
title="<?php wpforo_phrase( 'REPLY:' ) ?> <?php echo esc_html( |
| 250 |
wpforo_text( $post['body'], 100, false ) |
| 251 |
) ?>"><?php echo( ( $post_body = esc_html( |
| 252 |
wpforo_text( $post['body'], wpforo_setting( 'topics', 'layout_extended_intro_posts_length' ), false ) |
| 253 |
) ) ? $post_body : esc_html( $post['title'] ) ) ?></a> |
| 254 |
<div class="wpf-spost-topic-recent-posts"><?php wpforo_date( $post['created'] ); ?> <?php wpforo_member_link( $poster, 'by %s', 5 ); ?> </div> |
| 255 |
<br class="wpf-clear"> |
| 256 |
</li> |
| 257 |
<?php endforeach ?> |
| 258 |
<?php if( intval( $topic['posts'] ) > ( $intro_posts + 1 ) ): ?> |
| 259 |
<li style="text-align:right;"><a href="<?php echo esc_url( (string) $topic_url ) ?>"><?php wpforo_phrase( 'view all posts', true, 'lower' ); ?> <i |
| 260 |
class="fas fa-angle-right" aria-hidden="true"></i></a></li> |
| 261 |
<?php endif ?> |
| 262 |
</ul> |
| 263 |
</td> |
| 264 |
</tr> |
| 265 |
<?php else: ?> |
| 266 |
<tr class="wpf-tr-sep"> |
| 267 |
<td colspan="3" style="height: 2px;"></td> |
| 268 |
</tr> |
| 269 |
<?php endif; ?> |
| 270 |
<?php endforeach ?> |
| 271 |
</table> |
| 272 |
<?php else: ?> |
| 273 |
<?php if( $view == 'unread' ): ?> |
| 274 |
<p class="wpf-p-error"><?php wpforo_phrase( 'No unread posts were found' ) ?> </p> |
| 275 |
<?php else: ?> |
| 276 |
<p class="wpf-p-error"><?php wpforo_phrase( 'No topics were found here' ) ?> </p> |
| 277 |
<?php endif; ?> |
| 278 |
<?php endif; ?> |
| 279 |
</div> |
| 280 |
<?php else: ?> |
| 281 |
<div class="wpforo-recent-content wpfr-posts"> |
| 282 |
<?php if( ! empty( $posts ) ): ?> |
| 283 |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> |
| 284 |
<tr class="wpf-htr"> |
| 285 |
<td class="wpf-shead-avatar"> </td> |
| 286 |
<td class="wpf-shead-title"><?php wpforo_phrase( 'Post Title' ) ?></td> |
| 287 |
<td class="wpf-shead-forum"><?php wpforo_phrase( 'Forum' ) ?></td> |
| 288 |
</tr> |
| 289 |
<?php foreach( $posts as $post ) : $postid = $post['postid']; $title = $post['title']; ?> |
| 290 |
<?php |
| 291 |
$member = wpforo_member( $post ); |
| 292 |
$forum = wpforo_forum( $post['forumid'] ); |
| 293 |
?> |
| 294 |
<tr class="wpf-ttr <?php wpforo_unread( $post['topicid'], 'post', true, $post['postid'] ); ?>"> |
| 295 |
<td class="wpf-spost-avatar"> |
| 296 |
<?php if( WPF()->usergroup->can( 'va' ) && wpforo_setting( 'profiles', 'avatars' ) ): ?> |
| 297 |
<?php echo wpforo_user_avatar( $member, 40 ) ?> |
| 298 |
<?php endif; ?> |
| 299 |
</td> |
| 300 |
<td class="wpf-spost-title"> |
| 301 |
<a href="<?php echo esc_url( WPF()->post->get_url( $postid ) ) ?>" class="wpf-spost-title-link" |
| 302 |
title="<?php wpforo_phrase( 'View entire post' ) ?>"><?php echo esc_html( $title ) ?> <i class="fas fa-chevron-right" style="font-size:11px;"></i></a> |
| 303 |
<p style="font-size:12px"><?php wpforo_member_link( $member, 'by' ); ?>, <?php wpforo_date( $post['created'] ); ?></p> |
| 304 |
</td> |
| 305 |
<td class="wpf-spost-forum"><a href="<?php echo $forum['url'] ?>"><?php echo esc_html( $forum['title'] ); ?></a></td> |
| 306 |
</tr> |
| 307 |
<?php if( apply_filters( 'wpforo_recent_posts_intro', true, $post ) ): ?> |
| 308 |
<tr class="wpf-ptr"> |
| 309 |
<td class="wpf-spost-icon"> </td> |
| 310 |
<td colspan="2" class="wpf-stext"> |
| 311 |
<?php |
| 312 |
$body = wpforo_content_filter( $body, $post ); |
| 313 |
$body = preg_replace( '#\[attach][^\[\]]*\[/attach]#i', '', strip_tags( $body ) ); |
| 314 |
wpforo_text( $body, 200 ); |
| 315 |
?> |
| 316 |
</td> |
| 317 |
</tr> |
| 318 |
<?php endif; ?> |
| 319 |
<?php endforeach ?> |
| 320 |
</table> |
| 321 |
<?php else: ?> |
| 322 |
<p class="wpf-p-error"><?php wpforo_phrase( 'No posts were found here' ) ?> </p> |
| 323 |
<?php endif; ?> |
| 324 |
</div> |
| 325 |
<?php endif; ?> |
| 326 |
|
| 327 |
<div class="wpf-snavi"> |
| 328 |
<?php WPF()->tpl->pagenavi( $paged, $items_count, $args['row_count'], false ); ?> |
| 329 |
</div> |
| 330 |
|
| 331 |
</div> |
| 332 |
<p> </p> |
| 333 |
<p> </p> |
| 334 |
<p> </p> |
| 335 |
|