bbPress - Version 2.5.9

Version Description

  • Improved user mentions
Download this release

Release Info

Developer johnjamesjacoby
Plugin Icon 128x128 bbPress
Version 2.5.9
Comparing to
See all releases

Code changes from version 2.5.8 to 2.5.9

bbpress.php CHANGED
@@ -5,7 +5,7 @@
5
  *
6
  * bbPress is forum software with a twist from the creators of WordPress.
7
  *
8
- * $Id: bbpress.php 5816 2015-07-13 16:13:27Z netweb $
9
  *
10
  * @package bbPress
11
  * @subpackage Main
@@ -17,7 +17,7 @@
17
  * Description: bbPress is forum software with a twist from the creators of WordPress.
18
  * Author: The bbPress Community
19
  * Author URI: http://bbpress.org
20
- * Version: 2.5.8
21
  * Text Domain: bbpress
22
  * Domain Path: /languages/
23
  */
@@ -190,7 +190,7 @@ final class bbPress {
190
 
191
  /** Versions **********************************************************/
192
 
193
- $this->version = '2.5.8-5815';
194
  $this->db_version = '250';
195
 
196
  /** Paths *************************************************************/
5
  *
6
  * bbPress is forum software with a twist from the creators of WordPress.
7
  *
8
+ * $Id: bbpress.php 6018 2016-04-29 17:12:13Z johnjamesjacoby $
9
  *
10
  * @package bbPress
11
  * @subpackage Main
17
  * Description: bbPress is forum software with a twist from the creators of WordPress.
18
  * Author: The bbPress Community
19
  * Author URI: http://bbpress.org
20
+ * Version: 2.5.9
21
  * Text Domain: bbpress
22
  * Domain Path: /languages/
23
  */
190
 
191
  /** Versions **********************************************************/
192
 
193
+ $this->version = '2.5.9-6017';
194
  $this->db_version = '250';
195
 
196
  /** Paths *************************************************************/
includes/common/formatting.php CHANGED
@@ -316,24 +316,19 @@ function bbp_rel_nofollow_callback( $matches = array() ) {
316
  * @return string Content with converted URIs.
317
  */
318
  function bbp_make_clickable( $text ) {
319
- $r = '';
320
- $in_code = false;
321
- $textarr = preg_split( '/(<[^<>]+>)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // split out HTML tags
322
 
323
  foreach ( $textarr as $piece ) {
324
 
325
- switch ( $piece ) {
326
- case '<code>' :
327
- case '<pre>' :
328
- $in_code = true;
329
- break;
330
- case '</code>' :
331
- case '</pre>' :
332
- $in_code = false;
333
- break;
334
  }
335
 
336
- if ( $in_code || empty( $piece ) || ( $piece[0] === '<' && ! preg_match('|^<\s*[\w]{1,20}+://|', $piece) ) ) {
337
  $r .= $piece;
338
  continue;
339
  }
@@ -345,38 +340,112 @@ function bbp_make_clickable( $text ) {
345
  if ( 2101 < strlen( $chunk ) ) {
346
  $r .= $chunk; // Too big, no whitespace: bail.
347
  } else {
348
- $r .= make_clickable( $chunk );
349
  }
350
  }
351
  } else {
352
- $ret = " $piece "; // Pad with whitespace to simplify the regexes
353
-
354
- $url_clickable = '~
355
- ([\\s(<.,;:!?]) # 1: Leading whitespace, or punctuation
356
- ( # 2: URL
357
- [\\w]{1,20}+:// # Scheme and hier-part prefix
358
- (?=\S{1,2000}\s) # Limit to URLs less than about 2000 characters long
359
- [\\w\\x80-\\xff#%\\~/@\\[\\]*(+=&$-]*+ # Non-punctuation URL character
360
- (?: # Unroll the Loop: Only allow puctuation URL character if followed by a non-punctuation URL character
361
- [\'.,;:!?)] # Punctuation URL character
362
- [\\w\\x80-\\xff#%\\~/@\\[\\]*(+=&$-]++ # Non-punctuation URL character
363
- )*
364
- )
365
- (\)?) # 3: Trailing closing parenthesis (for parethesis balancing post processing)
366
- ~xS'; // The regex is a non-anchored pattern and does not have a single fixed starting character.
367
- // Tell PCRE to spend more time optimizing since, when used on a page load, it will probably be used several times.
368
-
369
- $ret = preg_replace_callback( $url_clickable, '_make_url_clickable_cb', $ret );
370
-
371
- $ret = preg_replace_callback( '#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]+)#is', '_make_web_ftp_clickable_cb', $ret );
372
- $ret = preg_replace_callback( '#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', '_make_email_clickable_cb', $ret );
373
-
374
  $ret = substr( $ret, 1, -1 ); // Remove our whitespace padding.
375
  $r .= $ret;
376
  }
377
  }
378
 
379
  // Cleanup of accidental links within links
380
- $r = preg_replace( '#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', "$1$3</a>", $r );
381
- return $r;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
382
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
316
  * @return string Content with converted URIs.
317
  */
318
  function bbp_make_clickable( $text ) {
319
+ $r = '';
320
+ $textarr = preg_split( '/(<[^<>]+>)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // split out HTML tags
321
+ $nested_code_pre = 0; // Keep track of how many levels link is nested inside <pre> or <code>
322
 
323
  foreach ( $textarr as $piece ) {
324
 
325
+ if ( preg_match( '|^<code[\s>]|i', $piece ) || preg_match( '|^<pre[\s>]|i', $piece ) || preg_match( '|^<script[\s>]|i', $piece ) || preg_match( '|^<style[\s>]|i', $piece ) ) {
326
+ $nested_code_pre++;
327
+ } elseif ( $nested_code_pre && ( '</code>' === strtolower( $piece ) || '</pre>' === strtolower( $piece ) || '</script>' === strtolower( $piece ) || '</style>' === strtolower( $piece ) ) ) {
328
+ $nested_code_pre--;
 
 
 
 
 
329
  }
330
 
331
+ if ( $nested_code_pre || empty( $piece ) || ( $piece[0] === '<' && ! preg_match( '|^<\s*[\w]{1,20}+://|', $piece ) ) ) {
332
  $r .= $piece;
333
  continue;
334
  }
340
  if ( 2101 < strlen( $chunk ) ) {
341
  $r .= $chunk; // Too big, no whitespace: bail.
342
  } else {
343
+ $r .= bbp_make_clickable( $chunk );
344
  }
345
  }
346
  } else {
347
+ $ret = " {$piece} "; // Pad with whitespace to simplify the regexes
348
+ $ret = apply_filters( 'bbp_make_clickable', $ret );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
  $ret = substr( $ret, 1, -1 ); // Remove our whitespace padding.
350
  $r .= $ret;
351
  }
352
  }
353
 
354
  // Cleanup of accidental links within links
355
+ return preg_replace( '#(<a([ \r\n\t]+[^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', "$1$3</a>", $r );
356
+ }
357
+
358
+ /**
359
+ * Make URLs clickable in content areas
360
+ *
361
+ * @since 2.6.0
362
+ *
363
+ * @param string $text
364
+ * @return string
365
+ */
366
+ function bbp_make_urls_clickable( $text = '' ) {
367
+ $url_clickable = '~
368
+ ([\\s(<.,;:!?]) # 1: Leading whitespace, or punctuation
369
+ ( # 2: URL
370
+ [\\w]{1,20}+:// # Scheme and hier-part prefix
371
+ (?=\S{1,2000}\s) # Limit to URLs less than about 2000 characters long
372
+ [\\w\\x80-\\xff#%\\~/@\\[\\]*(+=&$-]*+ # Non-punctuation URL character
373
+ (?: # Unroll the Loop: Only allow puctuation URL character if followed by a non-punctuation URL character
374
+ [\'.,;:!?)] # Punctuation URL character
375
+ [\\w\\x80-\\xff#%\\~/@\\[\\]*(+=&$-]++ # Non-punctuation URL character
376
+ )*
377
+ )
378
+ (\)?) # 3: Trailing closing parenthesis (for parethesis balancing post processing)
379
+ ~xS';
380
+
381
+ // The regex is a non-anchored pattern and does not have a single fixed starting character.
382
+ // Tell PCRE to spend more time optimizing since, when used on a page load, it will probably be used several times.
383
+ return preg_replace_callback( $url_clickable, '_make_url_clickable_cb', $text );
384
+ }
385
+
386
+ /**
387
+ * Make FTP clickable in content areas
388
+ *
389
+ * @since 2.6.0
390
+ *
391
+ * @see make_clickable()
392
+ *
393
+ * @param string $text
394
+ * @return string
395
+ */
396
+ function bbp_make_ftps_clickable( $text = '' ) {
397
+ return preg_replace_callback( '#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]+)#is', '_make_web_ftp_clickable_cb', $text );
398
+ }
399
+
400
+ /**
401
+ * Make emails clickable in content areas
402
+ *
403
+ * @since 2.6.0
404
+ *
405
+ * @see make_clickable()
406
+ *
407
+ * @param string $text
408
+ * @return string
409
+ */
410
+ function bbp_make_emails_clickable( $text = '' ) {
411
+ return preg_replace_callback( '#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', '_make_email_clickable_cb', $text );
412
+ }
413
+
414
+ /**
415
+ * Make mentions clickable in content areas
416
+ *
417
+ * @since 2.6.0
418
+ *
419
+ * @see make_clickable()
420
+ *
421
+ * @param string $text
422
+ * @return string
423
+ */
424
+ function bbp_make_mentions_clickable( $text = '' ) {
425
+ return preg_replace_callback( '#([\s>])@([0-9a-zA-Z-_]+)#i', 'bbp_make_mentions_clickable_callback', $text );
426
  }
427
+
428
+ /**
429
+ * Callback to convert mention matchs to HTML A tag.
430
+ *
431
+ * @since 2.6.0
432
+ *
433
+ * @param array $matches Single Regex Match.
434
+ *
435
+ * @return string HTML A tag with link to user profile.
436
+ */
437
+ function bbp_make_mentions_clickable_callback( $matches = array() ) {
438
+
439
+ // Get user; bail if not found
440
+ $user = get_user_by( 'slug', $matches[2] );
441
+ if ( empty( $user ) || bbp_is_user_inactive( $user->ID ) ) {
442
+ return $matches[0];
443
+ }
444
+
445
+ // Create the link to the user's profile
446
+ $url = bbp_get_user_profile_url( $user->ID );
447
+ $anchor = '<a href="%1$s" rel="nofollow">@%2$s</a>';
448
+ $link = sprintf( $anchor, esc_url( $url ), esc_html( $user->user_nicename ) );
449
+
450
+ return $matches[1] . $link;
451
+ }
includes/core/filters.php CHANGED
@@ -139,7 +139,6 @@ add_filter( 'bbp_get_user_profile_edit_link', 'stripslashes' );
139
 
140
  // Run filters on reply content
141
  add_filter( 'bbp_get_reply_content', 'bbp_make_clickable', 4 );
142
- add_filter( 'bbp_get_reply_content', 'bbp_mention_filter', 5 );
143
  add_filter( 'bbp_get_reply_content', 'wptexturize', 6 );
144
  add_filter( 'bbp_get_reply_content', 'convert_chars', 8 );
145
  add_filter( 'bbp_get_reply_content', 'capital_P_dangit', 10 );
@@ -150,7 +149,6 @@ add_filter( 'bbp_get_reply_content', 'bbp_rel_nofollow', 50 );
150
 
151
  // Run filters on topic content
152
  add_filter( 'bbp_get_topic_content', 'bbp_make_clickable', 4 );
153
- add_filter( 'bbp_get_topic_content', 'bbp_mention_filter', 5 );
154
  add_filter( 'bbp_get_topic_content', 'wptexturize', 6 );
155
  add_filter( 'bbp_get_topic_content', 'convert_chars', 8 );
156
  add_filter( 'bbp_get_topic_content', 'capital_P_dangit', 10 );
@@ -243,6 +241,12 @@ add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_meta_caps', 10, 4 ); // Topi
243
  add_filter( 'bbp_map_meta_caps', 'bbp_map_reply_meta_caps', 10, 4 ); // Replies
244
  add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_tag_meta_caps', 10, 4 ); // Topic tags
245
 
 
 
 
 
 
 
246
  /** Deprecated ****************************************************************/
247
 
248
  /**
139
 
140
  // Run filters on reply content
141
  add_filter( 'bbp_get_reply_content', 'bbp_make_clickable', 4 );
 
142
  add_filter( 'bbp_get_reply_content', 'wptexturize', 6 );
143
  add_filter( 'bbp_get_reply_content', 'convert_chars', 8 );
144
  add_filter( 'bbp_get_reply_content', 'capital_P_dangit', 10 );
149
 
150
  // Run filters on topic content
151
  add_filter( 'bbp_get_topic_content', 'bbp_make_clickable', 4 );
 
152
  add_filter( 'bbp_get_topic_content', 'wptexturize', 6 );
153
  add_filter( 'bbp_get_topic_content', 'convert_chars', 8 );
154
  add_filter( 'bbp_get_topic_content', 'capital_P_dangit', 10 );
241
  add_filter( 'bbp_map_meta_caps', 'bbp_map_reply_meta_caps', 10, 4 ); // Replies
242
  add_filter( 'bbp_map_meta_caps', 'bbp_map_topic_tag_meta_caps', 10, 4 ); // Topic tags
243
 
244
+ // Clickables
245
+ add_filter( 'bbp_make_clickable', 'bbp_make_urls_clickable', 2 ); // https://bbpress.org
246
+ add_filter( 'bbp_make_clickable', 'bbp_make_ftps_clickable', 4 ); // ftps://bbpress.org
247
+ add_filter( 'bbp_make_clickable', 'bbp_make_emails_clickable', 6 ); // jjj@bbpress.org
248
+ add_filter( 'bbp_make_clickable', 'bbp_make_mentions_clickable', 8 ); // @jjj
249
+
250
  /** Deprecated ****************************************************************/
251
 
252
  /**
includes/core/functions.php CHANGED
@@ -290,6 +290,8 @@ function bbp_has_errors() {
290
  * anywhere mentions might be used.
291
  *
292
  * @since bbPress (r4997)
 
 
293
  * @return string Pattern to match usernames with
294
  */
295
  function bbp_find_mentions_pattern() {
@@ -300,6 +302,7 @@ function bbp_find_mentions_pattern() {
300
  * Searches through the content to locate usernames, designated by an @ sign.
301
  *
302
  * @since bbPress (r4323)
 
303
  *
304
  * @param string $content The content
305
  * @return bool|array $usernames Existing usernames. False if no matches.
@@ -321,6 +324,7 @@ function bbp_find_mentions( $content = '' ) {
321
  * Finds and links @-mentioned users in the content
322
  *
323
  * @since bbPress (r4323)
 
324
  *
325
  * @uses bbp_find_mentions() To get usernames in content areas
326
  * @return string $content Content filtered for mentions
290
  * anywhere mentions might be used.
291
  *
292
  * @since bbPress (r4997)
293
+ * @deprecated 2.6.0 bbp_make_clickable()
294
+ *
295
  * @return string Pattern to match usernames with
296
  */
297
  function bbp_find_mentions_pattern() {
302
  * Searches through the content to locate usernames, designated by an @ sign.
303
  *
304
  * @since bbPress (r4323)
305
+ * @deprecated 2.6.0 bbp_make_clickable()
306
  *
307
  * @param string $content The content
308
  * @return bool|array $usernames Existing usernames. False if no matches.
324
  * Finds and links @-mentioned users in the content
325
  *
326
  * @since bbPress (r4323)
327
+ * @deprecated 2.6.0 bbp_make_clickable()
328
  *
329
  * @uses bbp_find_mentions() To get usernames in content areas
330
  * @return string $content Content filtered for mentions
includes/forums/functions.php CHANGED
@@ -1931,7 +1931,7 @@ function bbp_forum_query_last_reply_id( $forum_id, $topic_ids = 0 ) {
1931
  global $wpdb;
1932
 
1933
  $cache_id = 'bbp_get_forum_' . $forum_id . '_reply_id';
1934
- $reply_id = (int) wp_cache_get( $cache_id, 'bbpress_posts' );
1935
 
1936
  if ( false === $reply_id ) {
1937
 
1931
  global $wpdb;
1932
 
1933
  $cache_id = 'bbp_get_forum_' . $forum_id . '_reply_id';
1934
+ $reply_id = wp_cache_get( $cache_id, 'bbpress_posts' );
1935
 
1936
  if ( false === $reply_id ) {
1937
 
includes/replies/functions.php CHANGED
@@ -1396,7 +1396,7 @@ function bbp_move_reply_handler( $action = '' ) {
1396
  bbp_update_reply_to( $child->ID, $parent );
1397
 
1398
  // Remove reply_to from moved reply
1399
- delete_post_meta( $move_reply->ID, '_bbp_reply_to' );
1400
 
1401
  // It is a new topic and we need to set some default metas to make
1402
  // the topic display in bbp_has_topics() list
@@ -1994,7 +1994,7 @@ function bbp_display_replies_feed_rss2( $replies_query = array() ) {
1994
  $title = ' &#187; ' . __( 'All Replies', 'bbpress' );
1995
 
1996
  // Display the feed
1997
- header( 'Content-Type: ' . feed_content_type( 'rss-http' ) . '; charset=' . get_option( 'blog_charset' ), true );
1998
  header( 'Status: 200 OK' );
1999
  echo '<?xml version="1.0" encoding="' . get_option( 'blog_charset' ) . '"?' . '>'; ?>
2000
 
@@ -2221,7 +2221,7 @@ function bbp_list_replies( $args = array() ) {
2221
 
2222
  /**
2223
  * Validate a `reply_to` field for hierarchical replies
2224
- *
2225
  * Checks for 2 scenarios:
2226
  * -- The reply to ID is actually a reply
2227
  * -- The reply to ID does not match the current reply
1396
  bbp_update_reply_to( $child->ID, $parent );
1397
 
1398
  // Remove reply_to from moved reply
1399
+ delete_post_meta( $move_reply->ID, '_bbp_reply_to' );
1400
 
1401
  // It is a new topic and we need to set some default metas to make
1402
  // the topic display in bbp_has_topics() list
1994
  $title = ' &#187; ' . __( 'All Replies', 'bbpress' );
1995
 
1996
  // Display the feed
1997
+ header( 'Content-Type: ' . feed_content_type( 'rss2' ) . '; charset=' . get_option( 'blog_charset' ), true );
1998
  header( 'Status: 200 OK' );
1999
  echo '<?xml version="1.0" encoding="' . get_option( 'blog_charset' ) . '"?' . '>'; ?>
2000
 
2221
 
2222
  /**
2223
  * Validate a `reply_to` field for hierarchical replies
2224
+ *
2225
  * Checks for 2 scenarios:
2226
  * -- The reply to ID is actually a reply
2227
  * -- The reply to ID does not match the current reply
includes/topics/functions.php CHANGED
@@ -3421,7 +3421,7 @@ function bbp_display_topics_feed_rss2( $topics_query = array() ) {
3421
  return;
3422
 
3423
  // Display the feed
3424
- header( 'Content-Type: ' . feed_content_type( 'rss-http' ) . '; charset=' . get_option( 'blog_charset' ), true );
3425
  header( 'Status: 200 OK' );
3426
  echo '<?xml version="1.0" encoding="' . get_option( 'blog_charset' ) . '"?' . '>'; ?>
3427
 
3421
  return;
3422
 
3423
  // Display the feed
3424
+ header( 'Content-Type: ' . feed_content_type( 'rss2' ) . '; charset=' . get_option( 'blog_charset' ), true );
3425
  header( 'Status: 200 OK' );
3426
  echo '<?xml version="1.0" encoding="' . get_option( 'blog_charset' ) . '"?' . '>'; ?>
3427
 
languages/bbpress.pot CHANGED
@@ -1,14 +1,14 @@
1
- # Copyright (C) 2015 bbPress
2
  # This file is distributed under the same license as the bbPress package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: bbPress 2.5.8\n"
6
  "Report-Msgid-Bugs-To: https://bbpress.trac.wordpress.org\n"
7
- "POT-Creation-Date: 2015-07-13 17:00:36+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2015-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: JOHN JAMES JACOBY <jjj@bbpress.org>\n"
13
  "Language-Team: ENGLISH <jjj@bbpress.org>\n"
14
 
@@ -819,7 +819,7 @@ msgid ""
819
  "\">Preview forum</a>"
820
  msgstr ""
821
 
822
- #. translators: Publish box date format, see http:php.net/date
823
  #: includes/admin/forums.php:558 includes/admin/replies.php:878
824
  #: includes/admin/topics.php:948
825
  msgid "M j, Y @ G:i"
@@ -4939,9 +4939,9 @@ msgstr ""
4939
  msgid "bbPress"
4940
  msgstr ""
4941
 
4942
- #. #-#-#-#-# plugin.pot (bbPress 2.5.8) #-#-#-#-#
4943
  #. Plugin URI of the plugin/theme
4944
- #. #-#-#-#-# plugin.pot (bbPress 2.5.8) #-#-#-#-#
4945
  #. Author URI of the plugin/theme
4946
  msgid "http://bbpress.org"
4947
  msgstr ""
1
+ # Copyright (C) 2016 bbPress
2
  # This file is distributed under the same license as the bbPress package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: bbPress 2.5.9\n"
6
  "Report-Msgid-Bugs-To: https://bbpress.trac.wordpress.org\n"
7
+ "POT-Creation-Date: 2016-04-29 17:16:42+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: JOHN JAMES JACOBY <jjj@bbpress.org>\n"
13
  "Language-Team: ENGLISH <jjj@bbpress.org>\n"
14
 
819
  "\">Preview forum</a>"
820
  msgstr ""
821
 
822
+ #. translators: Publish box date format, see http://php.net/date
823
  #: includes/admin/forums.php:558 includes/admin/replies.php:878
824
  #: includes/admin/topics.php:948
825
  msgid "M j, Y @ G:i"
4939
  msgid "bbPress"
4940
  msgstr ""
4941
 
4942
+ #. #-#-#-#-# plugin.pot (bbPress 2.5.9) #-#-#-#-#
4943
  #. Plugin URI of the plugin/theme
4944
+ #. #-#-#-#-# plugin.pot (bbPress 2.5.9) #-#-#-#-#
4945
  #. Author URI of the plugin/theme
4946
  msgid "http://bbpress.org"
4947
  msgstr ""
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: matt, johnjamesjacoby, jmdodd, netweb
3
  Tags: forums, discussion, support, theme, akismet, multisite
4
  Requires at least: 3.6
5
- Tested up to: 4.4
6
- Stable tag: 2.5.8
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -40,6 +40,9 @@ We're keeping things as small and light as possible while still allowing for gre
40
 
41
  == Changelog ==
42
 
 
 
 
43
  = 2.5.8 =
44
  * Improved ajax actions
45
  * Improved user query parsing
2
  Contributors: matt, johnjamesjacoby, jmdodd, netweb
3
  Tags: forums, discussion, support, theme, akismet, multisite
4
  Requires at least: 3.6
5
+ Tested up to: 4.5
6
+ Stable tag: 2.5.9
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
40
 
41
  == Changelog ==
42
 
43
+ = 2.5.9 =
44
+ * Improved user mentions
45
+
46
  = 2.5.8 =
47
  * Improved ajax actions
48
  * Improved user query parsing