bbPress - Version 2.3-beta1

Version Description

Download this release

Release Info

Developer johnjamesjacoby
Plugin Icon 128x128 bbPress
Version 2.3-beta1
Comparing to
See all releases

Code changes from version 2.2.4 to 2.3-beta1

Files changed (77) hide show
  1. bbpress.php +61 -34
  2. humans.txt +6 -2
  3. includes/admin/admin.php +22 -6
  4. includes/admin/converter.php +24 -21
  5. includes/admin/converters/Invision.php +443 -183
  6. includes/admin/converters/Mingle.php +454 -0
  7. includes/admin/converters/SimplePress5.php +537 -0
  8. includes/admin/converters/Vanilla.php +545 -0
  9. includes/admin/converters/bbPress1.php +17 -3
  10. includes/admin/converters/phpBB.php +441 -141
  11. includes/admin/converters/vBulletin.php +190 -47
  12. includes/admin/metaboxes.php +28 -28
  13. includes/admin/settings.php +26 -1
  14. includes/admin/tools.php +111 -20
  15. includes/admin/users.php +1 -5
  16. includes/common/ajax.php +115 -0
  17. includes/common/classes.php +0 -127
  18. includes/common/formatting.php +263 -0
  19. includes/common/functions.php +106 -69
  20. includes/common/shortcodes.php +93 -3
  21. includes/common/template-tags.php +370 -155
  22. includes/common/widgets.php +253 -34
  23. includes/core/actions.php +44 -38
  24. includes/core/capabilities.php +4 -1
  25. includes/core/filters.php +51 -30
  26. includes/core/functions.php +17 -4
  27. includes/core/options.php +12 -0
  28. includes/core/sub-actions.php +40 -2
  29. includes/core/template-functions.php +36 -2
  30. includes/core/template-loader.php +42 -0
  31. includes/core/theme-compat.php +68 -11
  32. includes/core/update.php +36 -30
  33. includes/extend/buddypress/activity.php +6 -5
  34. includes/extend/buddypress/functions.php +172 -0
  35. includes/extend/buddypress/group.php +113 -25
  36. includes/extend/buddypress/loader.php +17 -17
  37. includes/extend/buddypress/members.php +30 -0
  38. includes/forums/capabilities.php +1 -1
  39. includes/forums/functions.php +62 -70
  40. includes/forums/template-tags.php +76 -66
  41. includes/replies/functions.php +349 -53
  42. includes/replies/template-tags.php +215 -101
  43. includes/search/functions.php +55 -0
  44. includes/search/index.php +5 -0
  45. includes/search/template-tags.php +371 -0
  46. includes/topics/functions.php +179 -117
  47. includes/topics/template-tags.php +242 -196
  48. includes/users/capabilities.php +10 -4
  49. includes/users/functions.php +19 -28
  50. includes/users/template-tags.php +169 -129
  51. languages/bbpress.pot +891 -729
  52. readme.txt +2 -2
  53. templates/default/bbpress-functions.php +162 -89
  54. templates/default/bbpress/content-archive-forum.php +6 -0
  55. templates/default/bbpress/content-search.php +41 -0
  56. templates/default/bbpress/content-single-forum.php +1 -1
  57. templates/default/bbpress/content-statistics.php +77 -0
  58. templates/default/bbpress/feedback-no-search.php +14 -0
  59. templates/default/bbpress/form-reply-move.php +91 -0
  60. templates/default/bbpress/form-reply.php +0 -4
  61. templates/default/bbpress/form-search.php +18 -0
  62. templates/default/bbpress/loop-search-forum.php +46 -0
  63. templates/default/bbpress/loop-search-reply.php +70 -0
  64. templates/default/bbpress/loop-search-topic.php +89 -0
  65. templates/default/bbpress/loop-search.php +52 -0
  66. templates/default/bbpress/loop-single-forum.php +6 -6
  67. templates/default/bbpress/loop-single-reply.php +4 -4
  68. templates/default/bbpress/loop-single-topic.php +3 -3
  69. templates/default/bbpress/pagination-search.php +28 -0
  70. templates/default/css/bbpress-rtl.css +192 -31
  71. templates/default/css/bbpress-rtl.min.css +1 -1
  72. templates/default/css/bbpress.css +192 -31
  73. templates/default/css/bbpress.min.css +1 -1
  74. templates/default/extras/page-forum-statistics.php +3 -68
  75. templates/default/extras/single-reply-move.php +32 -0
  76. templates/default/js/topic.js +27 -83
  77. templates/default/js/topic.min.js +1 -1
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 4711 2013-01-24 16:57:02Z johnjamesjacoby $
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.2.4
21
  * Text Domain: bbpress
22
  * Domain Path: /languages/
23
  */
@@ -29,7 +29,7 @@ if ( !class_exists( 'bbPress' ) ) :
29
  /**
30
  * Main bbPress Class
31
  *
32
- * Tap tap tap... Is this thing on?
33
  *
34
  * @since bbPress (r2464)
35
  */
@@ -38,11 +38,12 @@ final class bbPress {
38
  /** Magic *****************************************************************/
39
 
40
  /**
41
- * bbPress uses many variables, most of which can be filtered to customize
42
- * the way that it works. To prevent unauthorized access, these variables
43
- * are stored in a private array that is magically updated using PHP 5.2+
44
- * methods. This is to prevent third party plugins from tampering with
45
- * essential information indirectly, which would cause issues later.
 
46
  *
47
  * @see bbPress::setup_globals()
48
  * @var array
@@ -144,19 +145,26 @@ final class bbPress {
144
  public function __isset( $key ) { return isset( $this->data[$key] ); }
145
 
146
  /**
147
- * Magic method for getting bbPress varibles
148
  *
149
  * @since bbPress (r3951)
150
  */
151
  public function __get( $key ) { return isset( $this->data[$key] ) ? $this->data[$key] : null; }
152
 
153
  /**
154
- * Magic method for setting bbPress varibles
155
  *
156
  * @since bbPress (r3951)
157
  */
158
  public function __set( $key, $value ) { $this->data[$key] = $value; }
159
 
 
 
 
 
 
 
 
160
  /**
161
  * Magic method to prevent notices and errors from invalid method calls
162
  *
@@ -180,7 +188,7 @@ final class bbPress {
180
 
181
  /** Versions **********************************************************/
182
 
183
- $this->version = '2.2.4';
184
  $this->db_version = '224';
185
 
186
  /** Paths *************************************************************/
@@ -221,13 +229,14 @@ final class bbPress {
221
  $this->trash_status_id = apply_filters( 'bbp_trash_post_status', 'trash' );
222
 
223
  // Other identifiers
224
- $this->user_id = apply_filters( 'bbp_user_id', 'bbp_user' );
225
- $this->tops_id = apply_filters( 'bbp_tops_id', 'bbp_tops' );
226
- $this->reps_id = apply_filters( 'bbp_reps_id', 'bbp_reps' );
227
- $this->favs_id = apply_filters( 'bbp_favs_id', 'bbp_favs' );
228
- $this->subs_id = apply_filters( 'bbp_subs_id', 'bbp_subs' );
229
- $this->view_id = apply_filters( 'bbp_view_id', 'bbp_view' );
230
- $this->edit_id = apply_filters( 'bbp_edit_id', 'edit' );
 
231
 
232
  /** Queries ***********************************************************/
233
 
@@ -239,6 +248,7 @@ final class bbPress {
239
  $this->forum_query = new stdClass(); // Main forum query
240
  $this->topic_query = new stdClass(); // Main topic query
241
  $this->reply_query = new stdClass(); // Main reply query
 
242
 
243
  /** Theme Compat ******************************************************/
244
 
@@ -287,8 +297,10 @@ final class bbPress {
287
  /** Components ********************************************************/
288
 
289
  // Common
 
290
  require( $this->includes_dir . 'common/classes.php' );
291
  require( $this->includes_dir . 'common/functions.php' );
 
292
  require( $this->includes_dir . 'common/template-tags.php' );
293
  require( $this->includes_dir . 'common/widgets.php' );
294
  require( $this->includes_dir . 'common/shortcodes.php' );
@@ -308,6 +320,10 @@ final class bbPress {
308
  require( $this->includes_dir . 'replies/functions.php' );
309
  require( $this->includes_dir . 'replies/template-tags.php' );
310
 
 
 
 
 
311
  // Users
312
  require( $this->includes_dir . 'users/capabilities.php' );
313
  require( $this->includes_dir . 'users/functions.php' );
@@ -357,8 +373,8 @@ final class bbPress {
357
  'register_views', // Register the views (no-replies)
358
  'register_theme_packages', // Register bundled theme packages (bbp-theme-compat/bbp-themes)
359
  'load_textdomain', // Load textdomain (bbpress)
360
- 'add_rewrite_tags', // Add rewrite tags (view|user|edit)
361
- 'generate_rewrite_rules' // Generate rewrite rules (view|edit)
362
  );
363
 
364
  // Add the actions
@@ -398,7 +414,7 @@ final class bbPress {
398
  }
399
 
400
  /**
401
- * Setup the default bbPress theme compatability location.
402
  *
403
  * @since bbPress (r3778)
404
  */
@@ -831,6 +847,7 @@ final class bbPress {
831
  public static function add_rewrite_tags() {
832
  add_rewrite_tag( '%%' . bbp_get_view_rewrite_id() . '%%', '([^/]+)' ); // View Page tag
833
  add_rewrite_tag( '%%' . bbp_get_edit_rewrite_id() . '%%', '([1]{1,})' ); // Edit Page tag
 
834
  add_rewrite_tag( '%%' . bbp_get_user_rewrite_id() . '%%', '([^/]+)' ); // User Profile tag
835
  add_rewrite_tag( '%%' . bbp_get_user_favorites_rewrite_id() . '%%', '([1]{1,})' ); // User Favorites tag
836
  add_rewrite_tag( '%%' . bbp_get_user_subscriptions_rewrite_id() . '%%', '([1]{1,})' ); // User Subscriptions tag
@@ -852,23 +869,29 @@ final class bbPress {
852
  public static function generate_rewrite_rules( $wp_rewrite ) {
853
 
854
  // Slugs
855
- $view_slug = bbp_get_view_slug();
856
- $user_slug = bbp_get_user_slug();
 
857
 
858
  // Unique rewrite ID's
859
- $edit_id = bbp_get_edit_rewrite_id();
860
- $view_id = bbp_get_view_rewrite_id();
861
- $user_id = bbp_get_user_rewrite_id();
862
- $favs_id = bbp_get_user_favorites_rewrite_id();
863
- $subs_id = bbp_get_user_subscriptions_rewrite_id();
864
- $tops_id = bbp_get_user_topics_rewrite_id();
865
- $reps_id = bbp_get_user_replies_rewrite_id();
 
866
 
867
  // Rewrite rule matches used repeatedly below
868
- $root_rule = '/([^/]+)/?$';
869
- $edit_rule = '/([^/]+)/edit/?$';
870
- $feed_rule = '/([^/]+)/feed/?$';
871
- $page_rule = '/([^/]+)/page/?([0-9]{1,})/?$';
 
 
 
 
872
 
873
  // User profile rules
874
  $tops_rule = '/([^/]+)/topics/?$';
@@ -906,6 +929,10 @@ final class bbPress {
906
  $view_slug . $page_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
907
  $view_slug . $feed_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index( 1 ) . '&feed=' . $wp_rewrite->preg_index( 2 ),
908
  $view_slug . $root_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index( 1 ),
 
 
 
 
909
  );
910
 
911
  // Merge bbPress rules with existing
5
  *
6
  * bbPress is forum software with a twist from the creators of WordPress.
7
  *
8
+ * $Id: bbpress.php 4732 2013-01-28 18:30:40Z 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.3-beta1
21
  * Text Domain: bbpress
22
  * Domain Path: /languages/
23
  */
29
  /**
30
  * Main bbPress Class
31
  *
32
+ * "How doth the little busy bee, improve each shining hour..."
33
  *
34
  * @since bbPress (r2464)
35
  */
38
  /** Magic *****************************************************************/
39
 
40
  /**
41
+ * bbPress uses many variables, several of which can be filtered to
42
+ * customize the way it operates. Most of these variables are stored in a
43
+ * private array that gets updated with the help of PHP magic methods.
44
+ *
45
+ * This is a precautionary measure, to avoid potential errors produced by
46
+ * unanticipated direct manipulation of bbPress's run-time data.
47
  *
48
  * @see bbPress::setup_globals()
49
  * @var array
145
  public function __isset( $key ) { return isset( $this->data[$key] ); }
146
 
147
  /**
148
+ * Magic method for getting bbPress variables
149
  *
150
  * @since bbPress (r3951)
151
  */
152
  public function __get( $key ) { return isset( $this->data[$key] ) ? $this->data[$key] : null; }
153
 
154
  /**
155
+ * Magic method for setting bbPress variables
156
  *
157
  * @since bbPress (r3951)
158
  */
159
  public function __set( $key, $value ) { $this->data[$key] = $value; }
160
 
161
+ /**
162
+ * Magic method for unsetting bbPress variables
163
+ *
164
+ * @since bbPress (r4628)
165
+ */
166
+ public function __unset( $key ) { if ( isset( $this->data[$key] ) ) unset( $this->data[$key] ); }
167
+
168
  /**
169
  * Magic method to prevent notices and errors from invalid method calls
170
  *
188
 
189
  /** Versions **********************************************************/
190
 
191
+ $this->version = '2.3-beta1';
192
  $this->db_version = '224';
193
 
194
  /** Paths *************************************************************/
229
  $this->trash_status_id = apply_filters( 'bbp_trash_post_status', 'trash' );
230
 
231
  // Other identifiers
232
+ $this->user_id = apply_filters( 'bbp_user_id', 'bbp_user' );
233
+ $this->tops_id = apply_filters( 'bbp_tops_id', 'bbp_tops' );
234
+ $this->reps_id = apply_filters( 'bbp_reps_id', 'bbp_reps' );
235
+ $this->favs_id = apply_filters( 'bbp_favs_id', 'bbp_favs' );
236
+ $this->subs_id = apply_filters( 'bbp_subs_id', 'bbp_subs' );
237
+ $this->view_id = apply_filters( 'bbp_view_id', 'bbp_view' );
238
+ $this->search_id = apply_filters( 'bbp_search_id', 'bbp_search' );
239
+ $this->edit_id = apply_filters( 'bbp_edit_id', 'edit' );
240
 
241
  /** Queries ***********************************************************/
242
 
248
  $this->forum_query = new stdClass(); // Main forum query
249
  $this->topic_query = new stdClass(); // Main topic query
250
  $this->reply_query = new stdClass(); // Main reply query
251
+ $this->search_query = new stdClass(); // Main search query
252
 
253
  /** Theme Compat ******************************************************/
254
 
297
  /** Components ********************************************************/
298
 
299
  // Common
300
+ require( $this->includes_dir . 'common/ajax.php' );
301
  require( $this->includes_dir . 'common/classes.php' );
302
  require( $this->includes_dir . 'common/functions.php' );
303
+ require( $this->includes_dir . 'common/formatting.php' );
304
  require( $this->includes_dir . 'common/template-tags.php' );
305
  require( $this->includes_dir . 'common/widgets.php' );
306
  require( $this->includes_dir . 'common/shortcodes.php' );
320
  require( $this->includes_dir . 'replies/functions.php' );
321
  require( $this->includes_dir . 'replies/template-tags.php' );
322
 
323
+ // Search
324
+ require( $this->includes_dir . 'search/functions.php' );
325
+ require( $this->includes_dir . 'search/template-tags.php' );
326
+
327
  // Users
328
  require( $this->includes_dir . 'users/capabilities.php' );
329
  require( $this->includes_dir . 'users/functions.php' );
373
  'register_views', // Register the views (no-replies)
374
  'register_theme_packages', // Register bundled theme packages (bbp-theme-compat/bbp-themes)
375
  'load_textdomain', // Load textdomain (bbpress)
376
+ 'add_rewrite_tags', // Add rewrite tags (view|user|edit|search)
377
+ 'generate_rewrite_rules' // Generate rewrite rules (view|edit|search)
378
  );
379
 
380
  // Add the actions
414
  }
415
 
416
  /**
417
+ * Setup the default bbPress theme compatibility location.
418
  *
419
  * @since bbPress (r3778)
420
  */
847
  public static function add_rewrite_tags() {
848
  add_rewrite_tag( '%%' . bbp_get_view_rewrite_id() . '%%', '([^/]+)' ); // View Page tag
849
  add_rewrite_tag( '%%' . bbp_get_edit_rewrite_id() . '%%', '([1]{1,})' ); // Edit Page tag
850
+ add_rewrite_tag( '%%' . bbp_get_search_rewrite_id() . '%%', '([^/]+)' ); // Search Results tag
851
  add_rewrite_tag( '%%' . bbp_get_user_rewrite_id() . '%%', '([^/]+)' ); // User Profile tag
852
  add_rewrite_tag( '%%' . bbp_get_user_favorites_rewrite_id() . '%%', '([1]{1,})' ); // User Favorites tag
853
  add_rewrite_tag( '%%' . bbp_get_user_subscriptions_rewrite_id() . '%%', '([1]{1,})' ); // User Subscriptions tag
869
  public static function generate_rewrite_rules( $wp_rewrite ) {
870
 
871
  // Slugs
872
+ $view_slug = bbp_get_view_slug();
873
+ $search_slug = bbp_get_search_slug();
874
+ $user_slug = bbp_get_user_slug();
875
 
876
  // Unique rewrite ID's
877
+ $edit_id = bbp_get_edit_rewrite_id();
878
+ $view_id = bbp_get_view_rewrite_id();
879
+ $search_id = bbp_get_search_rewrite_id();
880
+ $user_id = bbp_get_user_rewrite_id();
881
+ $favs_id = bbp_get_user_favorites_rewrite_id();
882
+ $subs_id = bbp_get_user_subscriptions_rewrite_id();
883
+ $tops_id = bbp_get_user_topics_rewrite_id();
884
+ $reps_id = bbp_get_user_replies_rewrite_id();
885
 
886
  // Rewrite rule matches used repeatedly below
887
+ $root_rule = '/([^/]+)/?$';
888
+ $edit_rule = '/([^/]+)/edit/?$';
889
+ $feed_rule = '/([^/]+)/feed/?$';
890
+ $page_rule = '/([^/]+)/page/?([0-9]{1,})/?$';
891
+
892
+ // Search rules (without slug check)
893
+ $search_root_rule = '/?$';
894
+ $search_page_rule = '/page/?([0-9]{1,})/?$';
895
 
896
  // User profile rules
897
  $tops_rule = '/([^/]+)/topics/?$';
929
  $view_slug . $page_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
930
  $view_slug . $feed_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index( 1 ) . '&feed=' . $wp_rewrite->preg_index( 2 ),
931
  $view_slug . $root_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index( 1 ),
932
+
933
+ // Search All
934
+ $search_slug . $search_page_rule => 'index.php?paged=' . $wp_rewrite->preg_index( 1 ),
935
+ $search_slug . $search_root_rule => 'index.php?' . $search_id,
936
  );
937
 
938
  // Merge bbPress rules with existing
humans.txt CHANGED
@@ -38,9 +38,13 @@ Title: Lead Developer
38
  Twitter: jjj
39
  Favorite Food: Truffle Lasagna
40
 
 
 
 
 
41
  /* THANKS */
42
- Mike Adams, Gautam Gupta, jmdodd, Ben L, Justin Tadlock, cnorris23, anointed, andy, nacin, netweb
43
 
44
  /* META */
45
- Updated: 2012/11/09
46
  See: http://humanstxt.org/
38
  Twitter: jjj
39
  Favorite Food: Truffle Lasagna
40
 
41
+ Name: Jennifer M. Dodd
42
+ Title: Core Contributor
43
+ Twitter: jmdodd
44
+
45
  /* THANKS */
46
+ Mike Adams, Gautam Gupta, Ben L, Justin Tadlock, cnorris23, anointed, andy, nacin, netweb
47
 
48
  /* META */
49
+ Updated: 2012/12/22
50
  See: http://humanstxt.org/
includes/admin/admin.php CHANGED
@@ -49,7 +49,7 @@ class BBP_Admin {
49
  /**
50
  * @var bool Minimum capability to access Tools and Settings
51
  */
52
- public $minimum_capability = 'manage_options';
53
 
54
  /** Functions *************************************************************/
55
 
@@ -142,6 +142,9 @@ class BBP_Admin {
142
  // Hide the theme compat package selection
143
  add_filter( 'bbp_admin_get_settings_sections', array( $this, 'hide_theme_compat_packages' ) );
144
 
 
 
 
145
  /** Network Admin *****************************************************/
146
 
147
  // Add menu item to settings menu
@@ -361,7 +364,7 @@ class BBP_Admin {
361
 
362
  // BuddyPress
363
  case 'bbp_settings_buddypress' :
364
- if ( ( is_plugin_active( 'buddypress/bp-loader.php' ) && defined( 'BP_VERSION' ) ) && is_super_admin() ) {
365
  $caps = array( bbpress()->admin->minimum_capability );
366
  } else {
367
  $caps = array( 'do_not_allow' );
@@ -390,8 +393,8 @@ class BBP_Admin {
390
  case 'bbp_settings_theme_compat' : // Settings - Theme compat
391
  case 'bbp_settings_root_slugs' : // Settings - Root slugs
392
  case 'bbp_settings_single_slugs' : // Settings - Single slugs
393
- case 'bbp_settings_per_page' : // Settings - Single slugs
394
- case 'bbp_settings_per_page_rss' : // Settings - Single slugs
395
  $caps = array( bbpress()->admin->minimum_capability );
396
  break;
397
  }
@@ -1260,6 +1263,19 @@ class BBP_Admin {
1260
  return $sections;
1261
  }
1262
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1263
  /** Ajax ******************************************************************/
1264
 
1265
  /**
@@ -1326,7 +1342,7 @@ class BBP_Admin {
1326
  </div>
1327
 
1328
  <div class="changelog">
1329
- <h3><?php _e( 'Theme Compatability', 'bbpress' ); ?></h3>
1330
 
1331
  <div class="feature-section">
1332
  <h4><?php _e( 'Twenty Twelve', 'bbpress' ); ?></h4>
@@ -1361,7 +1377,7 @@ class BBP_Admin {
1361
  <div class="changelog">
1362
  <h3><?php _e( 'Under the Hood', 'bbpress' ); ?></h3>
1363
 
1364
- <div class="feature-section three-col">
1365
  <div>
1366
  <h4><?php _e( 'Template Logic', 'bbpress' ); ?></h4>
1367
  <p><?php _e( 'New functions and template stacks are in place to help plugin developers extend bbPress further.', 'bbpress' ); ?></p>
49
  /**
50
  * @var bool Minimum capability to access Tools and Settings
51
  */
52
+ public $minimum_capability = 'keep_gate';
53
 
54
  /** Functions *************************************************************/
55
 
142
  // Hide the theme compat package selection
143
  add_filter( 'bbp_admin_get_settings_sections', array( $this, 'hide_theme_compat_packages' ) );
144
 
145
+ // Allow keymasters to save forums settings
146
+ add_filter( 'option_page_capability_bbpress', array( $this, 'option_page_capability_bbpress' ) );
147
+
148
  /** Network Admin *****************************************************/
149
 
150
  // Add menu item to settings menu
364
 
365
  // BuddyPress
366
  case 'bbp_settings_buddypress' :
367
+ if ( ( is_plugin_active( 'buddypress/bp-loader.php' ) && defined( 'BP_VERSION' ) && bp_is_root_blog() ) && is_super_admin() ) {
368
  $caps = array( bbpress()->admin->minimum_capability );
369
  } else {
370
  $caps = array( 'do_not_allow' );
393
  case 'bbp_settings_theme_compat' : // Settings - Theme compat
394
  case 'bbp_settings_root_slugs' : // Settings - Root slugs
395
  case 'bbp_settings_single_slugs' : // Settings - Single slugs
396
+ case 'bbp_settings_per_page' : // Settings - Per page
397
+ case 'bbp_settings_per_rss_page' : // Settings - Per RSS page
398
  $caps = array( bbpress()->admin->minimum_capability );
399
  break;
400
  }
1263
  return $sections;
1264
  }
1265
 
1266
+ /**
1267
+ * Allow keymaster role to save Forums settings
1268
+ *
1269
+ * @since bbPress (r4678)
1270
+ *
1271
+ * @param string $capability
1272
+ * @return string Return 'keep_gate' capability
1273
+ */
1274
+ public function option_page_capability_bbpress( $capability = 'manage_options' ) {
1275
+ $capability = 'keep_gate';
1276
+ return $capability;
1277
+ }
1278
+
1279
  /** Ajax ******************************************************************/
1280
 
1281
  /**
1342
  </div>
1343
 
1344
  <div class="changelog">
1345
+ <h3><?php _e( 'Theme Compatibility', 'bbpress' ); ?></h3>
1346
 
1347
  <div class="feature-section">
1348
  <h4><?php _e( 'Twenty Twelve', 'bbpress' ); ?></h4>
1377
  <div class="changelog">
1378
  <h3><?php _e( 'Under the Hood', 'bbpress' ); ?></h3>
1379
 
1380
+ <div class="feature-section col three-col">
1381
  <div>
1382
  <h4><?php _e( 'Template Logic', 'bbpress' ); ?></h4>
1383
  <p><?php _e( 'New functions and template stacks are in place to help plugin developers extend bbPress further.', 'bbpress' ); ?></p>
includes/admin/converter.php CHANGED
@@ -976,10 +976,11 @@ abstract class BBP_Converter_Base {
976
 
977
  $has_update = false;
978
 
979
- if ( !empty( $this->sync_table ) )
980
- $query = $this->wpdb->prepare( "SELECT value_id, meta_value FROM {$this->sync_table_name} WHERE meta_key = '_bbp_forum_parent_id' AND meta_value > 0 LIMIT %d, %d", $start, $this->max_rows );
981
- else
982
- $query = $this->wpdb->prepare( "SELECT post_id AS value_id, meta_value FROM {$this->wpdb->postmeta} WHERE meta_key = '_bbp_forum_parent_id' AND meta_value > 0 LIMIT %d, %d", $start, $this->max_rows );
 
983
 
984
  update_option( '_bbp_converter_query', $query );
985
 
@@ -987,7 +988,7 @@ abstract class BBP_Converter_Base {
987
 
988
  foreach ( (array) $forum_array as $row ) {
989
  $parent_id = $this->callback_forumid( $row->meta_value );
990
- $this->wpdb->query( $this->wpdb->prepare( "UPDATE {$this->wpdb->posts} SET post_parent = '%d' WHERE ID = '%d' LIMIT 1", $parent_id, $row->value_id ) );
991
  $has_update = true;
992
  }
993
 
@@ -1004,10 +1005,11 @@ abstract class BBP_Converter_Base {
1004
 
1005
  /** Delete bbconverter topics/forums/posts ****************************/
1006
 
1007
- if ( true === $this->sync_table )
1008
- $query = $this->wpdb->prepare( 'SELECT value_id FROM ' . $this->sync_table_name . ' INNER JOIN ' . $this->wpdb->posts . ' ON(value_id = ID) WHERE meta_key LIKE "_bbp_%" AND value_type = "post" GROUP BY value_id ORDER BY value_id DESC LIMIT %d', $this->max_rows );
1009
- else
1010
- $query = $this->wpdb->prepare( 'SELECT post_id AS value_id FROM ' . $this->wpdb->postmeta . ' WHERE meta_key LIKE "_bbp_%" GROUP BY post_id ORDER BY post_id DESC LIMIT %d', $this->max_rows );
 
1011
 
1012
  update_option( '_bbp_converter_query', $query );
1013
 
@@ -1022,10 +1024,11 @@ abstract class BBP_Converter_Base {
1022
 
1023
  /** Delete bbconverter users ******************************************/
1024
 
1025
- if ( true === $this->sync_table )
1026
- $query = $this->wpdb->prepare( 'SELECT value_id FROM ' . $this->sync_table_name . ' INNER JOIN ' . $this->wpdb->users . ' ON(value_id = ID) WHERE meta_key = "_bbp_user_id" AND value_type = "user" LIMIT %d', $this->max_rows );
1027
- else
1028
- $query = $this->wpdb->prepare( 'SELECT user_id AS value_id FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_user_id" LIMIT %d', $this->max_rows );
 
1029
 
1030
  update_option( '_bbp_converter_query', $query );
1031
 
@@ -1055,7 +1058,7 @@ abstract class BBP_Converter_Base {
1055
 
1056
  /** Delete bbconverter passwords **************************************/
1057
 
1058
- $query = $this->wpdb->prepare( 'SELECT user_id, meta_value FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_password" LIMIT %d, %d', $start, $this->max_rows );
1059
  update_option( '_bbp_converter_query', $query );
1060
 
1061
  $bbconverter = $this->wpdb->get_results( $query, ARRAY_A );
@@ -1064,10 +1067,10 @@ abstract class BBP_Converter_Base {
1064
 
1065
  foreach ( $bbconverter as $value ) {
1066
  if ( is_serialized( $value['meta_value'] ) ) {
1067
- $this->wpdb->query( $this->wpdb->prepare( 'UPDATE ' . $this->wpdb->users . ' SET user_pass = "" WHERE ID = "%d"', $value['user_id'] ) );
1068
  } else {
1069
- $this->wpdb->query( $this->wpdb->prepare( 'UPDATE ' . $this->wpdb->users . ' SET user_pass = "%s" WHERE ID = "%d"', $value['meta_value'], $value['user_id'] ) );
1070
- $this->wpdb->query( $this->wpdb->prepare( 'DELETE FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_password" AND user_id = "%d"', $value['user_id'] ) );
1071
  }
1072
  }
1073
  $has_delete = true;
@@ -1121,12 +1124,12 @@ abstract class BBP_Converter_Base {
1121
  public function callback_pass( $username, $password ) {
1122
  $user = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT * FROM ' . $this->wpdb->users . ' WHERE user_login = "%s" AND user_pass = "" LIMIT 1', $username ) );
1123
  if ( !empty( $user ) ) {
1124
- $usermeta = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT * FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_password" AND user_id = "%d" LIMIT 1', $user->ID ) );
1125
 
1126
  if ( !empty( $usermeta ) ) {
1127
  if ( $this->authenticate_pass( $password, $usermeta->meta_value ) ) {
1128
- $this->wpdb->query( $this->wpdb->prepare( 'UPDATE ' . $this->wpdb->users . ' ' . 'SET user_pass = "%s" ' . 'WHERE ID = "%d"', wp_hash_password( $password ), $user->ID ) );
1129
- $this->wpdb->query( $this->wpdb->prepare( 'DELETE FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_password" AND user_id = "%d"', $user->ID ) );
1130
  }
1131
  }
1132
  }
@@ -1216,7 +1219,7 @@ abstract class BBP_Converter_Base {
1216
  if ( empty( $topicid ) ) {
1217
  $this->map_topicid_to_forumid[$topicid] = 0;
1218
  } elseif ( ! isset( $this->map_topicid_to_forumid[$topicid] ) ) {
1219
- $row = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT post_parent FROM ' . $this->wpdb->posts . ' WHERE ID = "%d" LIMIT 1', $topicid ) );
1220
 
1221
  if ( !is_null( $row ) ) {
1222
  $this->map_topicid_to_forumid[$topicid] = $row->post_parent;
976
 
977
  $has_update = false;
978
 
979
+ if ( !empty( $this->sync_table ) ) {
980
+ $query = 'SELECT value_id, meta_value FROM ' . $this->sync_table_name . ' WHERE meta_key = "_bbp_forum_parent_id" AND meta_value > 0 LIMIT ' . $start . ', ' . $this->max_rows;
981
+ } else {
982
+ $query = 'SELECT post_id AS value_id, meta_value FROM ' . $this->wpdb->postmeta . ' WHERE meta_key = "_bbp_forum_parent_id" AND meta_value > 0 LIMIT ' . $start . ', ' . $this->max_rows;
983
+ }
984
 
985
  update_option( '_bbp_converter_query', $query );
986
 
988
 
989
  foreach ( (array) $forum_array as $row ) {
990
  $parent_id = $this->callback_forumid( $row->meta_value );
991
+ $this->wpdb->query( 'UPDATE ' . $this->wpdb->posts . ' SET post_parent = "' . $parent_id . '" WHERE ID = "' . $row->value_id . '" LIMIT 1' );
992
  $has_update = true;
993
  }
994
 
1005
 
1006
  /** Delete bbconverter topics/forums/posts ****************************/
1007
 
1008
+ if ( true === $this->sync_table ) {
1009
+ $query = 'SELECT value_id FROM ' . $this->sync_table_name . ' INNER JOIN ' . $this->wpdb->posts . ' ON(value_id = ID) WHERE meta_key LIKE "_bbp_%" AND value_type = "post" GROUP BY value_id ORDER BY value_id DESC LIMIT ' . $this->max_rows;
1010
+ } else {
1011
+ $query = 'SELECT post_id AS value_id FROM ' . $this->wpdb->postmeta . ' WHERE meta_key LIKE "_bbp_%" GROUP BY post_id ORDER BY post_id DESC LIMIT ' . $this->max_rows;
1012
+ }
1013
 
1014
  update_option( '_bbp_converter_query', $query );
1015
 
1024
 
1025
  /** Delete bbconverter users ******************************************/
1026
 
1027
+ if ( true === $this->sync_table ) {
1028
+ $query = 'SELECT value_id FROM ' . $this->sync_table_name . ' INNER JOIN ' . $this->wpdb->users . ' ON(value_id = ID) WHERE meta_key = "_bbp_user_id" AND value_type = "user" LIMIT ' . $this->max_rows;
1029
+ } else {
1030
+ $query = 'SELECT user_id AS value_id FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_user_id" LIMIT ' . $this->max_rows;
1031
+ }
1032
 
1033
  update_option( '_bbp_converter_query', $query );
1034
 
1058
 
1059
  /** Delete bbconverter passwords **************************************/
1060
 
1061
+ $query = 'SELECT user_id, meta_value FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_password" LIMIT ' . $start . ', ' . $this->max_rows;
1062
  update_option( '_bbp_converter_query', $query );
1063
 
1064
  $bbconverter = $this->wpdb->get_results( $query, ARRAY_A );
1067
 
1068
  foreach ( $bbconverter as $value ) {
1069
  if ( is_serialized( $value['meta_value'] ) ) {
1070
+ $this->wpdb->query( 'UPDATE ' . $this->wpdb->users . ' ' . 'SET user_pass = "" ' . 'WHERE ID = "' . $value['user_id'] . '"' );
1071
  } else {
1072
+ $this->wpdb->query( 'UPDATE ' . $this->wpdb->users . ' ' . 'SET user_pass = "' . $value['meta_value'] . '" ' . 'WHERE ID = "' . $value['user_id'] . '"' );
1073
+ $this->wpdb->query( 'DELETE FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_password" AND user_id = "' . $value['user_id'] . '"' );
1074
  }
1075
  }
1076
  $has_delete = true;
1124
  public function callback_pass( $username, $password ) {
1125
  $user = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT * FROM ' . $this->wpdb->users . ' WHERE user_login = "%s" AND user_pass = "" LIMIT 1', $username ) );
1126
  if ( !empty( $user ) ) {
1127
+ $usermeta = $this->wpdb->get_row( 'SELECT * FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_password" AND user_id = "' . $user->ID . '" LIMIT 1' );
1128
 
1129
  if ( !empty( $usermeta ) ) {
1130
  if ( $this->authenticate_pass( $password, $usermeta->meta_value ) ) {
1131
+ $this->wpdb->query( 'UPDATE ' . $this->wpdb->users . ' ' . 'SET user_pass = "' . wp_hash_password( $password ) . '" ' . 'WHERE ID = "' . $user->ID . '"' );
1132
+ $this->wpdb->query( 'DELETE FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_password" AND user_id = "' . $user->ID . '"' );
1133
  }
1134
  }
1135
  }
1219
  if ( empty( $topicid ) ) {
1220
  $this->map_topicid_to_forumid[$topicid] = 0;
1221
  } elseif ( ! isset( $this->map_topicid_to_forumid[$topicid] ) ) {
1222
+ $row = $this->wpdb->get_row( 'SELECT post_parent FROM ' . $this->wpdb->posts . ' WHERE ID = "' . $topicid . '" LIMIT 1' );
1223
 
1224
  if ( !is_null( $row ) ) {
1225
  $this->map_topicid_to_forumid[$topicid] = $row->post_parent;
includes/admin/converters/Invision.php CHANGED
@@ -1,363 +1,623 @@
1
  <?php
2
 
3
  /**
4
- * Implementation of Invision Power Board converter.
 
 
 
5
  */
6
- class Invision extends BBP_Converter_Base
7
- {
8
- function __construct()
9
- {
 
 
 
 
10
  parent::__construct();
11
  $this->setup_globals();
12
  }
13
 
14
- public function setup_globals()
15
- {
 
 
 
 
16
  /** Forum Section ******************************************************/
17
 
18
- // Forum id. Stored in postmeta.
19
  $this->field_map[] = array(
20
- 'from_tablename' => 'forums', 'from_fieldname' => 'id',
21
- 'to_type' => 'forum', 'to_fieldname' => '_bbp_forum_id'
 
 
22
  );
23
-
24
- // Forum parent id. If no parent, than 0. Stored in postmeta.
 
 
 
 
 
 
 
 
25
  $this->field_map[] = array(
26
- 'from_tablename' => 'forums', 'from_fieldname' => 'parent_id',
27
- 'to_type' => 'forum', 'to_fieldname' => '_bbp_parent_id'
 
 
28
  );
29
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  // Forum title.
31
  $this->field_map[] = array(
32
- 'from_tablename' => 'forums', 'from_fieldname' => 'name',
33
- 'to_type' => 'forum', 'to_fieldname' => 'post_title'
 
 
34
  );
35
-
36
- // Forum slug. Clean name.
37
  $this->field_map[] = array(
38
- 'from_tablename' => 'forums', 'from_fieldname' => 'name',
39
- 'to_type' => 'forum', 'to_fieldname' => 'post_name',
 
 
40
  'callback_method' => 'callback_slug'
41
  );
42
-
43
  // Forum description.
44
  $this->field_map[] = array(
45
- 'from_tablename' => 'forums', 'from_fieldname' => 'description',
46
- 'to_type' => 'forum', 'to_fieldname' => 'post_content',
 
 
47
  'callback_method' => 'callback_null'
48
  );
49
-
50
- // Forum display order. Starts from 1.
51
  $this->field_map[] = array(
52
- 'from_tablename' => 'forums', 'from_fieldname' => 'position',
53
- 'to_type' => 'forum', 'to_fieldname' => 'menu_order'
 
 
54
  );
55
-
56
- // Forum date update.
57
  $this->field_map[] = array(
58
- 'to_type' => 'forum', 'to_fieldname' => 'post_date',
 
59
  'default' => date('Y-m-d H:i:s')
60
  );
61
  $this->field_map[] = array(
62
- 'to_type' => 'forum', 'to_fieldname' => 'post_date_gmt',
 
63
  'default' => date('Y-m-d H:i:s')
64
  );
65
  $this->field_map[] = array(
66
- 'to_type' => 'forum', 'to_fieldname' => 'post_modified',
 
67
  'default' => date('Y-m-d H:i:s')
68
  );
69
  $this->field_map[] = array(
70
- 'to_type' => 'forum', 'to_fieldname' => 'post_modified_gmt',
 
71
  'default' => date('Y-m-d H:i:s')
72
  );
73
 
74
  /** Topic Section ******************************************************/
75
 
76
- // Topic id. Stored in postmeta.
77
  $this->field_map[] = array(
78
- 'from_tablename' => 'topics', 'from_fieldname' => 'tid',
79
- 'to_type' => 'topic', 'to_fieldname' => '_bbp_topic_id'
 
 
80
  );
81
-
82
- // Forum id. Stored in postmeta.
 
 
 
 
 
 
 
 
 
83
  $this->field_map[] = array(
84
- 'from_tablename' => 'topics', 'from_fieldname' => 'forum_id',
85
- 'to_type' => 'topic', 'to_fieldname' => '_bbp_forum_id',
 
 
86
  'callback_method' => 'callback_forumid'
87
  );
88
-
89
  // Topic author.
90
  $this->field_map[] = array(
91
- 'from_tablename' => 'topics', 'from_fieldname' => 'starter_id',
92
- 'to_type' => 'topic', 'to_fieldname' => 'post_author',
 
 
93
  'callback_method' => 'callback_userid'
94
  );
95
-
96
  // Topic content.
97
- $this->field_map[] = array(
98
- 'from_tablename' => 'posts', 'from_fieldname' => 'post',
99
- 'join_tablename' => 'topics', 'join_type' => 'INNER', 'join_expression' => 'ON(topics.tid = posts.topic_id) WHERE posts.new_topic = 1',
100
- 'to_type' => 'topic', 'to_fieldname' => 'post_content',
 
 
 
 
 
101
  'callback_method' => 'callback_html'
102
- );
103
-
104
  // Topic title.
105
  $this->field_map[] = array(
106
- 'from_tablename' => 'topics', 'from_fieldname' => 'title',
107
- 'to_type' => 'topic', 'to_fieldname' => 'post_title'
 
 
108
  );
109
-
110
- // Topic slug. Clean name.
111
  $this->field_map[] = array(
112
- 'from_tablename' => 'topics', 'from_fieldname' => 'title',
113
- 'to_type' => 'topic', 'to_fieldname' => 'post_name',
 
 
114
  'callback_method' => 'callback_slug'
115
  );
116
-
117
- // Forum id. If no parent, than 0.
118
  $this->field_map[] = array(
119
- 'from_tablename' => 'topics', 'from_fieldname' => 'forum_id',
120
- 'to_type' => 'topic', 'to_fieldname' => 'post_parent',
 
 
121
  'callback_method' => 'callback_forumid'
122
  );
123
 
124
- // Topic date update.
 
 
 
 
 
 
 
125
  $this->field_map[] = array(
126
- 'from_tablename' => 'topics', 'from_fieldname' => 'start_date',
127
- 'to_type' => 'topic', 'to_fieldname' => 'post_date',
 
 
128
  'callback_method' => 'callback_datetime'
129
  );
130
  $this->field_map[] = array(
131
- 'from_tablename' => 'topics', 'from_fieldname' => 'start_date',
132
- 'to_type' => 'topic', 'to_fieldname' => 'post_date_gmt',
 
 
133
  'callback_method' => 'callback_datetime'
134
  );
135
  $this->field_map[] = array(
136
- 'from_tablename' => 'topics', 'from_fieldname' => 'last_post',
137
- 'to_type' => 'topic', 'to_fieldname' => 'post_modified',
 
 
138
  'callback_method' => 'callback_datetime'
139
  );
140
  $this->field_map[] = array(
141
- 'from_tablename' => 'topics', 'from_fieldname' => 'last_post',
142
- 'to_type' => 'topic', 'to_fieldname' => 'post_modified_gmt',
 
 
143
  'callback_method' => 'callback_datetime'
144
  );
145
 
146
  /** Tags Section ******************************************************/
147
-
148
  // Topic id.
149
  $this->field_map[] = array(
150
- 'from_tablename' => 'core_tags', 'from_fieldname' => 'tag_meta_id',
151
- 'to_type' => 'tags', 'to_fieldname' => 'objectid',
 
 
152
  'callback_method' => 'callback_topicid'
153
  );
154
-
155
- // Tags text.
156
  $this->field_map[] = array(
157
- 'from_tablename' => 'core_tags', 'from_fieldname' => 'tag_text',
158
- 'to_type' => 'tags', 'to_fieldname' => 'name'
159
- );
160
-
161
- /** Post Section ******************************************************/
 
 
162
 
163
- // Post id. Stores in postmeta.
164
  $this->field_map[] = array(
165
- 'from_tablename' => 'posts', 'from_fieldname' => 'pid', 'from_expression' => 'WHERE posts.new_topic = 0',
166
- 'to_type' => 'reply', 'to_fieldname' => '_bbp_post_id'
 
 
167
  );
168
-
169
- // Forum id. Stores in postmeta.
170
  $this->field_map[] = array(
171
- 'from_tablename' => 'posts', 'from_fieldname' => 'topic_id',
172
- 'to_type' => 'reply', 'to_fieldname' => '_bbp_forum_id',
 
 
173
  'callback_method' => 'callback_topicid_to_forumid'
174
  );
175
-
176
- // Topic id. Stores in postmeta.
177
  $this->field_map[] = array(
178
- 'from_tablename' => 'posts', 'from_fieldname' => 'topic_id',
179
- 'to_type' => 'reply', 'to_fieldname' => '_bbp_topic_id',
 
 
180
  'callback_method' => 'callback_topicid'
181
  );
182
-
183
- // Author ip.
184
- $this->field_map[] = array(
185
- 'from_tablename' => 'posts', 'from_fieldname' => 'ip_address',
186
- 'to_type' => 'reply', 'to_fieldname' => '__bbp_author_ip'
187
- );
188
-
189
- // Post author.
190
  $this->field_map[] = array(
191
- 'from_tablename' => 'posts', 'from_fieldname' => 'author_id',
192
- 'to_type' => 'reply', 'to_fieldname' => 'post_author',
193
- 'callback_method' => 'callback_userid'
 
194
  );
195
-
196
- // Topic title.
197
  $this->field_map[] = array(
198
- 'from_tablename' => 'posts', 'from_fieldname' => 'post_title',
199
- 'to_type' => 'reply', 'to_fieldname' => 'post_title'
 
 
 
200
  );
201
-
202
- // Topic slug. Clean name.
203
- $this->field_map[] = array(
204
- 'from_tablename' => 'posts', 'from_fieldname' => 'post_title',
205
- 'to_type' => 'reply', 'to_fieldname' => 'post_name',
206
- 'callback_method' => 'callback_slug'
 
 
 
 
 
 
207
  );
208
-
209
- // Post content.
210
  $this->field_map[] = array(
211
- 'from_tablename' => 'posts', 'from_fieldname' => 'post',
212
- 'to_type' => 'reply', 'to_fieldname' => 'post_content',
 
 
213
  'callback_method' => 'callback_html'
214
  );
215
-
216
- // Topic id. If no parent, than 0.
217
  $this->field_map[] = array(
218
- 'from_tablename' => 'posts', 'from_fieldname' => 'topic_id',
219
- 'to_type' => 'reply', 'to_fieldname' => 'post_parent',
 
 
220
  'callback_method' => 'callback_topicid'
221
  );
222
 
223
- // Topic date update.
224
  $this->field_map[] = array(
225
- 'from_tablename' => 'posts', 'from_fieldname' => 'post_date',
226
- 'to_type' => 'reply', 'to_fieldname' => 'post_date',
 
 
227
  'callback_method' => 'callback_datetime'
228
  );
229
  $this->field_map[] = array(
230
- 'from_tablename' => 'posts', 'from_fieldname' => 'post_date',
231
- 'to_type' => 'reply', 'to_fieldname' => 'post_date_gmt',
 
 
232
  'callback_method' => 'callback_datetime'
233
  );
234
  $this->field_map[] = array(
235
- 'from_tablename' => 'posts', 'from_fieldname' => 'edit_time',
236
- 'to_type' => 'reply', 'to_fieldname' => 'post_modified',
 
 
237
  'callback_method' => 'callback_datetime'
238
  );
239
  $this->field_map[] = array(
240
- 'from_tablename' => 'posts', 'from_fieldname' => 'edit_time',
241
- 'to_type' => 'reply', 'to_fieldname' => 'post_modified_gmt',
 
 
242
  'callback_method' => 'callback_datetime'
243
  );
244
 
245
  /** User Section ******************************************************/
246
 
247
- // Store old User id. Stores in usermeta.
248
  $this->field_map[] = array(
249
- 'from_tablename' => 'members', 'from_fieldname' => 'member_id',
250
- 'to_type' => 'user', 'to_fieldname' => '_bbp_user_id'
 
 
251
  );
252
-
253
- // Store old User password. Stores in usermeta serialized with salt.
254
  $this->field_map[] = array(
255
- 'from_tablename' => 'members', 'from_fieldname' => 'members_pass_hash',
256
- 'to_type' => 'user', 'to_fieldname' => '_bbp_password',
 
 
257
  'callback_method' => 'callback_savepass'
258
  );
259
 
260
- // Store old User Salt. This is only used for the SELECT row info for the above password save
261
  $this->field_map[] = array(
262
- 'from_tablename' => 'members', 'from_fieldname' => 'members_pass_salt',
263
- 'to_type' => 'user', 'to_fieldname' => ''
 
 
264
  );
265
-
266
- // User password verify class. Stores in usermeta for verifying password.
267
  $this->field_map[] = array(
268
- 'to_type' => 'user', 'to_fieldname' => '_bbp_class',
 
269
  'default' => 'Invision'
270
  );
271
-
272
  // User name.
273
  $this->field_map[] = array(
274
- 'from_tablename' => 'members', 'from_fieldname' => 'name',
275
- 'to_type' => 'user', 'to_fieldname' => 'user_login'
 
 
 
 
 
 
 
 
 
 
276
  );
277
-
278
  // User email.
279
  $this->field_map[] = array(
280
- 'from_tablename' => 'members', 'from_fieldname' => 'email',
281
- 'to_type' => 'user', 'to_fieldname' => 'user_email'
 
 
282
  );
283
-
284
  // User registered.
285
  $this->field_map[] = array(
286
- 'from_tablename' => 'members', 'from_fieldname' => 'joined',
287
- 'to_type' => 'user', 'to_fieldname' => 'user_registered',
 
 
288
  'callback_method' => 'callback_datetime'
289
  );
290
-
291
- /*
292
- * Table pfields_content AND pfields_data
 
 
 
 
 
 
 
 
 
293
  // User homepage.
294
  $this->field_map[] = array(
295
- 'from_tablename' => 'members', 'from_fieldname' => 'homepage',
296
- 'to_type' => 'user', 'to_fieldname' => 'user_url'
297
- );
298
-
299
- // User aim.
 
 
300
  $this->field_map[] = array(
301
- 'from_tablename' => 'members', 'from_fieldname' => 'aim',
302
- 'to_type' => 'user', 'to_fieldname' => 'aim'
 
 
303
  );
304
-
305
- // User yahoo.
306
  $this->field_map[] = array(
307
- 'from_tablename' => 'members', 'from_fieldname' => 'yahoo',
308
- 'to_type' => 'user', 'to_fieldname' => 'yim'
 
 
309
  );
310
- */
311
-
312
  }
313
 
314
  /**
315
  * This method allows us to indicates what is or is not converted for each
316
  * converter.
317
  */
318
- public function info()
319
- {
320
  return '';
321
  }
322
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
323
  /**
324
  * This method is to save the salt and password together. That
325
  * way when we authenticate it we can get it out of the database
326
  * as one value. Array values are auto sanitized by wordpress.
327
  */
328
- public function callback_savepass( $field, $row )
329
- {
330
- $pass_array = array( 'hash' => $field, 'salt' => $row['members_pass_salt'] );
331
- return $pass_array;
332
  }
333
 
334
  /**
335
  * This method is to take the pass out of the database and compare
336
  * to a pass the user has typed in.
337
  */
338
- public function authenticate_pass( $password, $serialized_pass )
339
- {
340
  $pass_array = unserialize( $serialized_pass );
341
  return ( $pass_array['hash'] == md5( md5( $pass_array['salt'] ) . md5( $this->to_char( $password ) ) ) );
342
  }
343
 
344
- public function to_char( $input )
345
- {
346
  $output = "";
347
- for( $i = 0; $i < strlen( $input ); $i++ )
348
- {
349
  $j = ord( $input{$i} );
350
- if( ( $j >= 65 && $j <= 90 )
351
  || ( $j >= 97 && $j <= 122 )
352
  || ( $j >= 48 && $j <= 57 ) )
353
  {
354
  $output .= $input{$i};
355
- }
356
- else
357
- {
358
  $output .= "&#" . ord( $input{$i} ) . ";";
359
  }
360
  }
361
  return $output;
362
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
363
  }
1
  <?php
2
 
3
  /**
4
+ * Implementation of Invision Power Board v3.x converter.
5
+ *
6
+ * @since bbPress (r4713)
7
+ * @link Codex Docs http://codex.bbpress.org/import-forums/invision
8
  */
9
+ class Invision extends BBP_Converter_Base {
10
+
11
+ /**
12
+ * Main Constructor
13
+ *
14
+ * @uses Invision::setup_globals()
15
+ */
16
+ function __construct() {
17
  parent::__construct();
18
  $this->setup_globals();
19
  }
20
 
21
+ /**
22
+ * Sets up the field mappings
23
+ */
24
+
25
+ public function setup_globals() {
26
+
27
  /** Forum Section ******************************************************/
28
 
29
+ // Forum id (Stored in postmeta)
30
  $this->field_map[] = array(
31
+ 'from_tablename' => 'forums',
32
+ 'from_fieldname' => 'id',
33
+ 'to_type' => 'forum',
34
+ 'to_fieldname' => '_bbp_forum_id'
35
  );
36
+
37
+ // Forum parent id (If no parent, then 0. Stored in postmeta)
38
+ $this->field_map[] = array(
39
+ 'from_tablename' => 'forums',
40
+ 'from_fieldname' => 'parent_id',
41
+ 'to_type' => 'forum',
42
+ 'to_fieldname' => '_bbp_forum_parent_id'
43
+ );
44
+
45
+ // Forum topic count (Stored in postmeta)
46
  $this->field_map[] = array(
47
+ 'from_tablename' => 'forums',
48
+ 'from_fieldname' => 'topics',
49
+ 'to_type' => 'forum',
50
+ 'to_fieldname' => '_bbp_topic_count'
51
  );
52
+
53
+ // Forum reply count (Stored in postmeta)
54
+ $this->field_map[] = array(
55
+ 'from_tablename' => 'forums',
56
+ 'from_fieldname' => 'posts',
57
+ 'to_type' => 'forum',
58
+ 'to_fieldname' => '_bbp_reply_count'
59
+ );
60
+
61
+ // Forum total topic count (Stored in postmeta)
62
+ $this->field_map[] = array(
63
+ 'from_tablename' => 'forums',
64
+ 'from_fieldname' => 'topics',
65
+ 'to_type' => 'forum',
66
+ 'to_fieldname' => '_bbp_total_topic_count'
67
+ );
68
+
69
+ // Forum total reply count (Stored in postmeta)
70
+ $this->field_map[] = array(
71
+ 'from_tablename' => 'forums',
72
+ 'from_fieldname' => 'posts',
73
+ 'to_type' => 'forum',
74
+ 'to_fieldname' => '_bbp_total_reply_count'
75
+ );
76
+
77
  // Forum title.
78
  $this->field_map[] = array(
79
+ 'from_tablename' => 'forums',
80
+ 'from_fieldname' => 'name',
81
+ 'to_type' => 'forum',
82
+ 'to_fieldname' => 'post_title'
83
  );
84
+
85
+ // Forum slug (Clean name to avoid confilcts)
86
  $this->field_map[] = array(
87
+ 'from_tablename' => 'forums',
88
+ 'from_fieldname' => 'name',
89
+ 'to_type' => 'forum',
90
+ 'to_fieldname' => 'post_name',
91
  'callback_method' => 'callback_slug'
92
  );
93
+
94
  // Forum description.
95
  $this->field_map[] = array(
96
+ 'from_tablename' => 'forums',
97
+ 'from_fieldname' => 'description',
98
+ 'to_type' => 'forum',
99
+ 'to_fieldname' => 'post_content',
100
  'callback_method' => 'callback_null'
101
  );
102
+
103
+ // Forum display order (Starts from 1)
104
  $this->field_map[] = array(
105
+ 'from_tablename' => 'forums',
106
+ 'from_fieldname' => 'position',
107
+ 'to_type' => 'forum',
108
+ 'to_fieldname' => 'menu_order'
109
  );
110
+
111
+ // Forum dates.
112
  $this->field_map[] = array(
113
+ 'to_type' => 'forum',
114
+ 'to_fieldname' => 'post_date',
115
  'default' => date('Y-m-d H:i:s')
116
  );
117
  $this->field_map[] = array(
118
+ 'to_type' => 'forum',
119
+ 'to_fieldname' => 'post_date_gmt',
120
  'default' => date('Y-m-d H:i:s')
121
  );
122
  $this->field_map[] = array(
123
+ 'to_type' => 'forum',
124
+ 'to_fieldname' => 'post_modified',
125
  'default' => date('Y-m-d H:i:s')
126
  );
127
  $this->field_map[] = array(
128
+ 'to_type' => 'forum',
129
+ 'to_fieldname' => 'post_modified_gmt',
130
  'default' => date('Y-m-d H:i:s')
131
  );
132
 
133
  /** Topic Section ******************************************************/
134
 
135
+ // Topic id (Stored in postmeta)
136
  $this->field_map[] = array(
137
+ 'from_tablename' => 'topics',
138
+ 'from_fieldname' => 'tid',
139
+ 'to_type' => 'topic',
140
+ 'to_fieldname' => '_bbp_topic_id'
141
  );
142
+
143
+ // Topic reply count (Stored in postmeta)
144
+ $this->field_map[] = array(
145
+ 'from_tablename' => 'topics',
146
+ 'from_fieldname' => 'posts',
147
+ 'to_type' => 'topic',
148
+ 'to_fieldname' => '_bbp_reply_count',
149
+ 'callback_method' => 'callback_topic_reply_count'
150
+ );
151
+
152
+ // Topic parent forum id (If no parent, then 0. Stored in postmeta)
153
  $this->field_map[] = array(
154
+ 'from_tablename' => 'topics',
155
+ 'from_fieldname' => 'forum_id',
156
+ 'to_type' => 'topic',
157
+ 'to_fieldname' => '_bbp_forum_id',
158
  'callback_method' => 'callback_forumid'
159
  );
160
+
161
  // Topic author.
162
  $this->field_map[] = array(
163
+ 'from_tablename' => 'topics',
164
+ 'from_fieldname' => 'starter_id',
165
+ 'to_type' => 'topic',
166
+ 'to_fieldname' => 'post_author',
167
  'callback_method' => 'callback_userid'
168
  );
169
+
170
  // Topic content.
171
+ // Note: We join the posts table because topics do not have content.
172
+ $this->field_map[] = array(
173
+ 'from_tablename' => 'posts',
174
+ 'from_fieldname' => 'post',
175
+ 'join_tablename' => 'topics',
176
+ 'join_type' => 'INNER',
177
+ 'join_expression' => 'ON(topics.tid = posts.topic_id) WHERE posts.new_topic = 1',
178
+ 'to_type' => 'topic',
179
+ 'to_fieldname' => 'post_content',
180
  'callback_method' => 'callback_html'
181
+ );
182
+
183
  // Topic title.
184
  $this->field_map[] = array(
185
+ 'from_tablename' => 'topics',
186
+ 'from_fieldname' => 'title',
187
+ 'to_type' => 'topic',
188
+ 'to_fieldname' => 'post_title'
189
  );
190
+
191
+ // Topic slug (Clean name to avoid conflicts)
192
  $this->field_map[] = array(
193
+ 'from_tablename' => 'topics',
194
+ 'from_fieldname' => 'title',
195
+ 'to_type' => 'topic',
196
+ 'to_fieldname' => 'post_name',
197
  'callback_method' => 'callback_slug'
198
  );
199
+
200
+ // Topic parent forum id (If no parent, then 0)
201
  $this->field_map[] = array(
202
+ 'from_tablename' => 'topics',
203
+ 'from_fieldname' => 'forum_id',
204
+ 'to_type' => 'topic',
205
+ 'to_fieldname' => 'post_parent',
206
  'callback_method' => 'callback_forumid'
207
  );
208
 
209
+ // Topic dates.
210
+ $this->field_map[] = array(
211
+ 'from_tablename' => 'topics',
212
+ 'from_fieldname' => 'start_date',
213
+ 'to_type' => 'topic',
214
+ 'to_fieldname' => 'post_date',
215
+ 'callback_method' => 'callback_datetime'
216
+ );
217
  $this->field_map[] = array(
218
+ 'from_tablename' => 'topics',
219
+ 'from_fieldname' => 'start_date',
220
+ 'to_type' => 'topic',
221
+ 'to_fieldname' => 'post_date_gmt',
222
  'callback_method' => 'callback_datetime'
223
  );
224
  $this->field_map[] = array(
225
+ 'from_tablename' => 'topics',
226
+ 'from_fieldname' => 'last_post',
227
+ 'to_type' => 'topic',
228
+ 'to_fieldname' => 'post_modified',
229
  'callback_method' => 'callback_datetime'
230
  );
231
  $this->field_map[] = array(
232
+ 'from_tablename' => 'topics',
233
+ 'from_fieldname' => 'last_post',
234
+ 'to_type' => 'topic',
235
+ 'to_fieldname' => 'post_modified_gmt',
236
  'callback_method' => 'callback_datetime'
237
  );
238
  $this->field_map[] = array(
239
+ 'from_tablename' => 'topics',
240
+ 'from_fieldname' => 'last_post',
241
+ 'to_type' => 'topic',
242
+ 'to_fieldname' => '_bbp_last_active_time',
243
  'callback_method' => 'callback_datetime'
244
  );
245
 
246
  /** Tags Section ******************************************************/
247
+
248
  // Topic id.
249
  $this->field_map[] = array(
250
+ 'from_tablename' => 'core_tags',
251
+ 'from_fieldname' => 'tag_meta_id',
252
+ 'to_type' => 'tags',
253
+ 'to_fieldname' => 'objectid',
254
  'callback_method' => 'callback_topicid'
255
  );
256
+
257
+ // Term text.
258
  $this->field_map[] = array(
259
+ 'from_tablename' => 'core_tags',
260
+ 'from_fieldname' => 'tag_text',
261
+ 'to_type' => 'tags',
262
+ 'to_fieldname' => 'name'
263
+ );
264
+
265
+ /** Reply Section ******************************************************/
266
 
267
+ // Reply id (Stored in postmeta)
268
  $this->field_map[] = array(
269
+ 'from_tablename' => 'posts',
270
+ 'from_fieldname' => 'pid',
271
+ 'to_type' => 'reply',
272
+ 'to_fieldname' => '_bbp_post_id'
273
  );
274
+
275
+ // Reply parent forum id (If no parent, then 0. Stored in postmeta)
276
  $this->field_map[] = array(
277
+ 'from_tablename' => 'posts',
278
+ 'from_fieldname' => 'topic_id',
279
+ 'to_type' => 'reply',
280
+ 'to_fieldname' => '_bbp_forum_id',
281
  'callback_method' => 'callback_topicid_to_forumid'
282
  );
283
+
284
+ // Reply parent topic id (If no parent, then 0. Stored in postmeta)
285
  $this->field_map[] = array(
286
+ 'from_tablename' => 'posts',
287
+ 'from_fieldname' => 'topic_id',
288
+ 'to_type' => 'reply',
289
+ 'to_fieldname' => '_bbp_topic_id',
290
  'callback_method' => 'callback_topicid'
291
  );
292
+
293
+ // Reply author ip (Stored in postmeta)
 
 
 
 
 
 
294
  $this->field_map[] = array(
295
+ 'from_tablename' => 'posts',
296
+ 'from_fieldname' => 'ip_address',
297
+ 'to_type' => 'reply',
298
+ 'to_fieldname' => '_bbp_author_ip'
299
  );
300
+
301
+ // Reply author.
302
  $this->field_map[] = array(
303
+ 'from_tablename' => 'posts',
304
+ 'from_fieldname' => 'author_id',
305
+ 'to_type' => 'reply',
306
+ 'to_fieldname' => 'post_author',
307
+ 'callback_method' => 'callback_userid'
308
  );
309
+
310
+ // Reply title.
311
+ // Note: We join the topics table because post table does not include topic title.
312
+ $this->field_map[] = array(
313
+ 'from_tablename' => 'topics',
314
+ 'from_fieldname' => 'title',
315
+ 'join_tablename' => 'posts',
316
+ 'join_type' => 'INNER',
317
+ 'join_expression' => 'ON (topics.tid = posts.topic_id) WHERE posts.new_topic = 0',
318
+ 'to_type' => 'reply',
319
+ 'to_fieldname' => 'post_title',
320
+ 'callback_method' => 'callback_reply_title'
321
  );
322
+
323
+ // Reply content.
324
  $this->field_map[] = array(
325
+ 'from_tablename' => 'posts',
326
+ 'from_fieldname' => 'post',
327
+ 'to_type' => 'reply',
328
+ 'to_fieldname' => 'post_content',
329
  'callback_method' => 'callback_html'
330
  );
331
+
332
+ // Reply parent topic id (If no parent, then 0)
333
  $this->field_map[] = array(
334
+ 'from_tablename' => 'posts',
335
+ 'from_fieldname' => 'topic_id',
336
+ 'to_type' => 'reply',
337
+ 'to_fieldname' => 'post_parent',
338
  'callback_method' => 'callback_topicid'
339
  );
340
 
341
+ // Reply dates.
342
  $this->field_map[] = array(
343
+ 'from_tablename' => 'posts',
344
+ 'from_fieldname' => 'post_date',
345
+ 'to_type' => 'reply',
346
+ 'to_fieldname' => 'post_date',
347
  'callback_method' => 'callback_datetime'
348
  );
349
  $this->field_map[] = array(
350
+ 'from_tablename' => 'posts',
351
+ 'from_fieldname' => 'post_date',
352
+ 'to_type' => 'reply',
353
+ 'to_fieldname' => 'post_date_gmt',
354
  'callback_method' => 'callback_datetime'
355
  );
356
  $this->field_map[] = array(
357
+ 'from_tablename' => 'posts',
358
+ 'from_fieldname' => 'edit_time',
359
+ 'to_type' => 'reply',
360
+ 'to_fieldname' => 'post_modified',
361
  'callback_method' => 'callback_datetime'
362
  );
363
  $this->field_map[] = array(
364
+ 'from_tablename' => 'posts',
365
+ 'from_fieldname' => 'edit_time',
366
+ 'to_type' => 'reply',
367
+ 'to_fieldname' => 'post_modified_gmt',
368
  'callback_method' => 'callback_datetime'
369
  );
370
 
371
  /** User Section ******************************************************/
372
 
373
+ // Store old User id (Stored in usermeta)
374
  $this->field_map[] = array(
375
+ 'from_tablename' => 'members',
376
+ 'from_fieldname' => 'member_id',
377
+ 'to_type' => 'user',
378
+ 'to_fieldname' => '_bbp_user_id'
379
  );
380
+
381
+ // Store old User password (Stored in usermeta serialized with salt)
382
  $this->field_map[] = array(
383
+ 'from_tablename' => 'members',
384
+ 'from_fieldname' => 'members_pass_hash',
385
+ 'to_type' => 'user',
386
+ 'to_fieldname' => '_bbp_password',
387
  'callback_method' => 'callback_savepass'
388
  );
389
 
390
+ // Store old User Salt (This is only used for the SELECT row info for the above password save)
391
  $this->field_map[] = array(
392
+ 'from_tablename' => 'members',
393
+ 'from_fieldname' => 'members_pass_salt',
394
+ 'to_type' => 'user',
395
+ 'to_fieldname' => ''
396
  );
397
+
398
+ // User password verify class (Stored in usermeta for verifying password)
399
  $this->field_map[] = array(
400
+ 'to_type' => 'user',
401
+ 'to_fieldname' => '_bbp_class',
402
  'default' => 'Invision'
403
  );
404
+
405
  // User name.
406
  $this->field_map[] = array(
407
+ 'from_tablename' => 'members',
408
+ 'from_fieldname' => 'name',
409
+ 'to_type' => 'user',
410
+ 'to_fieldname' => 'user_login'
411
+ );
412
+
413
+ // User nice name.
414
+ $this->field_map[] = array(
415
+ 'from_tablename' => 'members',
416
+ 'from_fieldname' => 'name',
417
+ 'to_type' => 'user',
418
+ 'to_fieldname' => 'user_nicename'
419
  );
420
+
421
  // User email.
422
  $this->field_map[] = array(
423
+ 'from_tablename' => 'members',
424
+ 'from_fieldname' => 'email',
425
+ 'to_type' => 'user',
426
+ 'to_fieldname' => 'user_email'
427
  );
428
+
429
  // User registered.
430
  $this->field_map[] = array(
431
+ 'from_tablename' => 'members',
432
+ 'from_fieldname' => 'joined',
433
+ 'to_type' => 'user',
434
+ 'to_fieldname' => 'user_registered',
435
  'callback_method' => 'callback_datetime'
436
  );
437
+
438
+ // User display name.
439
+ $this->field_map[] = array(
440
+ 'from_tablename' => 'members',
441
+ 'from_fieldname' => 'members_display_name',
442
+ 'to_type' => 'user',
443
+ 'to_fieldname' => 'display_name'
444
+ );
445
+
446
+ /*
447
+ * Table pfields_content AND pfields_data
448
+ * These can be included once USER import JOIN bug is fixed
449
  // User homepage.
450
  $this->field_map[] = array(
451
+ 'from_tablename' => 'members',
452
+ 'from_fieldname' => 'homepage',
453
+ 'to_type' => 'user',
454
+ 'to_fieldname' => 'user_url'
455
+ );
456
+
457
+ // User AIM (Stored in usermeta)
458
  $this->field_map[] = array(
459
+ 'from_tablename' => 'members',
460
+ 'from_fieldname' => 'aim',
461
+ 'to_type' => 'user',
462
+ 'to_fieldname' => 'aim'
463
  );
464
+
465
+ // User Yahoo (Stored in usermeta)
466
  $this->field_map[] = array(
467
+ 'from_tablename' => 'members',
468
+ 'from_fieldname' => 'yahoo',
469
+ 'to_type' => 'user',
470
+ 'to_fieldname' => 'yim'
471
  );
472
+ */
473
+
474
  }
475
 
476
  /**
477
  * This method allows us to indicates what is or is not converted for each
478
  * converter.
479
  */
480
+ public function info() {
 
481
  return '';
482
  }
483
 
484
+ /**
485
+ * Verify the topic reply count.
486
+ *
487
+ * @param int $count Invision reply count
488
+ * @return string WordPress safe
489
+ */
490
+ public function callback_topic_reply_count( $count = 1 ) {
491
+ $count = absint( (int) $count - 1 );
492
+ return $count;
493
+ }
494
+
495
+ /**
496
+ * Set the reply title
497
+ *
498
+ * @param string $title Invision topic title of this reply
499
+ * @return string Prefixed topic title, or empty string
500
+ */
501
+ public function callback_reply_title( $title = '' ) {
502
+ $title = !empty( $title ) ? __( 'Re: ', 'bbpress' ) . html_entity_decode( $title ) : '';
503
+ return $title;
504
+ }
505
+
506
  /**
507
  * This method is to save the salt and password together. That
508
  * way when we authenticate it we can get it out of the database
509
  * as one value. Array values are auto sanitized by wordpress.
510
  */
511
+ public function callback_savepass( $field, $row ) {
512
+ return array( 'hash' => $field, 'salt' => $row['members_pass_salt'] );
 
 
513
  }
514
 
515
  /**
516
  * This method is to take the pass out of the database and compare
517
  * to a pass the user has typed in.
518
  */
519
+ public function authenticate_pass( $password, $serialized_pass ) {
 
520
  $pass_array = unserialize( $serialized_pass );
521
  return ( $pass_array['hash'] == md5( md5( $pass_array['salt'] ) . md5( $this->to_char( $password ) ) ) );
522
  }
523
 
524
+ private function to_char( $input ) {
 
525
  $output = "";
526
+ for ( $i = 0; $i < strlen( $input ); $i++ ) {
 
527
  $j = ord( $input{$i} );
528
+ if ( ( $j >= 65 && $j <= 90 )
529
  || ( $j >= 97 && $j <= 122 )
530
  || ( $j >= 48 && $j <= 57 ) )
531
  {
532
  $output .= $input{$i};
533
+ } else {
 
 
534
  $output .= "&#" . ord( $input{$i} ) . ";";
535
  }
536
  }
537
  return $output;
538
  }
539
+
540
+ /**
541
+ * This callback processes any custom BBCodes with parser.php
542
+ */
543
+ protected function callback_html( $field ) {
544
+
545
+ // Strips Invision custom HTML first from $field before parsing $field to parser.php
546
+ $invision_markup = $field;
547
+ $invision_markup = html_entity_decode( $invision_markup );
548
+
549
+ // Replace '[html]' with '<pre><code>'
550
+ $invision_markup = preg_replace( '/\[html\]/', '<pre><code>', $invision_markup );
551
+ // Replace '[/html]' with '</code></pre>'
552
+ $invision_markup = preg_replace( '/\[\/html\]/', '</code></pre>', $invision_markup );
553
+ // Replace '[sql]' with '<pre><code>'
554
+ $invision_markup = preg_replace( '/\[sql\]/', '<pre><code>', $invision_markup );
555
+ // Replace '[/sql]' with '</code></pre>'
556
+ $invision_markup = preg_replace( '/\[\/sql\]/', '</code></pre>', $invision_markup );
557
+ // Replace '[php]' with '<pre><code>'
558
+ $invision_markup = preg_replace( '/\[php\]/', '<pre><code>', $invision_markup );
559
+ // Replace '[/php]' with '</code></pre>'
560
+ $invision_markup = preg_replace( '/\[\/php\]/', '</code></pre>', $invision_markup );
561
+ // Replace '[xml]' with '<pre><code>'
562
+ $invision_markup = preg_replace( '/\[xml\]/', '<pre><code>', $invision_markup );
563
+ // Replace '[/xml]' with '</code></pre>'
564
+ $invision_markup = preg_replace( '/\[\/xml\]/', '</code></pre>', $invision_markup );
565
+ // Replace '[CODE]' with '<pre><code>'
566
+ $invision_markup = preg_replace( '/\[CODE\]/', '<pre><code>', $invision_markup );
567
+ // Replace '[/CODE]' with '</code></pre>'
568
+ $invision_markup = preg_replace( '/\[\/CODE\]/', '</code></pre>', $invision_markup );
569
+
570
+ // Replace '[quote:XXXXXXX]' with '<blockquote>'
571
+ $invision_markup = preg_replace( '/\[quote:(.*?)\]/', '<blockquote>', $invision_markup );
572
+ // Replace '[quote="$1"]' with '<em>@$1 wrote:</em><blockquote>'
573
+ $invision_markup = preg_replace( '/\[quote="(.*?)":(.*?)\]/', '<em>@$1 wrote:</em><blockquote>', $invision_markup );
574
+ // Replace '[/quote:XXXXXXX]' with '</blockquote>'
575
+ $invision_markup = preg_replace( '/\[\/quote:(.*?)\]/', '</blockquote>', $invision_markup );
576
+
577
+ // Replace '[twitter]$1[/twitter]' with '<a href="https://twitter.com/$1">@$1</a>"
578
+ $invision_markup = preg_replace( '/\[twitter\](.*?)\[\/twitter\]/', '<a href="https://twitter.com/$1">@$1</a>', $invision_markup );
579
+
580
+ // Replace '[member='username']' with '@username"
581
+ $invision_markup = preg_replace( '/\[member=\'(.*?)\'\]/', '@$1 ', $invision_markup );
582
+
583
+ // Replace '[media]' with ''
584
+ $invision_markup = preg_replace( '/\[media\]/', '', $invision_markup );
585
+ // Replace '[/media]' with ''
586
+ $invision_markup = preg_replace( '/\[\/media\]/', '', $invision_markup );
587
+
588
+ // Replace '[list:XXXXXXX]' with '<ul>'
589
+ $invision_markup = preg_replace( '/\[list\]/', '<ul>', $invision_markup );
590
+ // Replace '[list=1:XXXXXXX]' with '<ul>'
591
+ $invision_markup = preg_replace( '/\[list=1\]/', '<ul>', $invision_markup );
592
+ // Replace '[*:XXXXXXX]' with '<li>'
593
+ $invision_markup = preg_replace( '/\[\*\](.*?)\<br \/\>/', '<li>$1</li>', $invision_markup );
594
+ // Replace '[/list:u:XXXXXXX]' with '</ul>'
595
+ $invision_markup = preg_replace( '/\[\/list\]/', '</ul>', $invision_markup );
596
+
597
+ // Replace '[hr]' with '<hr>"
598
+ $invision_markup = preg_replace( '/\[hr\]/', '<hr>', $invision_markup );
599
+
600
+ // Replace '[font=XXXXXXX]' with ''
601
+ $invision_markup = preg_replace( '/\[font=(.*?)\]/', '', $invision_markup );
602
+ // Replace '[/font]' with ''
603
+ $invision_markup = preg_replace( '/\[\/font\]/', '', $invision_markup );
604
+
605
+ // Replace any Invision smilies from path '/sp-resources/forum-smileys/sf-smily.gif' with the equivelant WordPress Smilie
606
+ $invision_markup = preg_replace( '/\<img src=(.*?)EMO\_DIR(.*?)bbc_emoticon(.*?)alt=\'(.*?)\' \/\>/', '$4', $invision_markup );
607
+ $invision_markup = preg_replace( '/\:angry\:/', ':mad:', $invision_markup );
608
+ $invision_markup = preg_replace( '/\:mellow\:/', ':neutral:', $invision_markup );
609
+ $invision_markup = preg_replace( '/\:blink\:/', ':eek:', $invision_markup );
610
+ $invision_markup = preg_replace( '/B\)/', ':cool:', $invision_markup );
611
+ $invision_markup = preg_replace( '/\:rolleyes\:/', ':roll:', $invision_markup );
612
+ $invision_markup = preg_replace( '/\:unsure\:/', ':???:', $invision_markup );
613
+
614
+ // Now that Invision custom HTML has been stripped put the cleaned HTML back in $field
615
+ $field = $invision_markup;
616
+
617
+ require_once( bbpress()->admin->admin_dir . 'parser.php' );
618
+ $bbcode = BBCode::getInstance();
619
+ $bbcode->enable_smileys = false;
620
+ $bbcode->smiley_regex = false;
621
+ return html_entity_decode( $bbcode->Parse( $field ) );
622
+ }
623
  }
includes/admin/converters/Mingle.php ADDED
@@ -0,0 +1,454 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Implementation of Mingle Forums converter.
5
+ *
6
+ * @since bbPress (r4691)
7
+ * @link Codex Docs http://codex.bbpress.org/import-forums/mingle
8
+ */
9
+ class Mingle extends BBP_Converter_Base {
10
+
11
+ /**
12
+ * Main constructor
13
+ *
14
+ * @uses Mingle::setup_globals()
15
+ */
16
+ function __construct() {
17
+ parent::__construct();
18
+ $this->setup_globals();
19
+ }
20
+
21
+ /**
22
+ * Sets up the field mappings
23
+ */
24
+ public function setup_globals() {
25
+
26
+ /** Forum Section ******************************************************/
27
+
28
+ // Forum id (Stored in postmeta)
29
+ $this->field_map[] = array(
30
+ 'from_tablename' => 'forum_forums',
31
+ 'from_fieldname' => 'id',
32
+ 'to_type' => 'forum',
33
+ 'to_fieldname' => '_bbp_forum_id'
34
+ );
35
+
36
+ // Forum parent id (If no parent, then 0. Stored in postmeta)
37
+ $this->field_map[] = array(
38
+ 'from_tablename' => 'forum_forums',
39
+ 'from_fieldname' => 'parent_id',
40
+ 'to_type' => 'forum',
41
+ 'to_fieldname' => '_bbp_forum_parent_id'
42
+ );
43
+
44
+ // Forum title.
45
+ $this->field_map[] = array(
46
+ 'from_tablename' => 'forum_forums',
47
+ 'from_fieldname' => 'name',
48
+ 'to_type' => 'forum',
49
+ 'to_fieldname' => 'post_title'
50
+ );
51
+
52
+ // Forum slug (Clean name to avoid confilcts)
53
+ $this->field_map[] = array(
54
+ 'from_tablename' => 'forum_forums',
55
+ 'from_fieldname' => 'name',
56
+ 'to_type' => 'forum',
57
+ 'to_fieldname' => 'post_name',
58
+ 'callback_method' => 'callback_slug'
59
+ );
60
+ // Forum description.
61
+ $this->field_map[] = array(
62
+ 'from_tablename' => 'forum_forums',
63
+ 'from_fieldname' => 'description',
64
+ 'to_type' => 'forum',
65
+ 'to_fieldname' => 'post_content',
66
+ 'callback_method' => 'callback_null'
67
+ );
68
+
69
+ // Forum display order (Starts from 1)
70
+ $this->field_map[] = array(
71
+ 'from_tablename' => 'forum_forums',
72
+ 'from_fieldname' => 'sort',
73
+ 'to_type' => 'forum',
74
+ 'to_fieldname' => 'menu_order'
75
+ );
76
+
77
+ // Forum dates.
78
+ $this->field_map[] = array(
79
+ 'to_type' => 'forum',
80
+ 'to_fieldname' => 'post_date',
81
+ 'default' => date('Y-m-d H:i:s')
82
+ );
83
+ $this->field_map[] = array(
84
+ 'to_type' => 'forum',
85
+ 'to_fieldname' => 'post_date_gmt',
86
+ 'default' => date('Y-m-d H:i:s')
87
+ );
88
+ $this->field_map[] = array(
89
+ 'to_type' => 'forum',
90
+ 'to_fieldname' => 'post_modified',
91
+ 'default' => date('Y-m-d H:i:s')
92
+ );
93
+ $this->field_map[] = array(
94
+ 'to_type' => 'forum',
95
+ 'to_fieldname' => 'post_modified_gmt',
96
+ 'default' => date('Y-m-d H:i:s')
97
+ );
98
+
99
+ /** Topic Section ******************************************************/
100
+
101
+ // Topic id (Stored in postmeta)
102
+ $this->field_map[] = array(
103
+ 'from_tablename' => 'forum_threads',
104
+ 'from_fieldname' => 'id',
105
+ 'to_type' => 'topic',
106
+ 'to_fieldname' => '_bbp_topic_id'
107
+ );
108
+
109
+ // Topic parent forum id (If no parent, then 0. Stored in postmeta)
110
+ $this->field_map[] = array(
111
+ 'from_tablename' => 'forum_threads',
112
+ 'from_fieldname' => 'parent_id',
113
+ 'to_type' => 'topic',
114
+ 'to_fieldname' => '_bbp_forum_id',
115
+ 'callback_method' => 'callback_forumid'
116
+ );
117
+
118
+ // Topic author.
119
+ $this->field_map[] = array(
120
+ 'from_tablename' => 'forum_threads',
121
+ 'from_fieldname' => 'starter',
122
+ 'to_type' => 'topic',
123
+ 'to_fieldname' => 'post_author',
124
+ 'callback_method' => 'callback_userid'
125
+ );
126
+
127
+ // Topic content.
128
+ // Note: We join the forum_posts table because forum_topics do not have topic content.
129
+ $this->field_map[] = array(
130
+ 'from_tablename' => 'forum_posts',
131
+ 'from_fieldname' => 'text',
132
+ 'join_tablename' => 'forum_threads',
133
+ 'join_type' => 'INNER',
134
+ 'join_expression' => 'USING (subject)',
135
+ 'to_type' => 'topic',
136
+ 'to_fieldname' => 'post_content',
137
+ 'callback_method' => 'callback_html'
138
+ );
139
+ // Topic title.
140
+ $this->field_map[] = array(
141
+ 'from_tablename' => 'forum_threads',
142
+ 'from_fieldname' => 'subject',
143
+ 'to_type' => 'topic',
144
+ 'to_fieldname' => 'post_title'
145
+ );
146
+
147
+ // Topic slug (Clean name to avoid conflicts)
148
+ $this->field_map[] = array(
149
+ 'from_tablename' => 'forum_threads',
150
+ 'from_fieldname' => 'subject',
151
+ 'to_type' => 'topic',
152
+ 'to_fieldname' => 'post_name',
153
+ 'callback_method' => 'callback_slug'
154
+ );
155
+
156
+ // Topic parent forum id (If no parent, then 0)
157
+ $this->field_map[] = array(
158
+ 'from_tablename' => 'forum_threads',
159
+ 'from_fieldname' => 'parent_id',
160
+ 'to_type' => 'topic',
161
+ 'to_fieldname' => 'post_parent',
162
+ 'callback_method' => 'callback_forumid'
163
+ );
164
+
165
+ // Topic dates.
166
+ $this->field_map[] = array(
167
+ 'from_tablename' => 'forum_threads',
168
+ 'from_fieldname' => 'date',
169
+ 'to_type' => 'topic',
170
+ 'to_fieldname' => 'post_date'
171
+ );
172
+ $this->field_map[] = array(
173
+ 'from_tablename' => 'forum_threads',
174
+ 'from_fieldname' => 'date',
175
+ 'to_type' => 'topic',
176
+ 'to_fieldname' => 'post_date_gmt'
177
+ );
178
+ $this->field_map[] = array(
179
+ 'from_tablename' => 'forum_threads',
180
+ 'from_fieldname' => 'last_post',
181
+ 'to_type' => 'topic',
182
+ 'to_fieldname' => 'post_modified'
183
+ );
184
+ $this->field_map[] = array(
185
+ 'from_tablename' => 'forum_threads',
186
+ 'from_fieldname' => 'last_post',
187
+ 'to_type' => 'topic',
188
+ 'to_fieldname' => 'post_modified_gmt'
189
+ );
190
+ $this->field_map[] = array(
191
+ 'from_tablename' => 'forum_threads',
192
+ 'from_fieldname' => 'last_post',
193
+ 'to_type' => 'topic',
194
+ 'to_fieldname' => '_bbp_last_active_time'
195
+ );
196
+
197
+ // Topic status (Open or Closed)
198
+ $this->field_map[] = array(
199
+ 'from_tablename' => 'forum_threads',
200
+ 'from_fieldname' => 'closed',
201
+ 'to_type' => 'topic',
202
+ 'to_fieldname' => 'post_status',
203
+ 'callback_method' => 'callback_topic_status'
204
+ );
205
+
206
+ /** Tags Section ******************************************************/
207
+
208
+ /**
209
+ * Mingle Forums do not support topic tags
210
+ */
211
+
212
+ /** Reply Section ******************************************************/
213
+
214
+ // Reply id (Stored in postmeta)
215
+ $this->field_map[] = array(
216
+ 'from_tablename' => 'forum_posts',
217
+ 'from_fieldname' => 'id',
218
+ 'to_type' => 'reply',
219
+ 'to_fieldname' => '_bbp_post_id'
220
+ );
221
+
222
+ // Setup reply section table joins
223
+ // We need join the 'forum_threads' table to only import replies
224
+ $this->field_map[] = array(
225
+ 'from_tablename' => 'forum_threads',
226
+ 'from_fieldname' => 'date',
227
+ 'join_tablename' => 'forum_posts',
228
+ 'join_type' => 'INNER',
229
+ 'join_expression' => 'ON forum_posts.parent_id = forum_threads.id',
230
+ 'from_expression' => 'WHERE forum_threads.subject != forum_posts.subject',
231
+ 'to_type' => 'reply',
232
+ 'to_fieldname' => '_bbp_last_active_time'
233
+ );
234
+
235
+ // Reply parent forum id (If no parent, then 0. Stored in postmeta)
236
+ $this->field_map[] = array(
237
+ 'from_tablename' => 'forum_posts',
238
+ 'from_fieldname' => 'parent_id',
239
+ 'to_type' => 'reply',
240
+ 'to_fieldname' => '_bbp_forum_id',
241
+ 'callback_method' => 'callback_topicid_to_forumid'
242
+ );
243
+
244
+ // Reply parent topic id (If no parent, then 0. Stored in postmeta)
245
+ $this->field_map[] = array(
246
+ 'from_tablename' => 'forum_posts',
247
+ 'from_fieldname' => 'id',
248
+ 'to_type' => 'reply',
249
+ 'to_fieldname' => '_bbp_topic_id',
250
+ 'callback_method' => 'callback_topicid'
251
+ );
252
+
253
+ // Reply author.
254
+ $this->field_map[] = array(
255
+ 'from_tablename' => 'forum_posts',
256
+ 'from_fieldname' => 'author_id',
257
+ 'to_type' => 'reply',
258
+ 'to_fieldname' => 'post_author',
259
+ 'callback_method' => 'callback_userid'
260
+ );
261
+
262
+ // Reply title.
263
+ $this->field_map[] = array(
264
+ 'from_tablename' => 'forum_posts',
265
+ 'from_fieldname' => 'subject',
266
+ 'to_type' => 'reply',
267
+ 'to_fieldname' => 'post_title'
268
+ );
269
+
270
+ // Reply slug (Clean name to avoid conflicts)
271
+ $this->field_map[] = array(
272
+ 'from_tablename' => 'forum_posts',
273
+ 'from_fieldname' => 'subject',
274
+ 'to_type' => 'reply',
275
+ 'to_fieldname' => 'post_name',
276
+ 'callback_method' => 'callback_slug'
277
+ );
278
+
279
+ // Reply content.
280
+ $this->field_map[] = array(
281
+ 'from_tablename' => 'forum_posts',
282
+ 'from_fieldname' => 'text',
283
+ 'to_type' => 'reply',
284
+ 'to_fieldname' => 'post_content',
285
+ 'callback_method' => 'callback_html'
286
+ );
287
+
288
+ // Reply parent topic id (If no parent, then 0)
289
+ $this->field_map[] = array(
290
+ 'from_tablename' => 'forum_posts',
291
+ 'from_fieldname' => 'parent_id',
292
+ 'to_type' => 'reply',
293
+ 'to_fieldname' => 'post_parent',
294
+ 'callback_method' => 'callback_topicid'
295
+ );
296
+
297
+ // Reply dates.
298
+ $this->field_map[] = array(
299
+ 'from_tablename' => 'forum_posts',
300
+ 'from_fieldname' => 'date',
301
+ 'to_type' => 'reply',
302
+ 'to_fieldname' => 'post_date'
303
+ );
304
+ $this->field_map[] = array(
305
+ 'from_tablename' => 'forum_posts',
306
+ 'from_fieldname' => 'date',
307
+ 'to_type' => 'reply',
308
+ 'to_fieldname' => 'post_date_gmt'
309
+ );
310
+ $this->field_map[] = array(
311
+ 'from_tablename' => 'forum_posts',
312
+ 'from_fieldname' => 'date',
313
+ 'to_type' => 'reply',
314
+ 'to_fieldname' => 'post_modified'
315
+ );
316
+ $this->field_map[] = array(
317
+ 'from_tablename' => 'forum_posts',
318
+ 'from_fieldname' => 'date',
319
+ 'to_type' => 'reply',
320
+ 'to_fieldname' => 'post_modified_gmt'
321
+ );
322
+
323
+ /** User Section ******************************************************/
324
+
325
+ // Store old User id (Stored in usermeta)
326
+ $this->field_map[] = array(
327
+ 'from_tablename' => 'users',
328
+ 'from_fieldname' => 'ID',
329
+ 'to_type' => 'user',
330
+ 'to_fieldname' => '_bbp_user_id'
331
+ );
332
+
333
+ // Store old User password (Stored in usermeta)
334
+ $this->field_map[] = array(
335
+ 'from_tablename' => 'users',
336
+ 'from_fieldname' => 'user_pass',
337
+ 'to_type' => 'user',
338
+ 'to_fieldname' => '_bbp_password'
339
+ );
340
+
341
+ // User name.
342
+ $this->field_map[] = array(
343
+ 'from_tablename' => 'users',
344
+ 'from_fieldname' => 'user_login',
345
+ 'to_type' => 'user',
346
+ 'to_fieldname' => 'user_login'
347
+ );
348
+
349
+ // User nice name.
350
+ $this->field_map[] = array(
351
+ 'from_tablename' => 'users',
352
+ 'from_fieldname' => 'user_nicename',
353
+ 'to_type' => 'user',
354
+ 'to_fieldname' => 'user_nicename'
355
+ );
356
+
357
+ // User email.
358
+ $this->field_map[] = array(
359
+ 'from_tablename' => 'users',
360
+ 'from_fieldname' => 'user_email',
361
+ 'to_type' => 'user',
362
+ 'to_fieldname' => 'user_email'
363
+ );
364
+
365
+ // User homepage.
366
+ $this->field_map[] = array(
367
+ 'from_tablename' => 'users',
368
+ 'from_fieldname' => 'user_url',
369
+ 'to_type' => 'user',
370
+ 'to_fieldname' => 'user_url'
371
+ );
372
+
373
+ // User registered.
374
+ $this->field_map[] = array(
375
+ 'from_tablename' => 'users',
376
+ 'from_fieldname' => 'user_registered',
377
+ 'to_type' => 'user',
378
+ 'to_fieldname' => 'user_registered'
379
+ );
380
+
381
+ // User status.
382
+ $this->field_map[] = array(
383
+ 'from_tablename' => 'users',
384
+ 'from_fieldname' => 'user_status',
385
+ 'to_type' => 'user',
386
+ 'to_fieldname' => 'user_status'
387
+ );
388
+
389
+ // User display name.
390
+ $this->field_map[] = array(
391
+ 'from_tablename' => 'users',
392
+ 'from_fieldname' => 'display_name',
393
+ 'to_type' => 'user',
394
+ 'to_fieldname' => 'display_name'
395
+ );
396
+ }
397
+
398
+ /**
399
+ * This method allows us to indicates what is or is not converted for each
400
+ * converter.
401
+ */
402
+ public function info() {
403
+ return '';
404
+ }
405
+
406
+ /**
407
+ * This method is to save the salt and password together. That
408
+ * way when we authenticate it we can get it out of the database
409
+ * as one value. Array values are auto sanitized by wordpress.
410
+ */
411
+ public function callback_savepass( $field, $row ) {
412
+ return false;
413
+ }
414
+
415
+ /**
416
+ * This method is to take the pass out of the database and compare
417
+ * to a pass the user has typed in.
418
+ */
419
+ public function authenticate_pass( $password, $serialized_pass ) {
420
+ return false;
421
+ }
422
+
423
+ /**
424
+ * Translate the post status from Mingle numeric's to WordPress's strings.
425
+ *
426
+ * @param int $status Mingle v1.x numeric topic status
427
+ * @return string WordPress safe
428
+ */
429
+ public function callback_topic_status( $status = 0 ) {
430
+ switch ( $status ) {
431
+ case 1 :
432
+ $status = 'closed';
433
+ break;
434
+
435
+ case 0 :
436
+ default :
437
+ $status = 'publish';
438
+ break;
439
+ }
440
+ return $status;
441
+ }
442
+
443
+ /**
444
+ * This callback processes any custom BBCodes with parser.php
445
+ */
446
+ protected function callback_html( $field ) {
447
+ require_once( bbpress()->admin->admin_dir . 'parser.php' );
448
+ $bbcode = BBCode::getInstance();
449
+ $bbcode->enable_smileys = false;
450
+ $bbcode->smiley_regex = false;
451
+ return html_entity_decode( $bbcode->Parse( $field ) );
452
+ }
453
+
454
+ }
includes/admin/converters/SimplePress5.php ADDED
@@ -0,0 +1,537 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Implementation of SimplePress v5 converter.
5
+ *
6
+ * @since bbPress (r4638)
7
+ * @link Codex Docs http://codex.bbpress.org/import-forums/simplepress/
8
+ */
9
+ class SimplePress5 extends BBP_Converter_Base {
10
+
11
+ /**
12
+ * Main Constructor
13
+ *
14
+ * @uses SimplePress5::setup_globals()
15
+ */
16
+ function __construct() {
17
+ parent::__construct();
18
+ $this->setup_globals();
19
+ }
20
+
21
+ /**
22
+ * Sets up the field mappings
23
+ */
24
+ public function setup_globals() {
25
+
26
+ /** Forum Section ******************************************************/
27
+
28
+ // Forum id (Stored in postmeta)
29
+ $this->field_map[] = array(
30
+ 'from_tablename' => 'sfforums',
31
+ 'from_fieldname' => 'forum_id',
32
+ 'to_type' => 'forum',
33
+ 'to_fieldname' => '_bbp_forum_id'
34
+ );
35
+
36
+ // Forum parent id (If no parent, then 0, Stored in postmeta)
37
+ $this->field_map[] = array(
38
+ 'from_tablename' => 'sfforums',
39
+ 'from_fieldname' => 'parent',
40
+ 'to_type' => 'forum',
41
+ 'to_fieldname' => '_bbp_forum_parent_id'
42
+ );
43
+
44
+ // Forum topic count (Stored in postmeta)
45
+ $this->field_map[] = array(
46
+ 'from_tablename' => 'sfforums',
47
+ 'from_fieldname' => 'topic_count',
48
+ 'to_type' => 'forum',
49
+ 'to_fieldname' => '_bbp_topic_count'
50
+ );
51
+
52
+ // Forum reply count (Stored in postmeta)
53
+ $this->field_map[] = array(
54
+ 'from_tablename' => 'sfforums',
55
+ 'from_fieldname' => 'post_count',
56
+ 'to_type' => 'forum',
57
+ 'to_fieldname' => '_bbp_reply_count'
58
+ );
59
+
60
+ // Forum total topic count (Stored in postmeta)
61
+ $this->field_map[] = array(
62
+ 'from_tablename' => 'sfforums',
63
+ 'from_fieldname' => 'topic_count',
64
+ 'to_type' => 'forum',
65
+ 'to_fieldname' => '_bbp_total_topic_count'
66
+ );
67
+
68
+ // Forum total reply count (Stored in postmeta)
69
+ $this->field_map[] = array(
70
+ 'from_tablename' => 'sfforums',
71
+ 'from_fieldname' => 'post_count',
72
+ 'to_type' => 'forum',
73
+ 'to_fieldname' => '_bbp_total_reply_count'
74
+ );
75
+
76
+ // Forum title.
77
+ $this->field_map[] = array(
78
+ 'from_tablename' => 'sfforums',
79
+ 'from_fieldname' => 'forum_name',
80
+ 'to_type' => 'forum',
81
+ 'to_fieldname' => 'post_title'
82
+ );
83
+
84
+ // Forum slug (Clean name to avoid conflicts)
85
+ $this->field_map[] = array(
86
+ 'from_tablename' => 'sfforums',
87
+ 'from_fieldname' => 'forum_name',
88
+ 'to_type' => 'forum',
89
+ 'to_fieldname' => 'post_name',
90
+ 'callback_method' => 'callback_slug'
91
+ );
92
+
93
+ // Forum description.
94
+ $this->field_map[] = array(
95
+ 'from_tablename' => 'sfforums',
96
+ 'from_fieldname' => 'forum_desc',
97
+ 'to_type' => 'forum',
98
+ 'to_fieldname' => 'post_content',
99
+ 'callback_method' => 'callback_null'
100
+ );
101
+
102
+ // Forum display order (Starts from 1)
103
+ $this->field_map[] = array(
104
+ 'from_tablename' => 'sfforums',
105
+ 'from_fieldname' => 'forum_seq',
106
+ 'to_type' => 'forum',
107
+ 'to_fieldname' => 'menu_order'
108
+ );
109
+
110
+ // Forum dates.
111
+ $this->field_map[] = array(
112
+ 'to_type' => 'forums',
113
+ 'to_fieldname' => 'post_date',
114
+ 'default' => date('Y-m-d H:i:s')
115
+ );
116
+ $this->field_map[] = array(
117
+ 'to_type' => 'forums',
118
+ 'to_fieldname' => 'post_date_gmt',
119
+ 'default' => date('Y-m-d H:i:s')
120
+ );
121
+ $this->field_map[] = array(
122
+ 'to_type' => 'forums',
123
+ 'to_fieldname' => 'post_modified',
124
+ 'default' => date('Y-m-d H:i:s')
125
+ );
126
+ $this->field_map[] = array(
127
+ 'to_type' => 'forums',
128
+ 'to_fieldname' => 'post_modified_gmt',
129
+ 'default' => date('Y-m-d H:i:s')
130
+ );
131
+
132
+ /** Topic Section ******************************************************/
133
+
134
+ // Topic id (Stored in postmeta)
135
+ $this->field_map[] = array(
136
+ 'from_tablename' => 'sftopics',
137
+ 'from_fieldname' => 'topic_id',
138
+ 'to_type' => 'topic',
139
+ 'to_fieldname' => '_bbp_topic_id'
140
+ );
141
+
142
+ // Topic reply count (Stored in postmeta)
143
+ $this->field_map[] = array(
144
+ 'from_tablename' => 'sftopics',
145
+ 'from_fieldname' => 'post_count',
146
+ 'to_type' => 'topic',
147
+ 'to_fieldname' => '_bbp_reply_count',
148
+ 'callback_method' => 'callback_topic_reply_count'
149
+ );
150
+
151
+ // Topic parent forum id (If no parent, then 0. Stored in postmeta)
152
+ $this->field_map[] = array(
153
+ 'from_tablename' => 'sftopics',
154
+ 'from_fieldname' => 'forum_id',
155
+ 'to_type' => 'topic',
156
+ 'to_fieldname' => '_bbp_forum_id',
157
+ 'callback_method' => 'callback_forumid'
158
+ );
159
+
160
+ // Topic author.
161
+ $this->field_map[] = array(
162
+ 'from_tablename' => 'sftopics',
163
+ 'from_fieldname' => 'user_id',
164
+ 'to_type' => 'topic',
165
+ 'to_fieldname' => 'post_author',
166
+ 'callback_method' => 'callback_userid'
167
+ );
168
+
169
+ // Topic content.
170
+ // Note: We join the sfposts table because sftopics do not have content.
171
+ $this->field_map[] = array(
172
+ 'from_tablename' => 'sfposts',
173
+ 'from_fieldname' => 'post_content',
174
+ 'join_tablename' => 'sftopics',
175
+ 'join_type' => 'INNER',
176
+ 'join_expression' => 'USING (topic_id) WHERE sfposts.post_index = 1',
177
+ 'to_type' => 'topic',
178
+ 'to_fieldname' => 'post_content',
179
+ 'callback_method' => 'callback_html'
180
+ );
181
+
182
+ // Topic title.
183
+ $this->field_map[] = array(
184
+ 'from_tablename' => 'sftopics',
185
+ 'from_fieldname' => 'topic_name',
186
+ 'to_type' => 'topic',
187
+ 'to_fieldname' => 'post_title'
188
+ );
189
+
190
+ // Topic slug (Clean name to avoid conflicts)
191
+ $this->field_map[] = array(
192
+ 'from_tablename' => 'sftopics',
193
+ 'from_fieldname' => 'topic_name',
194
+ 'to_type' => 'topic',
195
+ 'to_fieldname' => 'post_name',
196
+ 'callback_method' => 'callback_slug'
197
+ );
198
+
199
+ // Topic parent forum id (If no parent, then 0)
200
+ $this->field_map[] = array(
201
+ 'from_tablename' => 'sftopics',
202
+ 'from_fieldname' => 'forum_id',
203
+ 'to_type' => 'topic',
204
+ 'to_fieldname' => 'post_parent',
205
+ 'callback_method' => 'callback_forumid'
206
+ );
207
+
208
+ // Topic dates.
209
+ $this->field_map[] = array(
210
+ 'from_tablename' => 'sftopics',
211
+ 'from_fieldname' => 'topic_date',
212
+ 'to_type' => 'topic',
213
+ 'to_fieldname' => 'post_date'
214
+ );
215
+ $this->field_map[] = array(
216
+ 'from_tablename' => 'sftopics',
217
+ 'from_fieldname' => 'topic_date',
218
+ 'to_type' => 'topic',
219
+ 'to_fieldname' => 'post_date_gmt'
220
+ );
221
+ $this->field_map[] = array(
222
+ 'from_tablename' => 'sftopics',
223
+ 'from_fieldname' => 'topic_date',
224
+ 'to_type' => 'topic',
225
+ 'to_fieldname' => 'post_modified'
226
+ );
227
+ $this->field_map[] = array(
228
+ 'from_tablename' => 'sftopics',
229
+ 'from_fieldname' => 'topic_date',
230
+ 'to_type' => 'topic',
231
+ 'to_fieldname' => 'post_modified_gmt'
232
+ );
233
+ $this->field_map[] = array(
234
+ 'from_tablename' => 'sftopics',
235
+ 'from_fieldname' => 'topic_date',
236
+ 'to_type' => 'topic',
237
+ 'to_fieldname' => '_bbp_last_active_time'
238
+ );
239
+
240
+ // Topic status (Open or Closed)
241
+ $this->field_map[] = array(
242
+ 'from_tablename' => 'sftopics',
243
+ 'from_fieldname' => 'topic_status',
244
+ 'to_type' => 'topic',
245
+ 'to_fieldname' => 'post_status',
246
+ 'callback_method' => 'callback_status'
247
+ );
248
+
249
+ /** Tags Section ******************************************************/
250
+
251
+ /**
252
+ * SimplePress Forums do not support topic tags without paid extensions
253
+ */
254
+
255
+ /** Reply Section *****************************************************/
256
+
257
+ // Reply id (Stored in postmeta)
258
+ $this->field_map[] = array(
259
+ 'from_tablename' => 'sfposts',
260
+ 'from_fieldname' => 'post_id',
261
+ 'to_type' => 'reply',
262
+ 'to_fieldname' => '_bbp_post_id'
263
+ );
264
+
265
+ // Reply parent forum id (If no parent, then 0. Stored in postmeta)
266
+ $this->field_map[] = array(
267
+ 'from_tablename' => 'sfposts',
268
+ 'from_fieldname' => 'forum_id',
269
+ 'to_type' => 'reply',
270
+ 'to_fieldname' => '_bbp_forum_id',
271
+ 'callback_method' => 'callback_topicid_to_forumid'
272
+ );
273
+
274
+ // Reply parent topic id (If no parent, then 0. Stored in postmeta)
275
+ $this->field_map[] = array(
276
+ 'from_tablename' => 'sfposts',
277
+ 'from_fieldname' => 'topic_id',
278
+ 'to_type' => 'reply',
279
+ 'to_fieldname' => '_bbp_topic_id',
280
+ 'callback_method' => 'callback_topicid'
281
+ );
282
+
283
+ // Reply author ip (Stored in postmeta)
284
+ $this->field_map[] = array(
285
+ 'from_tablename' => 'sfposts',
286
+ 'from_fieldname' => 'poster_ip',
287
+ 'to_type' => 'reply',
288
+ 'to_fieldname' => '_bbp_author_ip'
289
+ );
290
+
291
+ // Reply author.
292
+ $this->field_map[] = array(
293
+ 'from_tablename' => 'sfposts',
294
+ 'from_fieldname' => 'user_id',
295
+ 'to_type' => 'reply',
296
+ 'to_fieldname' => 'post_author',
297
+ 'callback_method' => 'callback_userid'
298
+ );
299
+
300
+ // Reply title.
301
+ // Note: We join the sftopics table because sfposts table does not include topic title.
302
+ $this->field_map[] = array(
303
+ 'from_tablename' => 'sftopics',
304
+ 'from_fieldname' => 'topic_name',
305
+ 'join_tablename' => 'sfposts',
306
+ 'join_type' => 'LEFT',
307
+ 'join_expression' => 'USING (topic_id) WHERE sfposts.post_index != 1',
308
+ 'to_type' => 'reply',
309
+ 'to_fieldname' => 'post_title',
310
+ 'callback_method' => 'callback_reply_title'
311
+ );
312
+
313
+ // Reply content.
314
+ $this->field_map[] = array(
315
+ 'from_tablename' => 'sfposts',
316
+ 'from_fieldname' => 'post_content',
317
+ 'to_type' => 'reply',
318
+ 'to_fieldname' => 'post_content',
319
+ 'callback_method' => 'callback_html'
320
+ );
321
+
322
+ // Reply parent topic id (If no parent, then 0)
323
+ $this->field_map[] = array(
324
+ 'from_tablename' => 'sfposts',
325
+ 'from_fieldname' => 'topic_id',
326
+ 'to_type' => 'reply',
327
+ 'to_fieldname' => 'post_parent',
328
+ 'callback_method' => 'callback_topicid'
329
+ );
330
+
331
+ // Reply dates.
332
+ $this->field_map[] = array(
333
+ 'from_tablename' => 'sfposts',
334
+ 'from_fieldname' => 'post_date',
335
+ 'to_type' => 'reply',
336
+ 'to_fieldname' => 'post_date'
337
+ );
338
+ $this->field_map[] = array(
339
+ 'from_tablename' => 'sfposts',
340
+ 'from_fieldname' => 'post_date',
341
+ 'to_type' => 'reply',
342
+ 'to_fieldname' => 'post_date_gmt'
343
+ );
344
+ $this->field_map[] = array(
345
+ 'from_tablename' => 'sfposts',
346
+ 'from_fieldname' => 'post_date',
347
+ 'to_type' => 'reply',
348
+ 'to_fieldname' => 'post_modified'
349
+ );
350
+ $this->field_map[] = array(
351
+ 'from_tablename' => 'sfposts',
352
+ 'from_fieldname' => 'post_date',
353
+ 'to_type' => 'reply',
354
+ 'to_fieldname' => 'post_modified_gmt'
355
+ );
356
+
357
+ /** User Section ******************************************************/
358
+
359
+ // Store old User id (Stored in usermeta)
360
+ $this->field_map[] = array(
361
+ 'from_tablename' => 'users',
362
+ 'from_fieldname' => 'ID',
363
+ 'to_type' => 'user',
364
+ 'to_fieldname' => '_bbp_user_id'
365
+ );
366
+
367
+ // Store old User password (Stored in usermeta)
368
+ $this->field_map[] = array(
369
+ 'from_tablename' => 'users',
370
+ 'from_fieldname' => 'user_pass',
371
+ 'to_type' => 'user',
372
+ 'to_fieldname' => '_bbp_password'
373
+ );
374
+
375
+ // User name.
376
+ $this->field_map[] = array(
377
+ 'from_tablename' => 'users',
378
+ 'from_fieldname' => 'user_login',
379
+ 'to_type' => 'user',
380
+ 'to_fieldname' => 'user_login'
381
+ );
382
+
383
+ // User nice name.
384
+ $this->field_map[] = array(
385
+ 'from_tablename' => 'users',
386
+ 'from_fieldname' => 'user_nicename',
387
+ 'to_type' => 'user',
388
+ 'to_fieldname' => 'user_nicename'
389
+ );
390
+
391
+ // User email.
392
+ $this->field_map[] = array(
393
+ 'from_tablename' => 'users',
394
+ 'from_fieldname' => 'user_email',
395
+ 'to_type' => 'user',
396
+ 'to_fieldname' => 'user_email'
397
+ );
398
+
399
+ // User homepage.
400
+ $this->field_map[] = array(
401
+ 'from_tablename' => 'users',
402
+ 'from_fieldname' => 'user_url',
403
+ 'to_type' => 'user',
404
+ 'to_fieldname' => 'user_url'
405
+ );
406
+
407
+ // User registered.
408
+ $this->field_map[] = array(
409
+ 'from_tablename' => 'users',
410
+ 'from_fieldname' => 'user_registered',
411
+ 'to_type' => 'user',
412
+ 'to_fieldname' => 'user_registered'
413
+ );
414
+
415
+ // User status.
416
+ $this->field_map[] = array(
417
+ 'from_tablename' => 'users',
418
+ 'from_fieldname' => 'user_status',
419
+ 'to_type' => 'user',
420
+ 'to_fieldname' => 'user_status'
421
+ );
422
+
423
+ // User display name.
424
+ $this->field_map[] = array(
425
+ 'from_tablename' => 'users',
426
+ 'from_fieldname' => 'display_name',
427
+ 'to_type' => 'user',
428
+ 'to_fieldname' => 'display_name'
429
+ );
430
+ }
431
+
432
+ /**
433
+ * This method allows us to indicates what is or is not converted for each
434
+ * converter.
435
+ */
436
+ public function info() {
437
+ return '';
438
+ }
439
+
440
+ /**
441
+ * This method is to save the salt and password together. That
442
+ * way when we authenticate it we can get it out of the database
443
+ * as one value. Array values are auto sanitized by wordpress.
444
+ */
445
+ public function callback_savepass( $field, $row ) {
446
+ return false;
447
+ }
448
+
449
+ /**
450
+ * This method is to take the pass out of the database and compare
451
+ * to a pass the user has typed in.
452
+ */
453
+ public function authenticate_pass( $password, $serialized_pass ) {
454
+ return false;
455
+ }
456
+
457
+ /**
458
+ * Translate the post status from Simple:Press v5.x numeric's to WordPress's strings.
459
+ *
460
+ * @param int $status Simple:Press numeric status
461
+ * @return string WordPress safe
462
+ */
463
+ public function callback_status( $status = 0 ) {
464
+ switch ( $status ) {
465
+ case 1 :
466
+ $status = 'closed';
467
+ break;
468
+
469
+ case 0 :
470
+ default :
471
+ $status = 'publish';
472
+ break;
473
+ }
474
+ return $status;
475
+ }
476
+
477
+ /**
478
+ * Verify the topic reply count.
479
+ *
480
+ * @param int $count Simple:Press v5.x reply count
481
+ * @return string WordPress safe
482
+ */
483
+ public function callback_topic_reply_count( $count = 1 ) {
484
+ $count = absint( (int) $count - 1 );
485
+ return $count;
486
+ }
487
+
488
+ /**
489
+ * Set the reply title
490
+ *
491
+ * @param string $title Simple:Press v5.x topic title of this reply
492
+ * @return string Prefixed topic title, or empty string
493
+ */
494
+ public function callback_reply_title( $title = '' ) {
495
+ $title = !empty( $title ) ? __( 'Re: ', 'bbpress' ) . html_entity_decode( $title ) : '';
496
+ return $title;
497
+ }
498
+
499
+ /**
500
+ * This callback processes any custom parser.php attributes and custom HTML code with preg_replace
501
+ */
502
+ protected function callback_html( $field ) {
503
+
504
+ // Strip any custom HTML not supported by parser.php first from $field before parsing $field to parser.php
505
+ $simplepress_markup = $field;
506
+ $simplepress_markup = html_entity_decode( $simplepress_markup );
507
+
508
+ // Replace any SimplePress smilies from path '/sp-resources/forum-smileys/sf-smily.gif' with the equivelant WordPress Smilie
509
+ $simplepress_markup = preg_replace( '/\<img src=(.*?)\/sp-resources\/forum-smileys\/sf-confused\.gif(.*?)\" \/>/', ':?' , $simplepress_markup );
510
+ $simplepress_markup = preg_replace( '/\<img src=(.*?)\/sp-resources\/forum-smileys\/sf-cool\.gif(.*?)\" \/>/', ':cool:', $simplepress_markup );
511
+ $simplepress_markup = preg_replace( '/\<img src=(.*?)\/sp-resources\/forum-smileys\/sf-cry\.gif(.*?)\" \/>/', ':cry:', $simplepress_markup );
512
+ $simplepress_markup = preg_replace( '/\<img src=(.*?)\/sp-resources\/forum-smileys\/sf-embarassed\.gif(.*?)\" \/>/' , ':oops:', $simplepress_markup );
513
+ $simplepress_markup = preg_replace( '/\<img src=(.*?)\/sp-resources\/forum-smileys\/sf-frown\.gif(.*?)\" \/>/', ':(', $simplepress_markup );
514
+ $simplepress_markup = preg_replace( '/\<img src=(.*?)\/sp-resources\/forum-smileys\/sf-kiss\.gif(.*?)\" \/>/', ':P', $simplepress_markup );
515
+ $simplepress_markup = preg_replace( '/\<img src=(.*?)\/sp-resources\/forum-smileys\/sf-laugh\.gif(.*?)\" \/>/', ':D', $simplepress_markup );
516
+ $simplepress_markup = preg_replace( '/\<img src=(.*?)\/sp-resources\/forum-smileys\/sf-smile\.gif(.*?)\" \/>/', ':smile:', $simplepress_markup );
517
+ $simplepress_markup = preg_replace( '/\<img src=(.*?)\/sp-resources\/forum-smileys\/sf-surprised\.gif(.*?)\" \/>/', ':o', $simplepress_markup );
518
+ $simplepress_markup = preg_replace( '/\<img src=(.*?)\/sp-resources\/forum-smileys\/sf-wink\.gif(.*?)\" \/>/', ':wink:', $simplepress_markup );
519
+ $simplepress_markup = preg_replace( '/\<img src=(.*?)\/sp-resources\/forum-smileys\/sf-yell\.gif(.*?)\" \/>/', ':x', $simplepress_markup );
520
+
521
+ // Replace '<div class="sfcode">example code</div>' with '<code>*</code>'
522
+ $simplepress_markup = preg_replace( '/\<div class\=\"sfcode\"\>(.*?)\<\/div\>/' , '<code>$1</code>' , $simplepress_markup );
523
+
524
+ // Replace '<strong>username said </strong>' with '@username said:'
525
+ $simplepress_markup = preg_replace ( '/\<strong\>(.*?)\ said\ \<\/strong\>/', '@$1 said:', $simplepress_markup );
526
+
527
+ // Now that SimplePress' custom HTML codes have been stripped put the cleaned HTML back in $field
528
+ $field = $simplepress_markup;
529
+
530
+ // Parse out any bbCodes with the BBCode 'parser.php'
531
+ require_once( bbpress()->admin->admin_dir . 'parser.php' );
532
+ $bbcode = BBCode::getInstance();
533
+ $bbcode->enable_smileys = false;
534
+ $bbcode->smiley_regex = false;
535
+ return html_entity_decode( $bbcode->Parse( $field ) );
536
+ }
537
+ }
includes/admin/converters/Vanilla.php ADDED
@@ -0,0 +1,545 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Implementation of Vanilla 2.0.18.1 Converter
5
+ *
6
+ * @since bbPress (r4717)
7
+ * @link Codex Docs http://codex.bbpress.org/import-forums/vanilla
8
+ */
9
+ class Vanilla extends BBP_Converter_Base {
10
+
11
+ /**
12
+ * Main Constructor
13
+ *
14
+ * @uses Vanilla::setup_globals()
15
+ */
16
+ function __construct() {
17
+ parent::__construct();
18
+ $this->setup_globals();
19
+ }
20
+
21
+ /**
22
+ * Sets up the field mappings
23
+ */
24
+
25
+ public function setup_globals() {
26
+
27
+ /** Forum Section *****************************************************/
28
+
29
+ // Forum id (Stored in postmeta)
30
+ $this->field_map[] = array(
31
+ 'from_tablename' => 'Category',
32
+ 'from_fieldname' => 'CategoryID',
33
+ 'from_expression' => 'WHERE Category.CategoryID > 0',
34
+ 'to_type' => 'forum',
35
+ 'to_fieldname' => '_bbp_forum_id'
36
+ );
37
+
38
+ // Forum parent id (If no parent, then 0. Stored in postmeta)
39
+ $this->field_map[] = array(
40
+ 'from_tablename' => 'Category',
41
+ 'from_fieldname' => 'ParentCategoryID',
42
+ 'to_type' => 'forum',
43
+ 'to_fieldname' => '_bbp_forum_parent_id',
44
+ 'callback_method' => 'callback_forum_parent'
45
+ );
46
+
47
+ // Forum topic count (Stored in postmeta)
48
+ $this->field_map[] = array(
49
+ 'from_tablename' => 'Category',
50
+ 'from_fieldname' => 'CountDiscussions',
51
+ 'to_type' => 'forum',
52
+ 'to_fieldname' => '_bbp_topic_count'
53
+ );
54
+
55
+ // Forum reply count (Stored in postmeta)
56
+ $this->field_map[] = array(
57
+ 'from_tablename' => 'Category',
58
+ 'from_fieldname' => 'CountComments',
59
+ 'to_type' => 'forum',
60
+ 'to_fieldname' => '_bbp_reply_count'
61
+ );
62
+
63
+ // Forum total topic count (Stored in postmeta)
64
+ $this->field_map[] = array(
65
+ 'from_tablename' => 'Category',
66
+ 'from_fieldname' => 'CountDiscussions',
67
+ 'to_type' => 'forum',
68
+ 'to_fieldname' => '_bbp_total_topic_count'
69
+ );
70
+
71
+ // Forum total reply count (Stored in postmeta)
72
+ $this->field_map[] = array(
73
+ 'from_tablename' => 'Category',
74
+ 'from_fieldname' => 'CountComments',
75
+ 'to_type' => 'forum',
76
+ 'to_fieldname' => '_bbp_total_reply_count'
77
+ );
78
+
79
+ // Forum title.
80
+ $this->field_map[] = array(
81
+ 'from_tablename' => 'Category',
82
+ 'from_fieldname' => 'Name',
83
+ 'to_type' => 'forum',
84
+ 'to_fieldname' => 'post_title'
85
+ );
86
+
87
+ // Forum slug (Clean name to avoid confilcts)
88
+ $this->field_map[] = array(
89
+ 'from_tablename' => 'Category',
90
+ 'from_fieldname' => 'Name',
91
+ 'to_type' => 'forum',
92
+ 'to_fieldname' => 'post_name',
93
+ 'callback_method' => 'callback_slug'
94
+ );
95
+
96
+ // Forum description.
97
+ $this->field_map[] = array(
98
+ 'from_tablename' => 'Category',
99
+ 'from_fieldname' => 'Description',
100
+ 'to_type' => 'forum',
101
+ 'to_fieldname' => 'post_content',
102
+ 'callback_method' => 'callback_null'
103
+ );
104
+
105
+ // Forum display order (Starts from 1)
106
+ $this->field_map[] = array(
107
+ 'from_tablename' => 'Category',
108
+ 'from_fieldname' => 'Sort',
109
+ 'to_type' => 'forum',
110
+ 'to_fieldname' => 'menu_order'
111
+ );
112
+
113
+ // Forum dates.
114
+ $this->field_map[] = array(
115
+ 'from_tablename' => 'Category',
116
+ 'from_fieldname' => 'DateInserted',
117
+ 'to_type' => 'forum',
118
+ 'to_fieldname' => 'post_date',
119
+ );
120
+ $this->field_map[] = array(
121
+ 'from_tablename' => 'Category',
122
+ 'from_fieldname' => 'DateInserted',
123
+ 'to_type' => 'forum',
124
+ 'to_fieldname' => 'post_date_gmt',
125
+ );
126
+ $this->field_map[] = array(
127
+ 'from_tablename' => 'Category',
128
+ 'from_fieldname' => 'DateUpdated',
129
+ 'to_type' => 'forum',
130
+ 'to_fieldname' => 'post_modified',
131
+ );
132
+ $this->field_map[] = array(
133
+ 'from_tablename' => 'Category',
134
+ 'from_fieldname' => 'DateUpdated',
135
+ 'to_type' => 'forum',
136
+ 'to_fieldname' => 'post_modified_gmt',
137
+ );
138
+
139
+ /** Topic Section *****************************************************/
140
+
141
+ // Topic id (Stored in postmeta)
142
+ $this->field_map[] = array(
143
+ 'from_tablename' => 'Discussion',
144
+ 'from_fieldname' => 'DiscussionID',
145
+ 'to_type' => 'topic',
146
+ 'to_fieldname' => '_bbp_topic_id'
147
+ );
148
+
149
+ // Topic reply count (Stored in postmeta)
150
+ $this->field_map[] = array(
151
+ 'from_tablename' => 'Discussion',
152
+ 'from_fieldname' => 'CountComments',
153
+ 'to_type' => 'topic',
154
+ 'to_fieldname' => '_bbp_reply_count',
155
+ 'callback_method' => 'callback_topic_reply_count'
156
+ );
157
+
158
+ // Topic parent forum id (If no parent, then 0. Stored in postmeta)
159
+ $this->field_map[] = array(
160
+ 'from_tablename' => 'Discussion',
161
+ 'from_fieldname' => 'CategoryID',
162
+ 'to_type' => 'topic',
163
+ 'to_fieldname' => '_bbp_forum_id',
164
+ 'callback_method' => 'callback_forumid'
165
+ );
166
+
167
+ // Topic author.
168
+ $this->field_map[] = array(
169
+ 'from_tablename' => 'Discussion',
170
+ 'from_fieldname' => 'InsertUserID',
171
+ 'to_type' => 'topic',
172
+ 'to_fieldname' => 'post_author',
173
+ 'callback_method' => 'callback_userid'
174
+ );
175
+
176
+ // Topic title.
177
+ $this->field_map[] = array(
178
+ 'from_tablename' => 'Discussion',
179
+ 'from_fieldname' => 'Name',
180
+ 'to_type' => 'topic',
181
+ 'to_fieldname' => 'post_title'
182
+ );
183
+
184
+ // Topic slug (Clean name to avoid conflicts)
185
+ $this->field_map[] = array(
186
+ 'from_tablename' => 'Discussion',
187
+ 'from_fieldname' => 'Name',
188
+ 'to_type' => 'topic',
189
+ 'to_fieldname' => 'post_name',
190
+ 'callback_method' => 'callback_slug'
191
+ );
192
+
193
+ // Topic content.
194
+ $this->field_map[] = array(
195
+ 'from_tablename' => 'Discussion',
196
+ 'from_fieldname' => 'Body',
197
+ 'to_type' => 'topic',
198
+ 'to_fieldname' => 'post_content',
199
+ 'callback_method' => 'callback_html'
200
+ );
201
+
202
+ // Topic status (Open or Closed)
203
+ $this->field_map[] = array(
204
+ 'from_tablename' => 'Discussion',
205
+ 'from_fieldname' => 'closed',
206
+ 'to_type' => 'topic',
207
+ 'to_fieldname' => 'post_status',
208
+ 'callback_method' => 'callback_topic_status'
209
+ );
210
+
211
+ // Topic author ip (Stored in postmeta)
212
+ $this->field_map[] = array(
213
+ 'from_tablename' => 'Discussion',
214
+ 'from_fieldname' => 'InsertIPAddress',
215
+ 'to_type' => 'topic',
216
+ 'to_fieldname' => '_bbp_author_ip'
217
+ );
218
+
219
+ // Topic parent forum id (If no parent, then 0)
220
+ $this->field_map[] = array(
221
+ 'from_tablename' => 'Discussion',
222
+ 'from_fieldname' => 'CategoryID',
223
+ 'to_type' => 'topic',
224
+ 'to_fieldname' => 'post_parent',
225
+ 'callback_method' => 'callback_forumid'
226
+ );
227
+
228
+ // Topic dates.
229
+ $this->field_map[] = array(
230
+ 'from_tablename' => 'Discussion',
231
+ 'from_fieldname' => 'DateInserted',
232
+ 'to_type' => 'topic',
233
+ 'to_fieldname' => 'post_date'
234
+ );
235
+ $this->field_map[] = array(
236
+ 'from_tablename' => 'Discussion',
237
+ 'from_fieldname' => 'DateInserted',
238
+ 'to_type' => 'topic',
239
+ 'to_fieldname' => 'post_date_gmt'
240
+ );
241
+ $this->field_map[] = array(
242
+ 'from_tablename' => 'Discussion',
243
+ 'from_fieldname' => 'DateUpdated',
244
+ 'to_type' => 'topic',
245
+ 'to_fieldname' => 'post_modified'
246
+ );
247
+ $this->field_map[] = array(
248
+ 'from_tablename' => 'Discussion',
249
+ 'from_fieldname' => 'DateUpdated',
250
+ 'to_type' => 'topic',
251
+ 'to_fieldname' => 'post_modified_gmt'
252
+ );
253
+ $this->field_map[] = array(
254
+ 'from_tablename' => 'Discussion',
255
+ 'from_fieldname' => 'DateLastComment',
256
+ 'to_type' => 'topic',
257
+ 'to_fieldname' => '_bbp_last_active_time'
258
+ );
259
+
260
+ /** Tags Section ******************************************************/
261
+
262
+ // Topic id.
263
+ $this->field_map[] = array(
264
+ 'from_tablename' => 'TagDiscussion',
265
+ 'from_fieldname' => 'DiscussionID',
266
+ 'to_type' => 'tags',
267
+ 'to_fieldname' => 'objectid',
268
+ 'callback_method' => 'callback_topicid'
269
+ );
270
+
271
+ // Taxonomy ID.
272
+ $this->field_map[] = array(
273
+ 'from_tablename' => 'TagDiscussion',
274
+ 'from_fieldname' => 'TagID',
275
+ 'to_type' => 'tags',
276
+ 'to_fieldname' => 'taxonomy'
277
+ );
278
+
279
+ // Term text.
280
+ $this->field_map[] = array(
281
+ 'from_tablename' => 'Tag',
282
+ 'from_fieldname' => 'Name',
283
+ 'join_tablename' => 'TagDiscussion',
284
+ 'join_type' => 'INNER',
285
+ 'join_expression' => 'USING (tagid)',
286
+ 'to_type' => 'tags',
287
+ 'to_fieldname' => 'name'
288
+ );
289
+
290
+ /** Reply Section *****************************************************/
291
+
292
+ // Reply id (Stored in postmeta)
293
+ $this->field_map[] = array(
294
+ 'from_tablename' => 'Comment',
295
+ 'from_fieldname' => 'CommentID',
296
+ 'to_type' => 'reply',
297
+ 'to_fieldname' => '_bbp_post_id'
298
+ );
299
+
300
+ // Reply parent topic id (If no parent, then 0. Stored in postmeta)
301
+ $this->field_map[] = array(
302
+ 'from_tablename' => 'Comment',
303
+ 'from_fieldname' => 'DiscussionID',
304
+ 'to_type' => 'reply',
305
+ 'to_fieldname' => '_bbp_topic_id',
306
+ 'callback_method' => 'callback_topicid'
307
+ );
308
+
309
+ // Reply parent forum id (If no parent, then 0. Stored in postmeta)
310
+ $this->field_map[] = array(
311
+ 'from_tablename' => 'Discussion',
312
+ 'from_fieldname' => 'CategoryID',
313
+ 'join_tablename' => 'Comment',
314
+ 'join_type' => 'INNER',
315
+ 'join_expression' => 'USING (DiscussionID)',
316
+ 'to_type' => 'reply',
317
+ 'to_fieldname' => '_bbp_forum_id',
318
+ 'callback_method' => 'callback_topicid_to_forumid'
319
+ );
320
+
321
+ // Reply title.
322
+ // Note: We join the Discussion table because Comment table does not include topic title.
323
+ $this->field_map[] = array(
324
+ 'from_tablename' => 'Discussion',
325
+ 'from_fieldname' => 'Name',
326
+ 'join_tablename' => 'Comment',
327
+ 'join_type' => 'INNER',
328
+ 'join_expression' => 'USING (DiscussionID)',
329
+ 'to_type' => 'reply',
330
+ 'to_fieldname' => 'post_title',
331
+ 'callback_method' => 'callback_reply_title'
332
+ );
333
+
334
+ // Reply author ip (Stored in postmeta)
335
+ $this->field_map[] = array(
336
+ 'from_tablename' => 'Comment',
337
+ 'from_fieldname' => 'InsertIPAddress',
338
+ 'to_type' => 'reply',
339
+ 'to_fieldname' => '_bbp_author_ip'
340
+ );
341
+
342
+ // Reply author.
343
+ $this->field_map[] = array(
344
+ 'from_tablename' => 'Comment',
345
+ 'from_fieldname' => 'InsertUserID',
346
+ 'to_type' => 'reply',
347
+ 'to_fieldname' => 'post_author',
348
+ 'callback_method' => 'callback_userid'
349
+ );
350
+
351
+ // Reply content.
352
+ $this->field_map[] = array(
353
+ 'from_tablename' => 'Comment',
354
+ 'from_fieldname' => 'Body',
355
+ 'to_type' => 'reply',
356
+ 'to_fieldname' => 'post_content',
357
+ 'callback_method' => 'callback_html'
358
+ );
359
+
360
+ // Reply parent topic id (If no parent, then 0)
361
+ $this->field_map[] = array(
362
+ 'from_tablename' => 'Comment',
363
+ 'from_fieldname' => 'DiscussionID',
364
+ 'to_type' => 'reply',
365
+ 'to_fieldname' => 'post_parent',
366
+ 'callback_method' => 'callback_topicid'
367
+ );
368
+
369
+ // Reply dates.
370
+ $this->field_map[] = array(
371
+ 'from_tablename' => 'Comment',
372
+ 'from_fieldname' => 'DateInserted',
373
+ 'to_type' => 'reply',
374
+ 'to_fieldname' => 'post_date'
375
+ );
376
+ $this->field_map[] = array(
377
+ 'from_tablename' => 'Comment',
378
+ 'from_fieldname' => 'DateInserted',
379
+ 'to_type' => 'reply',
380
+ 'to_fieldname' => 'post_date_gmt'
381
+ );
382
+ $this->field_map[] = array(
383
+ 'from_tablename' => 'Comment',
384
+ 'from_fieldname' => 'DateUpdated',
385
+ 'to_type' => 'reply',
386
+ 'to_fieldname' => 'post_modified'
387
+ );
388
+ $this->field_map[] = array(
389
+ 'from_tablename' => 'Comment',
390
+ 'from_fieldname' => 'DateUpdated',
391
+ 'to_type' => 'reply',
392
+ 'to_fieldname' => 'post_modified_gmt'
393
+ );
394
+
395
+ /** User Section ******************************************************/
396
+
397
+ // Store old User id (Stored in usermeta)
398
+ $this->field_map[] = array(
399
+ 'from_tablename' => 'User',
400
+ 'from_fieldname' => 'UserID',
401
+ 'to_type' => 'user',
402
+ 'to_fieldname' => '_bbp_user_id'
403
+ );
404
+
405
+ // Store old User password (Stored in usermeta)
406
+ $this->field_map[] = array(
407
+ 'from_tablename' => 'User',
408
+ 'from_fieldname' => 'Password',
409
+ 'to_type' => 'user',
410
+ 'to_fieldname' => '_bbp_password'
411
+ );
412
+
413
+ // User name.
414
+ $this->field_map[] = array(
415
+ 'from_tablename' => 'User',
416
+ 'from_fieldname' => 'Name',
417
+ 'to_type' => 'user',
418
+ 'to_fieldname' => 'user_login'
419
+ );
420
+
421
+ // User nice name.
422
+ $this->field_map[] = array(
423
+ 'from_tablename' => 'User',
424
+ 'from_fieldname' => 'Name',
425
+ 'to_type' => 'user',
426
+ 'to_fieldname' => 'user_nicename'
427
+ );
428
+
429
+ // User email.
430
+ $this->field_map[] = array(
431
+ 'from_tablename' => 'User',
432
+ 'from_fieldname' => 'Email',
433
+ 'to_type' => 'user',
434
+ 'to_fieldname' => 'user_email'
435
+ );
436
+
437
+ // User registered.
438
+ $this->field_map[] = array(
439
+ 'from_tablename' => 'User',
440
+ 'from_fieldname' => 'DateInserted',
441
+ 'to_type' => 'user',
442
+ 'to_fieldname' => 'user_registered'
443
+ );
444
+
445
+ // Display Name
446
+ $this->field_map[] = array(
447
+ 'from_tablename' => 'User',
448
+ 'from_fieldname' => 'Name',
449
+ 'to_type' => 'user',
450
+ 'to_fieldname' => 'display_name'
451
+ );
452
+ }
453
+
454
+ /**
455
+ * This method allows us to indicates what is or is not converted for each
456
+ * converter.
457
+ */
458
+ public function info() {
459
+ return '';
460
+ }
461
+
462
+ /**
463
+ * Translate the topic status from Vanilla v2.x numeric's to WordPress's strings.
464
+ *
465
+ * @param int $status Vanilla v2.x numeric topic status
466
+ * @return string WordPress safe
467
+ */
468
+ public function callback_topic_status( $status = 0 ) {
469
+ switch ( $status ) {
470
+ case 1 :
471
+ $status = 'closed';
472
+ break;
473
+
474
+ case 0 :
475
+ default :
476
+ $status = 'publish';
477
+ break;
478
+ }
479
+ return $status;
480
+ }
481
+
482
+ /**
483
+ * Clean Root Parent ID -1 to 0
484
+ *
485
+ * @param int $parent Vanilla v2.x Parent ID
486
+ * @return int
487
+ */
488
+ public function callback_forum_parent( $parent = 0 ) {
489
+ if ( $parent == -1 ) {
490
+ return 0;
491
+ } else {
492
+ return $parent;
493
+ }
494
+ }
495
+
496
+ /**
497
+ * Verify the topic reply count.
498
+ *
499
+ * @param int $count Vanilla v2.x reply count
500
+ * @return string WordPress safe
501
+ */
502
+ public function callback_topic_reply_count( $count = 1 ) {
503
+ $count = absint( (int) $count - 1 );
504
+ return $count;
505
+ }
506
+
507
+ /**
508
+ * Set the reply title
509
+ *
510
+ * @param string $title Vanilla v2.x topic title of this reply
511
+ * @return string Prefixed topic title, or empty string
512
+ */
513
+ public function callback_reply_title( $title = '' ) {
514
+ $title = !empty( $title ) ? __( 'Re: ', 'bbpress' ) . html_entity_decode( $title ) : '';
515
+ return $title;
516
+ }
517
+
518
+ /**
519
+ * This method is to save the salt and password together. That
520
+ * way when we authenticate it we can get it out of the database
521
+ * as one value. Array values are auto sanitized by wordpress.
522
+ */
523
+ public function callback_savepass( $field, $row ) {
524
+ return false;
525
+ }
526
+
527
+ /**
528
+ * This method is to take the pass out of the database and compare
529
+ * to a pass the user has typed in.
530
+ */
531
+ public function authenticate_pass( $password, $serialized_pass ) {
532
+ return false;
533
+ }
534
+
535
+ /**
536
+ * This callback processes any custom BBCodes with parser.php
537
+ */
538
+ protected function callback_html( $field ) {
539
+ require_once( bbpress()->admin->admin_dir . 'parser.php' );
540
+ $bbcode = BBCode::getInstance();
541
+ $bbcode->enable_smileys = false;
542
+ $bbcode->smiley_regex = false;
543
+ return html_entity_decode( $bbcode->Parse( $field ) );
544
+ }
545
+ }
includes/admin/converters/bbPress1.php CHANGED
@@ -195,8 +195,7 @@ class bbPress1 extends BBP_Converter_Base {
195
  'callback_method' => 'callback_html'
196
  );
197
 
198
- // Topic status.
199
- // Note: post_status is more accurate than topic_status
200
  $this->field_map[] = array(
201
  'from_tablename' => 'posts',
202
  'from_fieldname' => 'post_status',
@@ -477,7 +476,7 @@ class bbPress1 extends BBP_Converter_Base {
477
  'to_fieldname' => 'user_status'
478
  );
479
 
480
- // User status.
481
  $this->field_map[] = array(
482
  'from_tablename' => 'users',
483
  'from_fieldname' => 'display_name',
@@ -557,4 +556,19 @@ class bbPress1 extends BBP_Converter_Base {
557
  public function authenticate_pass( $password, $serialized_pass ) {
558
  return false;
559
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
560
  }
195
  'callback_method' => 'callback_html'
196
  );
197
 
198
+ // Post status (Spam, Trash or Publish)
 
199
  $this->field_map[] = array(
200
  'from_tablename' => 'posts',
201
  'from_fieldname' => 'post_status',
476
  'to_fieldname' => 'user_status'
477
  );
478
 
479
+ // User display name.
480
  $this->field_map[] = array(
481
  'from_tablename' => 'users',
482
  'from_fieldname' => 'display_name',
556
  public function authenticate_pass( $password, $serialized_pass ) {
557
  return false;
558
  }
559
+
560
+ /**
561
+ * This callback:
562
+ *
563
+ * - turns off smiley parsing
564
+ * - processes any custom parser.php attributes
565
+ * - decodes necessary HTML entities
566
+ */
567
+ protected function callback_html( $field ) {
568
+ require_once( bbpress()->admin->admin_dir . 'parser.php' );
569
+ $bbcode = BBCode::getInstance();
570
+ $bbcode->enable_smileys = false;
571
+ $bbcode->smiley_regex = false;
572
+ return html_entity_decode( $bbcode->Parse( $field ) );
573
+ }
574
  }
includes/admin/converters/phpBB.php CHANGED
@@ -1,34 +1,78 @@
1
  <?php
2
 
3
  /**
4
- * Implementation of phpBB converter.
 
 
 
5
  */
6
  class phpBB extends BBP_Converter_Base {
 
 
 
 
 
 
7
  function __construct() {
8
  parent::__construct();
9
  $this->setup_globals();
10
  }
11
 
 
 
 
12
  public function setup_globals() {
13
 
14
  /** Forum Section ******************************************************/
15
 
16
- // Forum id. Stored in postmeta.
17
  $this->field_map[] = array(
18
  'from_tablename' => 'forums',
19
  'from_fieldname' => 'forum_id',
20
  'to_type' => 'forum',
21
  'to_fieldname' => '_bbp_forum_id'
22
  );
23
-
24
- // Forum parent id. If no parent, than 0. Stored in postmeta.
25
  $this->field_map[] = array(
26
  'from_tablename' => 'forums',
27
  'from_fieldname' => 'parent_id',
28
  'to_type' => 'forum',
29
- 'to_fieldname' => '_bbp_parent_id'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  );
31
-
32
  // Forum title.
33
  $this->field_map[] = array(
34
  'from_tablename' => 'forums',
@@ -36,8 +80,8 @@ class phpBB extends BBP_Converter_Base {
36
  'to_type' => 'forum',
37
  'to_fieldname' => 'post_title'
38
  );
39
-
40
- // Forum slug. Clean name.
41
  $this->field_map[] = array(
42
  'from_tablename' => 'forums',
43
  'from_fieldname' => 'forum_name',
@@ -45,7 +89,7 @@ class phpBB extends BBP_Converter_Base {
45
  'to_fieldname' => 'post_name',
46
  'callback_method' => 'callback_slug'
47
  );
48
-
49
  // Forum description.
50
  $this->field_map[] = array(
51
  'from_tablename' => 'forums',
@@ -54,48 +98,75 @@ class phpBB extends BBP_Converter_Base {
54
  'to_fieldname' => 'post_content',
55
  'callback_method' => 'callback_null'
56
  );
57
-
58
- // Forum display order. Starts from 1.
59
  $this->field_map[] = array(
60
  'from_tablename' => 'forums',
61
- 'from_fieldname' => 'display_on_index',
62
  'to_type' => 'forum',
63
  'to_fieldname' => 'menu_order'
64
  );
65
-
66
- // Forum date update.
67
  $this->field_map[] = array(
68
- 'to_type' => 'forums',
69
- 'to_fieldname' => 'forum_last_post_time',
 
 
 
 
 
 
 
 
 
70
  'default' => date('Y-m-d H:i:s')
71
  );
72
  $this->field_map[] = array(
73
- 'to_type' => 'forums',
74
- 'to_fieldname' => 'forum_last_post_time',
75
  'default' => date('Y-m-d H:i:s')
76
  );
77
  $this->field_map[] = array(
78
- 'to_type' => 'forums',
79
- 'to_fieldname' => 'forum_last_post_time',
80
  'default' => date('Y-m-d H:i:s')
81
  );
82
  $this->field_map[] = array(
83
- 'to_type' => 'forums',
84
- 'to_fieldname' => 'forum_last_post_time',
85
  'default' => date('Y-m-d H:i:s')
86
  );
87
 
88
  /** Topic Section ******************************************************/
89
 
90
- // Topic id. Stored in postmeta.
91
  $this->field_map[] = array(
92
  'from_tablename' => 'topics',
93
  'from_fieldname' => 'topic_id',
94
  'to_type' => 'topic',
95
  'to_fieldname' => '_bbp_topic_id'
96
  );
97
-
98
- // Forum id. Stored in postmeta.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  $this->field_map[] = array(
100
  'from_tablename' => 'topics',
101
  'from_fieldname' => 'forum_id',
@@ -103,7 +174,7 @@ class phpBB extends BBP_Converter_Base {
103
  'to_fieldname' => '_bbp_forum_id',
104
  'callback_method' => 'callback_forumid'
105
  );
106
-
107
  // Topic author.
108
  $this->field_map[] = array(
109
  'from_tablename' => 'topics',
@@ -114,6 +185,7 @@ class phpBB extends BBP_Converter_Base {
114
  );
115
 
116
  // Topic content.
 
117
  $this->field_map[] = array(
118
  'from_tablename' => 'posts',
119
  'from_fieldname' => 'post_text',
@@ -123,7 +195,7 @@ class phpBB extends BBP_Converter_Base {
123
  'to_type' => 'topic',
124
  'to_fieldname' => 'post_content',
125
  'callback_method' => 'callback_html'
126
- );
127
 
128
  // Topic title.
129
  $this->field_map[] = array(
@@ -132,8 +204,8 @@ class phpBB extends BBP_Converter_Base {
132
  'to_type' => 'topic',
133
  'to_fieldname' => 'post_title'
134
  );
135
-
136
- // Topic slug. Clean name.
137
  $this->field_map[] = array(
138
  'from_tablename' => 'topics',
139
  'from_fieldname' => 'topic_title',
@@ -141,8 +213,8 @@ class phpBB extends BBP_Converter_Base {
141
  'to_fieldname' => 'post_name',
142
  'callback_method' => 'callback_slug'
143
  );
144
-
145
- // Forum id. If no parent, than 0.
146
  $this->field_map[] = array(
147
  'from_tablename' => 'topics',
148
  'from_fieldname' => 'forum_id',
@@ -151,7 +223,7 @@ class phpBB extends BBP_Converter_Base {
151
  'callback_method' => 'callback_forumid'
152
  );
153
 
154
- // Topic date update.
155
  $this->field_map[] = array(
156
  'from_tablename' => 'topics',
157
  'from_fieldname' => 'topic_time',
@@ -180,41 +252,53 @@ class phpBB extends BBP_Converter_Base {
180
  'to_fieldname' => 'post_modified_gmt',
181
  'callback_method' => 'callback_datetime'
182
  );
183
-
184
- /** Tags Section ******************************************************/
185
- /*
186
- // Topic id.
187
  $this->field_map[] = array(
188
- 'from_tablename' => 'tagcontent',
189
- 'from_fieldname' => 'contentid',
190
- 'to_type' => 'tags',
191
- 'to_fieldname' => 'objectid',
192
- 'callback_method' => 'callback_topicid'
193
  );
194
-
195
- // Tags text.
196
  $this->field_map[] = array(
197
- 'from_tablename' => 'tag',
198
- 'from_fieldname' => 'tagtext',
199
- 'join_tablename' => 'tagcontent',
 
 
 
 
 
 
 
 
 
200
  'join_type' => 'INNER',
201
- 'join_expression' => 'USING (tagid)',
202
- 'to_type' => 'tags',
203
- 'to_fieldname' => 'name'
204
- );
205
- */
206
-
207
- /** Post Section ******************************************************/
208
 
209
- // Post id. Stores in postmeta.
 
 
 
 
 
 
 
 
210
  $this->field_map[] = array(
211
  'from_tablename' => 'posts',
212
  'from_fieldname' => 'post_id',
213
  'to_type' => 'reply',
214
  'to_fieldname' => '_bbp_post_id'
215
  );
216
-
217
- // Topic content.
218
  $this->field_map[] = array(
219
  'from_tablename' => 'topics',
220
  'from_fieldname' => 'topic_id',
@@ -222,9 +306,9 @@ class phpBB extends BBP_Converter_Base {
222
  'join_type' => 'LEFT',
223
  'join_expression' => 'USING (topic_id) WHERE posts.post_id != topics.topic_first_post_id',
224
  'to_type' => 'reply'
225
- );
226
-
227
- // Forum id. Stores in postmeta.
228
  $this->field_map[] = array(
229
  'from_tablename' => 'posts',
230
  'from_fieldname' => 'forum_id',
@@ -232,8 +316,8 @@ class phpBB extends BBP_Converter_Base {
232
  'to_fieldname' => '_bbp_forum_id',
233
  'callback_method' => 'callback_topicid_to_forumid'
234
  );
235
-
236
- // Topic id. Stores in postmeta.
237
  $this->field_map[] = array(
238
  'from_tablename' => 'posts',
239
  'from_fieldname' => 'topic_id',
@@ -241,16 +325,16 @@ class phpBB extends BBP_Converter_Base {
241
  'to_fieldname' => '_bbp_topic_id',
242
  'callback_method' => 'callback_topicid'
243
  );
244
-
245
- // Author ip.
246
  $this->field_map[] = array(
247
  'from_tablename' => 'posts',
248
  'from_fieldname' => 'poster_ip',
249
  'to_type' => 'reply',
250
  'to_fieldname' => '_bbp_author_ip'
251
- );
252
-
253
- // Post author.
254
  $this->field_map[] = array(
255
  'from_tablename' => 'posts',
256
  'from_fieldname' => 'poster_id',
@@ -258,16 +342,16 @@ class phpBB extends BBP_Converter_Base {
258
  'to_fieldname' => 'post_author',
259
  'callback_method' => 'callback_userid'
260
  );
261
-
262
- // Topic title.
263
  $this->field_map[] = array(
264
  'from_tablename' => 'posts',
265
  'from_fieldname' => 'post_subject',
266
  'to_type' => 'reply',
267
  'to_fieldname' => 'post_title'
268
  );
269
-
270
- // Topic slug. Clean name.
271
  $this->field_map[] = array(
272
  'from_tablename' => 'posts',
273
  'from_fieldname' => 'post_subject',
@@ -275,8 +359,8 @@ class phpBB extends BBP_Converter_Base {
275
  'to_fieldname' => 'post_name',
276
  'callback_method' => 'callback_slug'
277
  );
278
-
279
- // Post content.
280
  $this->field_map[] = array(
281
  'from_tablename' => 'posts',
282
  'from_fieldname' => 'post_text',
@@ -284,8 +368,8 @@ class phpBB extends BBP_Converter_Base {
284
  'to_fieldname' => 'post_content',
285
  'callback_method' => 'callback_html'
286
  );
287
-
288
- // Topic id. If no parent, than 0.
289
  $this->field_map[] = array(
290
  'from_tablename' => 'posts',
291
  'from_fieldname' => 'topic_id',
@@ -294,7 +378,7 @@ class phpBB extends BBP_Converter_Base {
294
  'callback_method' => 'callback_topicid'
295
  );
296
 
297
- // Topic date update.
298
  $this->field_map[] = array(
299
  'from_tablename' => 'posts',
300
  'from_fieldname' => 'post_time',
@@ -326,15 +410,15 @@ class phpBB extends BBP_Converter_Base {
326
 
327
  /** User Section ******************************************************/
328
 
329
- // Store old User id. Stores in usermeta.
330
  $this->field_map[] = array(
331
  'from_tablename' => 'users',
332
  'from_fieldname' => 'user_id',
333
  'to_type' => 'user',
334
  'to_fieldname' => '_bbp_user_id'
335
  );
336
-
337
- // Store old User password. Stores in usermeta serialized with salt.
338
  $this->field_map[] = array(
339
  'from_tablename' => 'users',
340
  'from_fieldname' => 'user_password',
@@ -343,21 +427,21 @@ class phpBB extends BBP_Converter_Base {
343
  'callback_method' => 'callback_savepass'
344
  );
345
 
346
- // Store old User Salt. This is only used for the SELECT row info for the above password save
347
  $this->field_map[] = array(
348
  'from_tablename' => 'users',
349
  'from_fieldname' => 'user_form_salt',
350
  'to_type' => 'user',
351
  'to_fieldname' => ''
352
  );
353
-
354
- // User password verify class. Stores in usermeta for verifying password.
355
  $this->field_map[] = array(
356
  'to_type' => 'user',
357
  'to_fieldname' => '_bbp_class',
358
  'default' => 'phpBB'
359
  );
360
-
361
  // User name.
362
  $this->field_map[] = array(
363
  'from_tablename' => 'users',
@@ -365,7 +449,7 @@ class phpBB extends BBP_Converter_Base {
365
  'to_type' => 'user',
366
  'to_fieldname' => 'user_login'
367
  );
368
-
369
  // User email.
370
  $this->field_map[] = array(
371
  'from_tablename' => 'users',
@@ -373,7 +457,7 @@ class phpBB extends BBP_Converter_Base {
373
  'to_type' => 'user',
374
  'to_fieldname' => 'user_email'
375
  );
376
-
377
  // User homepage.
378
  $this->field_map[] = array(
379
  'from_tablename' => 'users',
@@ -381,7 +465,7 @@ class phpBB extends BBP_Converter_Base {
381
  'to_type' => 'user',
382
  'to_fieldname' => 'user_url'
383
  );
384
-
385
  // User registered.
386
  $this->field_map[] = array(
387
  'from_tablename' => 'users',
@@ -390,22 +474,89 @@ class phpBB extends BBP_Converter_Base {
390
  'to_fieldname' => 'user_registered',
391
  'callback_method' => 'callback_datetime'
392
  );
393
-
394
- // User aim.
395
  $this->field_map[] = array(
396
  'from_tablename' => 'users',
397
  'from_fieldname' => 'user_aim',
398
  'to_type' => 'user',
399
  'to_fieldname' => 'aim'
400
  );
401
-
402
- // User yahoo.
403
  $this->field_map[] = array(
404
  'from_tablename' => 'users',
405
  'from_fieldname' => 'user_yim',
406
  'to_type' => 'user',
407
  'to_fieldname' => 'yim'
408
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
409
  }
410
 
411
  /**
@@ -422,52 +573,57 @@ class phpBB extends BBP_Converter_Base {
422
  * as one value.
423
  */
424
  public function callback_savepass( $field, $row ) {
425
- $pass_array = array('hash' => $field, 'salt' => $row['salt']);
426
- return $pass_array;
 
 
427
  }
428
-
429
  /**
430
  * Check for correct password
431
  *
432
  * @param string $password The password in plain text
433
  * @param string $hash The stored password hash
434
  *
 
 
 
435
  * @return bool Returns true if the password is correct, false if not.
436
  */
437
- public function authenticate_pass($password, $serialized_pass) {
438
  $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
439
- $pass_array = unserialize($serialized_pass);
440
- if (strlen($pass_array['hash']) == 34) {
441
- return ($this->_hash_crypt_private($password, $pass_array['hash'], $itoa64) === $pass_array['hash']) ? true : false;
442
  }
443
-
444
- return (md5($password) === $pass_array['hash']) ? true : false;
445
  }
446
-
447
  /**
448
  * The crypt function/replacement
449
  */
450
- private function _hash_crypt_private($password, $setting, &$itoa64) {
451
  $output = '*';
452
-
453
  // Check for correct hash
454
- if (substr($setting, 0, 3) != '$H$') {
455
  return $output;
456
  }
457
-
458
- $count_log2 = strpos($itoa64, $setting[3]);
459
-
460
- if ($count_log2 < 7 || $count_log2 > 30) {
461
  return $output;
462
  }
463
-
464
  $count = 1 << $count_log2;
465
- $salt = substr($setting, 4, 8);
466
-
467
- if (strlen($salt) != 8) {
468
  return $output;
469
  }
470
-
471
  /**
472
  * We're kind of forced to use MD5 here since it's the only
473
  * cryptographic primitive available in all versions of PHP
@@ -476,63 +632,207 @@ class phpBB extends BBP_Converter_Base {
476
  * consequently in lower iteration counts and hashes that are
477
  * quicker to crack (by non-PHP code).
478
  */
479
- if (floatval(phpversion()) >= 5) {
480
- $hash = md5($salt . $password, true);
481
  do
482
  {
483
- $hash = md5($hash . $password, true);
484
  }
485
- while (--$count);
486
  } else {
487
- $hash = pack('H*', md5($salt . $password));
488
  do {
489
- $hash = pack('H*', md5($hash . $password));
490
  }
491
- while (--$count);
492
  }
493
 
494
  $output = substr($setting, 0, 12);
495
  $output .= $this->_hash_encode64($hash, 16, $itoa64);
496
-
497
  return $output;
498
  }
499
-
500
  /**
501
  * Encode hash
502
  */
503
- private function _hash_encode64($input, $count, &$itoa64) {
504
  $output = '';
505
  $i = 0;
506
-
507
  do {
508
- $value = ord($input[$i++]);
509
  $output .= $itoa64[$value & 0x3f];
510
-
511
  if ($i < $count) {
512
- $value |= ord($input[$i]) << 8;
513
  }
514
-
515
- $output .= $itoa64[($value >> 6) & 0x3f];
516
-
517
- if ($i++ >= $count) {
518
  break;
519
  }
520
-
521
- if ($i < $count) {
522
- $value |= ord($input[$i]) << 16;
523
  }
524
-
525
- $output .= $itoa64[($value >> 12) & 0x3f];
526
-
527
- if ($i++ >= $count) {
528
  break;
529
  }
530
-
531
  $output .= $itoa64[($value >> 18) & 0x3f];
532
- }
533
- while ($i < $count);
534
-
535
  return $output;
536
  }
537
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
538
  }
1
  <?php
2
 
3
  /**
4
+ * Implementation of phpBB v3 Converter.
5
+ *
6
+ * @since bbPress (r4689)
7
+ * @link Codex Docs http://codex.bbpress.org/import-forums/phpbb
8
  */
9
  class phpBB extends BBP_Converter_Base {
10
+
11
+ /**
12
+ * Main Constructor
13
+ *
14
+ * @uses phpBB::setup_globals()
15
+ */
16
  function __construct() {
17
  parent::__construct();
18
  $this->setup_globals();
19
  }
20
 
21
+ /**
22
+ * Sets up the field mappings
23
+ */
24
  public function setup_globals() {
25
 
26
  /** Forum Section ******************************************************/
27
 
28
+ // Forum id (Stored in postmeta)
29
  $this->field_map[] = array(
30
  'from_tablename' => 'forums',
31
  'from_fieldname' => 'forum_id',
32
  'to_type' => 'forum',
33
  'to_fieldname' => '_bbp_forum_id'
34
  );
35
+
36
+ // Forum parent id (If no parent, then 0, Stored in postmeta)
37
  $this->field_map[] = array(
38
  'from_tablename' => 'forums',
39
  'from_fieldname' => 'parent_id',
40
  'to_type' => 'forum',
41
+ 'to_fieldname' => '_bbp_forum_parent_id'
42
+ );
43
+
44
+ // Forum topic count (Stored in postmeta)
45
+ $this->field_map[] = array(
46
+ 'from_tablename' => 'forums',
47
+ 'from_fieldname' => 'forum_topics',
48
+ 'to_type' => 'forum',
49
+ 'to_fieldname' => '_bbp_topic_count'
50
+ );
51
+
52
+ // Forum reply count (Stored in postmeta)
53
+ $this->field_map[] = array(
54
+ 'from_tablename' => 'forums',
55
+ 'from_fieldname' => 'forum_posts',
56
+ 'to_type' => 'forum',
57
+ 'to_fieldname' => '_bbp_reply_count'
58
+ );
59
+
60
+ // Forum total topic count (Includes unpublished topics, Stored in postmeta)
61
+ $this->field_map[] = array(
62
+ 'from_tablename' => 'forums',
63
+ 'from_fieldname' => 'forum_topics_real',
64
+ 'to_type' => 'forum',
65
+ 'to_fieldname' => '_bbp_total_topic_count'
66
+ );
67
+
68
+ // Forum total reply count (Stored in postmeta)
69
+ $this->field_map[] = array(
70
+ 'from_tablename' => 'forums',
71
+ 'from_fieldname' => 'forum_posts',
72
+ 'to_type' => 'forum',
73
+ 'to_fieldname' => '_bbp_total_reply_count'
74
  );
75
+
76
  // Forum title.
77
  $this->field_map[] = array(
78
  'from_tablename' => 'forums',
80
  'to_type' => 'forum',
81
  'to_fieldname' => 'post_title'
82
  );
83
+
84
+ // Forum slug (Clean name to avoid conflicts)
85
  $this->field_map[] = array(
86
  'from_tablename' => 'forums',
87
  'from_fieldname' => 'forum_name',
89
  'to_fieldname' => 'post_name',
90
  'callback_method' => 'callback_slug'
91
  );
92
+
93
  // Forum description.
94
  $this->field_map[] = array(
95
  'from_tablename' => 'forums',
98
  'to_fieldname' => 'post_content',
99
  'callback_method' => 'callback_null'
100
  );
101
+
102
+ // Forum display order (Starts from 1)
103
  $this->field_map[] = array(
104
  'from_tablename' => 'forums',
105
+ 'from_fieldname' => 'left_id',
106
  'to_type' => 'forum',
107
  'to_fieldname' => 'menu_order'
108
  );
109
+
110
+ // Forum status (Locked =1 Unlocked =0, Stored in postmeta)
111
  $this->field_map[] = array(
112
+ 'from_tablename' => 'forums',
113
+ 'from_fieldname' => 'forum_status',
114
+ 'to_type' => 'forum',
115
+ 'to_fieldname' => '_bbp_status',
116
+ 'callback_method' => 'callback_forum_status'
117
+ );
118
+
119
+ // Forum dates.
120
+ $this->field_map[] = array(
121
+ 'to_type' => 'forum',
122
+ 'to_fieldname' => 'post_date',
123
  'default' => date('Y-m-d H:i:s')
124
  );
125
  $this->field_map[] = array(
126
+ 'to_type' => 'forum',
127
+ 'to_fieldname' => 'post_date_gmt',
128
  'default' => date('Y-m-d H:i:s')
129
  );
130
  $this->field_map[] = array(
131
+ 'to_type' => 'forum',
132
+ 'to_fieldname' => 'post_modified',
133
  'default' => date('Y-m-d H:i:s')
134
  );
135
  $this->field_map[] = array(
136
+ 'to_type' => 'forum',
137
+ 'to_fieldname' => 'post_modified_gmt',
138
  'default' => date('Y-m-d H:i:s')
139
  );
140
 
141
  /** Topic Section ******************************************************/
142
 
143
+ // Topic id (Stored in postmeta)
144
  $this->field_map[] = array(
145
  'from_tablename' => 'topics',
146
  'from_fieldname' => 'topic_id',
147
  'to_type' => 'topic',
148
  'to_fieldname' => '_bbp_topic_id'
149
  );
150
+
151
+ // Topic reply count (Stored in postmeta)
152
+ $this->field_map[] = array(
153
+ 'from_tablename' => 'topics',
154
+ 'from_fieldname' => 'topic_replies',
155
+ 'to_type' => 'topic',
156
+ 'to_fieldname' => '_bbp_reply_count',
157
+ 'callback_method' => 'callback_topic_reply_count'
158
+ );
159
+
160
+ // Topic total reply count (Includes unpublished replies, Stored in postmeta)
161
+ $this->field_map[] = array(
162
+ 'from_tablename' => 'topics',
163
+ 'from_fieldname' => 'topic_replies_real',
164
+ 'to_type' => 'topic',
165
+ 'to_fieldname' => '_bbp_total_reply_count',
166
+ 'callback_method' => 'callback_topic_reply_count'
167
+ );
168
+
169
+ // Topic parent forum id (If no parent, then 0. Stored in postmeta)
170
  $this->field_map[] = array(
171
  'from_tablename' => 'topics',
172
  'from_fieldname' => 'forum_id',
174
  'to_fieldname' => '_bbp_forum_id',
175
  'callback_method' => 'callback_forumid'
176
  );
177
+
178
  // Topic author.
179
  $this->field_map[] = array(
180
  'from_tablename' => 'topics',
185
  );
186
 
187
  // Topic content.
188
+ // Note: We join the posts table because topics do not have content.
189
  $this->field_map[] = array(
190
  'from_tablename' => 'posts',
191
  'from_fieldname' => 'post_text',
195
  'to_type' => 'topic',
196
  'to_fieldname' => 'post_content',
197
  'callback_method' => 'callback_html'
198
+ );
199
 
200
  // Topic title.
201
  $this->field_map[] = array(
204
  'to_type' => 'topic',
205
  'to_fieldname' => 'post_title'
206
  );
207
+
208
+ // Topic slug (Clean name to avoid conflicts)
209
  $this->field_map[] = array(
210
  'from_tablename' => 'topics',
211
  'from_fieldname' => 'topic_title',
213
  'to_fieldname' => 'post_name',
214
  'callback_method' => 'callback_slug'
215
  );
216
+
217
+ // Topic parent forum id (If no parent, then 0)
218
  $this->field_map[] = array(
219
  'from_tablename' => 'topics',
220
  'from_fieldname' => 'forum_id',
223
  'callback_method' => 'callback_forumid'
224
  );
225
 
226
+ // Topic dates.
227
  $this->field_map[] = array(
228
  'from_tablename' => 'topics',
229
  'from_fieldname' => 'topic_time',
252
  'to_fieldname' => 'post_modified_gmt',
253
  'callback_method' => 'callback_datetime'
254
  );
 
 
 
 
255
  $this->field_map[] = array(
256
+ 'from_tablename' => 'topics',
257
+ 'from_fieldname' => 'topic_last_post_time',
258
+ 'to_type' => 'topic',
259
+ 'to_fieldname' => '_bbp_last_active_time',
260
+ 'callback_method' => 'callback_datetime'
261
  );
262
+
263
+ // Topic status (Open or Closed)
264
  $this->field_map[] = array(
265
+ 'from_tablename' => 'topics',
266
+ 'from_fieldname' => 'topic_status',
267
+ 'to_type' => 'topic',
268
+ 'to_fieldname' => 'post_status',
269
+ 'callback_method' => 'callback_topic_status'
270
+ );
271
+
272
+ // Topic Author ip (Stored in postmeta)
273
+ $this->field_map[] = array(
274
+ 'from_tablename' => 'posts',
275
+ 'from_fieldname' => 'poster_ip',
276
+ 'join_tablename' => 'topics',
277
  'join_type' => 'INNER',
278
+ 'join_expression' => 'USING (topic_id) WHERE posts.post_id = topics.topic_first_post_id',
279
+ 'to_type' => 'topic',
280
+ 'to_fieldname' => '_bbp_author_ip'
281
+ );
282
+
283
+ // Sticky Status
 
284
 
285
+ /** Tags Section ******************************************************/
286
+
287
+ /**
288
+ * phpBB Forums do not support topic tags
289
+ */
290
+
291
+ /** Reply Section *****************************************************/
292
+
293
+ // Reply id (Stored in postmeta)
294
  $this->field_map[] = array(
295
  'from_tablename' => 'posts',
296
  'from_fieldname' => 'post_id',
297
  'to_type' => 'reply',
298
  'to_fieldname' => '_bbp_post_id'
299
  );
300
+
301
+ // Setup reply section table joins
302
  $this->field_map[] = array(
303
  'from_tablename' => 'topics',
304
  'from_fieldname' => 'topic_id',
306
  'join_type' => 'LEFT',
307
  'join_expression' => 'USING (topic_id) WHERE posts.post_id != topics.topic_first_post_id',
308
  'to_type' => 'reply'
309
+ );
310
+
311
+ // Reply parent forum id (If no parent, then 0. Stored in postmeta)
312
  $this->field_map[] = array(
313
  'from_tablename' => 'posts',
314
  'from_fieldname' => 'forum_id',
316
  'to_fieldname' => '_bbp_forum_id',
317
  'callback_method' => 'callback_topicid_to_forumid'
318
  );
319
+
320
+ // Reply parent topic id (If no parent, then 0. Stored in postmeta)
321
  $this->field_map[] = array(
322
  'from_tablename' => 'posts',
323
  'from_fieldname' => 'topic_id',
325
  'to_fieldname' => '_bbp_topic_id',
326
  'callback_method' => 'callback_topicid'
327
  );
328
+
329
+ // Reply author ip (Stored in postmeta)
330
  $this->field_map[] = array(
331
  'from_tablename' => 'posts',
332
  'from_fieldname' => 'poster_ip',
333
  'to_type' => 'reply',
334
  'to_fieldname' => '_bbp_author_ip'
335
+ );
336
+
337
+ // Reply author.
338
  $this->field_map[] = array(
339
  'from_tablename' => 'posts',
340
  'from_fieldname' => 'poster_id',
342
  'to_fieldname' => 'post_author',
343
  'callback_method' => 'callback_userid'
344
  );
345
+
346
+ // Reply title.
347
  $this->field_map[] = array(
348
  'from_tablename' => 'posts',
349
  'from_fieldname' => 'post_subject',
350
  'to_type' => 'reply',
351
  'to_fieldname' => 'post_title'
352
  );
353
+
354
+ // Reply slug (Clean name to avoid conflicts)
355
  $this->field_map[] = array(
356
  'from_tablename' => 'posts',
357
  'from_fieldname' => 'post_subject',
359
  'to_fieldname' => 'post_name',
360
  'callback_method' => 'callback_slug'
361
  );
362
+
363
+ // Reply content.
364
  $this->field_map[] = array(
365
  'from_tablename' => 'posts',
366
  'from_fieldname' => 'post_text',
368
  'to_fieldname' => 'post_content',
369
  'callback_method' => 'callback_html'
370
  );
371
+
372
+ // Reply parent topic id (If no parent, then 0)
373
  $this->field_map[] = array(
374
  'from_tablename' => 'posts',
375
  'from_fieldname' => 'topic_id',
378
  'callback_method' => 'callback_topicid'
379
  );
380
 
381
+ // Reply dates.
382
  $this->field_map[] = array(
383
  'from_tablename' => 'posts',
384
  'from_fieldname' => 'post_time',
410
 
411
  /** User Section ******************************************************/
412
 
413
+ // Store old User id (Stored in usermeta)
414
  $this->field_map[] = array(
415
  'from_tablename' => 'users',
416
  'from_fieldname' => 'user_id',
417
  'to_type' => 'user',
418
  'to_fieldname' => '_bbp_user_id'
419
  );
420
+
421
+ // Store old User password (Stored in usermeta serialized with salt)
422
  $this->field_map[] = array(
423
  'from_tablename' => 'users',
424
  'from_fieldname' => 'user_password',
427
  'callback_method' => 'callback_savepass'
428
  );
429
 
430
+ // Store old User Salt (This is only used for the SELECT row info for the above password save)
431
  $this->field_map[] = array(
432
  'from_tablename' => 'users',
433
  'from_fieldname' => 'user_form_salt',
434
  'to_type' => 'user',
435
  'to_fieldname' => ''
436
  );
437
+
438
+ // User password verify class (Stored in usermeta for verifying password)
439
  $this->field_map[] = array(
440
  'to_type' => 'user',
441
  'to_fieldname' => '_bbp_class',
442
  'default' => 'phpBB'
443
  );
444
+
445
  // User name.
446
  $this->field_map[] = array(
447
  'from_tablename' => 'users',
449
  'to_type' => 'user',
450
  'to_fieldname' => 'user_login'
451
  );
452
+
453
  // User email.
454
  $this->field_map[] = array(
455
  'from_tablename' => 'users',
457
  'to_type' => 'user',
458
  'to_fieldname' => 'user_email'
459
  );
460
+
461
  // User homepage.
462
  $this->field_map[] = array(
463
  'from_tablename' => 'users',
465
  'to_type' => 'user',
466
  'to_fieldname' => 'user_url'
467
  );
468
+
469
  // User registered.
470
  $this->field_map[] = array(
471
  'from_tablename' => 'users',
474
  'to_fieldname' => 'user_registered',
475
  'callback_method' => 'callback_datetime'
476
  );
477
+
478
+ // User AIM (Stored in usermeta)
479
  $this->field_map[] = array(
480
  'from_tablename' => 'users',
481
  'from_fieldname' => 'user_aim',
482
  'to_type' => 'user',
483
  'to_fieldname' => 'aim'
484
  );
485
+
486
+ // User Yahoo (Stored in usermeta)
487
  $this->field_map[] = array(
488
  'from_tablename' => 'users',
489
  'from_fieldname' => 'user_yim',
490
  'to_type' => 'user',
491
  'to_fieldname' => 'yim'
492
+ );
493
+
494
+ // Store ICQ (Stored in usermeta)
495
+ $this->field_map[] = array(
496
+ 'from_tablename' => 'users',
497
+ 'from_fieldname' => 'user_icq',
498
+ 'to_type' => 'user',
499
+ 'to_fieldname' => '_bbp_phpbb_user_icq'
500
+ );
501
+
502
+ // Store MSN (Stored in usermeta)
503
+ $this->field_map[] = array(
504
+ 'from_tablename' => 'users',
505
+ 'from_fieldname' => 'user_msnm',
506
+ 'to_type' => 'user',
507
+ 'to_fieldname' => '_bbp_phpbb_user_msnm'
508
+ );
509
+
510
+ // Store Jabber
511
+ $this->field_map[] = array(
512
+ 'from_tablename' => 'users',
513
+ 'from_fieldname' => 'user_jabber',
514
+ 'to_type' => 'user',
515
+ 'to_fieldname' => 'jabber'
516
+ );
517
+
518
+ // Store Occupation (Stored in usermeta)
519
+ $this->field_map[] = array(
520
+ 'from_tablename' => 'users',
521
+ 'from_fieldname' => 'user_occ',
522
+ 'to_type' => 'user',
523
+ 'to_fieldname' => '_bbp_phpbb_user_occ'
524
+ );
525
+
526
+ // Store Interests (Stored in usermeta)
527
+ $this->field_map[] = array(
528
+ 'from_tablename' => 'users',
529
+ 'from_fieldname' => 'user_interests',
530
+ 'to_type' => 'user',
531
+ 'to_fieldname' => '_bbp_phpbb_user_interests'
532
+ );
533
+
534
+ // Store Signature (Stored in usermeta)
535
+ $this->field_map[] = array(
536
+ 'from_tablename' => 'users',
537
+ 'from_fieldname' => 'user_sig',
538
+ 'to_type' => 'user',
539
+ 'to_fieldname' => '_bbp_phpbb_user_sig',
540
+ 'callback_method' => 'callback_html'
541
+ );
542
+
543
+ // Store Location (Stored in usermeta)
544
+ $this->field_map[] = array(
545
+ 'from_tablename' => 'users',
546
+ 'from_fieldname' => 'user_from',
547
+ 'to_type' => 'user',
548
+ 'to_fieldname' => '_bbp_phpbb_user_from'
549
+ );
550
+
551
+ // Store Avatar Filename (Stored in usermeta)
552
+ $this->field_map[] = array(
553
+ 'from_tablename' => 'users',
554
+ 'from_fieldname' => 'user_avatar',
555
+ 'to_type' => 'user',
556
+ 'to_fieldname' => '_bbp_phpbb_user_avatar'
557
+ );
558
+
559
+ // Store old role (Stored in usermeta)
560
  }
561
 
562
  /**
573
  * as one value.
574
  */
575
  public function callback_savepass( $field, $row ) {
576
+ return array(
577
+ 'hash' => $field,
578
+ 'salt' => $row['salt']
579
+ );
580
  }
581
+
582
  /**
583
  * Check for correct password
584
  *
585
  * @param string $password The password in plain text
586
  * @param string $hash The stored password hash
587
  *
588
+ * @link Original source for password functions http://openwall.com/phpass/
589
+ * @link phpass is now included in WP Core http://core.trac.wordpress.org/browser/trunk/wp-includes/class-phpass.php
590
+ *
591
  * @return bool Returns true if the password is correct, false if not.
592
  */
593
+ public function authenticate_pass( $password, $serialized_pass ) {
594
  $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
595
+ $pass_array = unserialize( $serialized_pass );
596
+ if ( strlen( $pass_array['hash'] ) == 34 ) {
597
+ return ( $this->_hash_crypt_private( $password, $pass_array['hash'], $itoa64 ) === $pass_array['hash'] ) ? true : false;
598
  }
599
+
600
+ return ( md5( $password ) === $pass_array['hash'] ) ? true : false;
601
  }
602
+
603
  /**
604
  * The crypt function/replacement
605
  */
606
+ private function _hash_crypt_private( $password, $setting, &$itoa64 ) {
607
  $output = '*';
608
+
609
  // Check for correct hash
610
+ if ( substr( $setting, 0, 3 ) != '$H$' ) {
611
  return $output;
612
  }
613
+
614
+ $count_log2 = strpos( $itoa64, $setting[3] );
615
+
616
+ if ( $count_log2 < 7 || $count_log2 > 30 ) {
617
  return $output;
618
  }
619
+
620
  $count = 1 << $count_log2;
621
+ $salt = substr( $setting, 4, 8 );
622
+
623
+ if ( strlen( $salt ) != 8 ) {
624
  return $output;
625
  }
626
+
627
  /**
628
  * We're kind of forced to use MD5 here since it's the only
629
  * cryptographic primitive available in all versions of PHP
632
  * consequently in lower iteration counts and hashes that are
633
  * quicker to crack (by non-PHP code).
634
  */
635
+ if ( floatval( phpversion() ) >= 5 ) {
636
+ $hash = md5( $salt . $password, true );
637
  do
638
  {
639
+ $hash = md5( $hash . $password, true );
640
  }
641
+ while ( --$count );
642
  } else {
643
+ $hash = pack( 'H*', md5( $salt . $password ) );
644
  do {
645
+ $hash = pack( 'H*', md5( $hash . $password ) );
646
  }
647
+ while ( --$count );
648
  }
649
 
650
  $output = substr($setting, 0, 12);
651
  $output .= $this->_hash_encode64($hash, 16, $itoa64);
652
+
653
  return $output;
654
  }
655
+
656
  /**
657
  * Encode hash
658
  */
659
+ private function _hash_encode64( $input, $count, &$itoa64 ) {
660
  $output = '';
661
  $i = 0;
662
+
663
  do {
664
+ $value = ord( $input[$i++] );
665
  $output .= $itoa64[$value & 0x3f];
666
+
667
  if ($i < $count) {
668
+ $value |= ord( $input[$i] ) << 8;
669
  }
670
+
671
+ $output .= $itoa64[( $value >> 6 ) & 0x3f];
672
+
673
+ if ( $i++ >= $count ) {
674
  break;
675
  }
676
+
677
+ if ( $i < $count ) {
678
+ $value |= ord( $input[$i] ) << 16;
679
  }
680
+
681
+ $output .= $itoa64[( $value >> 12 ) & 0x3f];
682
+
683
+ if ( $i++ >= $count ) {
684
  break;
685
  }
686
+
687
  $output .= $itoa64[($value >> 18) & 0x3f];
688
+ } while ( $i < $count );
689
+
 
690
  return $output;
691
  }
692
 
693
+ /**
694
+ * Translate the forum status from phpBB v3.x numeric's to WordPress's strings.
695
+ *
696
+ * @param int $status phpBB v3.x numeric forum status
697
+ * @return string WordPress safe
698
+ */
699
+ public function callback_forum_status( $status = 0 ) {
700
+ switch ( $status ) {
701
+ case 1 :
702
+ $status = 'closed';
703
+ break;
704
+
705
+ case 0 :
706
+ default :
707
+ $status = 'open';
708
+ break;
709
+ }
710
+ return $status;
711
+ }
712
+
713
+ /**
714
+ * Translate the topic status from phpBB v3.x numeric's to WordPress's strings.
715
+ *
716
+ * @param int $status phpBB v3.x numeric topic status
717
+ * @return string WordPress safe
718
+ */
719
+ public function callback_topic_status( $status = 0 ) {
720
+ switch ( $status ) {
721
+ case 1 :
722
+ $status = 'closed';
723
+ break;
724
+
725
+ case 0 :
726
+ default :
727
+ $status = 'publish';
728
+ break;
729
+ }
730
+ return $status;
731
+ }
732
+
733
+ /**
734
+ * Verify the topic reply count.
735
+ *
736
+ * @param int $count phpBB v3.x reply count
737
+ * @return string WordPress safe
738
+ */
739
+ public function callback_topic_reply_count( $count = 1 ) {
740
+ $count = absint( (int) $count - 1 );
741
+ return $count;
742
+ }
743
+
744
+ /**
745
+ * This callback processes any custom parser.php attributes and custom code with preg_replace
746
+ */
747
+ protected function callback_html( $field ) {
748
+
749
+ // Strips custom phpBB 'magic_url' and 'bbcode_uid' first from $field before parsing $field to parser.php
750
+ $phpbb_uid = $field;
751
+ $phpbb_uid = html_entity_decode( $phpbb_uid );
752
+
753
+ // Replace '[b:XXXXXXX]' with '<strong>'
754
+ $phpbb_uid = preg_replace( '/\[b:(.*?)\]/', '<strong>', $phpbb_uid );
755
+ // Replace '[/b:XXXXXXX]' with '</strong>'
756
+ $phpbb_uid = preg_replace( '/\[\/b:(.*?)\]/', '</strong>', $phpbb_uid );
757
+
758
+ // Replace '[i:XXXXXXX]' with '<em>'
759
+ $phpbb_uid = preg_replace( '/\[i:(.*?)\]/', '<em>', $phpbb_uid );
760
+ // Replace '[/i:XXXXXXX]' with '</em>'
761
+ $phpbb_uid = preg_replace( '/\[\/i:(.*?)\]/', '</em>', $phpbb_uid );
762
+
763
+ // Replace '[u:XXXXXXX]' with '<u>'
764
+ $phpbb_uid = preg_replace( '/\[u:(.*?)\]/', '<u>', $phpbb_uid );
765
+ // Replace '[/u:XXXXXXX]' with '</u>'
766
+ $phpbb_uid = preg_replace( '/\[\/u:(.*?)\]/', '</u>', $phpbb_uid );
767
+
768
+ // Replace '[quote:XXXXXXX]' with '<blockquote>'
769
+ $phpbb_uid = preg_replace( '/\[quote:(.*?)\]/', '<blockquote>', $phpbb_uid );
770
+ // Replace '[quote="$1"]' with '<em>$1 wrote:</em><blockquote>"
771
+ $phpbb_uid = preg_replace( '/\[quote="(.*?)":(.*?)\]/', '<em>@$1 wrote:</em><blockquote>', $phpbb_uid );
772
+ // Replace '[/quote:XXXXXXX]' with '</blockquote>'
773
+ $phpbb_uid = preg_replace( '/\[\/quote:(.*?)\]/', '</blockquote>', $phpbb_uid );
774
+
775
+ // Replace '[img:XXXXXXX]' with '<img src="'
776
+ $phpbb_uid = preg_replace( '/\[img:(.*?)\]/', '<img src="', $phpbb_uid );
777
+ // Replace '[/img:XXXXXXX]' with ' alt="">'
778
+ $phpbb_uid = preg_replace( '/\[\/img:(.*?)\]/', '" alt="">', $phpbb_uid );
779
+
780
+ // Replace '<!-- s$1 --><img src=\"{SMILIES_PATH}$2 -->' with '$1'
781
+ $phpbb_uid = preg_replace( '/<!-- s(.*?) --><img src=\"{SMILIES_PATH}(.*?)-->/', '$1', $phpbb_uid );
782
+
783
+ // Replace '<!-- m --><a class="postlink" href="$1">$1</a><!-- m -->' with '$1'
784
+ $phpbb_uid = preg_replace( '/\<!-- m --\>\<a class="postlink" href="([^\[]+?)"\>([^\[]+?)\<\/a\>\<!-- m --\>/', '$1', $phpbb_uid );
785
+
786
+ // Replace '[url:XXXXXXX]$1[/url:XXXXXXX]' with '<a href="http://$1">$1</a>'
787
+ $phpbb_uid = preg_replace( '/\[url:(?:[^\]]+)\]([^\[]+?)\[\/url:(?:[^\]]+)\]/', '<a href="http://$1">$1</a>', $phpbb_uid );
788
+ // Replace '[url=http://$1:XXXXXXX]$3[/url:XXXXXXX]' with '<a href="http://$1">$3</a>'
789
+ $phpbb_uid = preg_replace( '/\[url\=http\:\/\/(.*?)\:(.*?)\](.*?)\[\/url:(.*?)\]/i', '<a href="http://$1">$3</a>', $phpbb_uid );
790
+ // Replace '[url=https://$1:XXXXXXX]$3[/url:XXXXXXX]' with '<a href="http://$1">$3</a>'
791
+ $phpbb_uid = preg_replace( '/\[url\=https\:\/\/(.*?)\:(.*?)\](.*?)\[\/url:(.*?)\]/i', '<a href="https://$1">$3</a>', $phpbb_uid );
792
+
793
+ // Replace '[email:XXXXXXX]' with '<a href="mailto:$2">$2</a>'
794
+ $phpbb_uid = preg_replace( '/\[email:(.*?)\](.*?)\[\/email:(.*?)\]/', '<a href="mailto:$2">$2</a>', $phpbb_uid );
795
+ // Replace '<!-- e -->no.one@domain.adr<!-- e -->' with '$1'
796
+ $phpbb_uid = preg_replace( '/\<!-- e --\>(.*?)\<!-- e --\>/', '$1', $phpbb_uid );
797
+
798
+ // Replace '[code:XXXXXXX]' with '<pre><code>'
799
+ $phpbb_uid = preg_replace( '/\[code:(.*?)\]/', '<pre><code>', $phpbb_uid );
800
+ // Replace '[/code:XXXXXXX]' with '</code></pre>'
801
+ $phpbb_uid = preg_replace( '/\[\/code:(.*?)\]/', '</code></pre>', $phpbb_uid );
802
+
803
+ // Replace '[color=$1:XXXXXXXX]' with '<span style="color:$1">'
804
+ $phpbb_uid = preg_replace( '/\[color=(.*?)\:(.*?)\]/', '<span style="color: $1">', $phpbb_uid );
805
+ // Replace '[/color:XXXXXXX]' with '</span>'
806
+ $phpbb_uid = preg_replace( '/\[\/color:(.*?)\]/', '</span>', $phpbb_uid );
807
+
808
+ // Replace '[size=$1:XXXXXXXX]' with '<span style="font-size:$1%;">$3</span>'
809
+ $phpbb_uid = preg_replace( '/\[size=(.*?):(.*?)\]/', '<span style="font-size:$1%;">', $phpbb_uid );
810
+ // Replace '[/size:XXXXXXX]' with ''
811
+ $phpbb_uid = preg_replace( '/\[\/size:(.*?)\]/', '</span>', $phpbb_uid );
812
+
813
+ // Replace '[list:XXXXXXX]' with '<ul>'
814
+ $phpbb_uid = preg_replace( '/\[list:(.*?)\]/', '<ul>', $phpbb_uid );
815
+ // Replace '[list=a:XXXXXXX]' with '<ol type="a">'
816
+ $phpbb_uid = preg_replace( '/\[list=a:(.*?)\]/', '<ol type="a">', $phpbb_uid );
817
+ // Replace '[list=1:XXXXXXX]' with '<ol>'
818
+ $phpbb_uid = preg_replace( '/\[list=1:(.*?)\]/', '<ol>', $phpbb_uid );
819
+ // Replace '[*:XXXXXXX]' with '<li>'
820
+ $phpbb_uid = preg_replace( '/\[\*:(.*?)\]/', '<li>', $phpbb_uid );
821
+ // Replace '[/*:m:XXXXXXX]' with '</li>'
822
+ $phpbb_uid = preg_replace( '/\[\/\*:m:(.*?)\]/', '</li>', $phpbb_uid );
823
+ // Replace '[/list:u:XXXXXXX]' with '</ul>'
824
+ $phpbb_uid = preg_replace( '/\[\/list:u:(.*?)\]/', '</ul>', $phpbb_uid );
825
+ // Replace '[/list:o:XXXXXXX]' with '</ol>'
826
+ $phpbb_uid = preg_replace( '/\[\/list:o:(.*?)\]/', '</ol>', $phpbb_uid );
827
+
828
+ // Now that phpBB's 'magic_url' and 'bbcode_uid' have been stripped put the cleaned HTML back in $field
829
+ $field = $phpbb_uid;
830
+
831
+ // Parse out any bbCodes in $field with the BBCode 'parser.php'
832
+ require_once( bbpress()->admin->admin_dir . 'parser.php' );
833
+ $bbcode = BBCode::getInstance();
834
+ $bbcode->enable_smileys = false;
835
+ $bbcode->smiley_regex = false;
836
+ return html_entity_decode( $bbcode->Parse( $field ) );
837
+ }
838
  }
includes/admin/converters/vBulletin.php CHANGED
@@ -1,9 +1,10 @@
1
  <?php
2
 
3
  /**
4
- * vBulletin Converter
5
  *
6
- * @since bbPress (r)
 
7
  */
8
  class vBulletin extends BBP_Converter_Base {
9
 
@@ -32,7 +33,7 @@ class vBulletin extends BBP_Converter_Base {
32
  'to_fieldname' => '_bbp_forum_id'
33
  );
34
 
35
- // Forum parent id (If no parent, than 0. Stored in postmeta)
36
  $this->field_map[] = array(
37
  'from_tablename' => 'forum',
38
  'from_fieldname' => 'parentid',
@@ -40,6 +41,22 @@ class vBulletin extends BBP_Converter_Base {
40
  'to_fieldname' => '_bbp_forum_parent_id'
41
  );
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  // Forum title.
44
  $this->field_map[] = array(
45
  'from_tablename' => 'forum',
@@ -74,7 +91,7 @@ class vBulletin extends BBP_Converter_Base {
74
  'to_fieldname' => 'menu_order'
75
  );
76
 
77
- // Forum date update.
78
  $this->field_map[] = array(
79
  'to_type' => 'forum',
80
  'to_fieldname' => 'post_date',
@@ -106,7 +123,7 @@ class vBulletin extends BBP_Converter_Base {
106
  'to_fieldname' => '_bbp_topic_id'
107
  );
108
 
109
- // Forum id (Stored in postmeta)
110
  $this->field_map[] = array(
111
  'from_tablename' => 'thread',
112
  'from_fieldname' => 'forumid',
@@ -115,6 +132,15 @@ class vBulletin extends BBP_Converter_Base {
115
  'callback_method' => 'callback_forumid'
116
  );
117
 
 
 
 
 
 
 
 
 
 
118
  // Topic author.
119
  $this->field_map[] = array(
120
  'from_tablename' => 'thread',
@@ -141,7 +167,7 @@ class vBulletin extends BBP_Converter_Base {
141
  'callback_method' => 'callback_slug'
142
  );
143
 
144
- // Forum id (If no parent, than 0)
145
  $this->field_map[] = array(
146
  'from_tablename' => 'thread',
147
  'from_fieldname' => 'forumid',
@@ -163,7 +189,7 @@ class vBulletin extends BBP_Converter_Base {
163
  'callback_method' => 'callback_html'
164
  );
165
 
166
- // Topic date update.
167
  $this->field_map[] = array(
168
  'from_tablename' => 'thread',
169
  'from_fieldname' => 'dateline',
@@ -192,6 +218,22 @@ class vBulletin extends BBP_Converter_Base {
192
  'to_fieldname' => 'post_modified_gmt',
193
  'callback_method' => 'callback_datetime'
194
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
 
196
  /** Tags Section ******************************************************/
197
 
@@ -204,7 +246,15 @@ class vBulletin extends BBP_Converter_Base {
204
  'callback_method' => 'callback_topicid'
205
  );
206
 
207
- // Tags text.
 
 
 
 
 
 
 
 
208
  $this->field_map[] = array(
209
  'from_tablename' => 'tag',
210
  'from_fieldname' => 'tagtext',
@@ -215,27 +265,29 @@ class vBulletin extends BBP_Converter_Base {
215
  'to_fieldname' => 'name'
216
  );
217
 
218
- /** Post Section ******************************************************/
219
 
220
- // Post id (Stores in postmeta)
221
  $this->field_map[] = array(
222
  'from_tablename' => 'post',
223
  'from_fieldname' => 'postid',
224
- 'from_expression' => 'WHERE post.parentid != 0',
225
  'to_type' => 'reply',
226
  'to_fieldname' => '_bbp_post_id'
227
  );
228
 
229
- // Forum id (Stores in postmeta)
230
  $this->field_map[] = array(
231
- 'from_tablename' => 'post',
232
- 'from_fieldname' => 'threadid',
 
 
 
233
  'to_type' => 'reply',
234
  'to_fieldname' => '_bbp_forum_id',
235
  'callback_method' => 'callback_topicid_to_forumid'
236
  );
237
 
238
- // Topic id (Stores in postmeta)
239
  $this->field_map[] = array(
240
  'from_tablename' => 'post',
241
  'from_fieldname' => 'threadid',
@@ -244,7 +296,7 @@ class vBulletin extends BBP_Converter_Base {
244
  'callback_method' => 'callback_topicid'
245
  );
246
 
247
- // Author ip.
248
  $this->field_map[] = array(
249
  'from_tablename' => 'post',
250
  'from_fieldname' => 'ipaddress',
@@ -252,7 +304,7 @@ class vBulletin extends BBP_Converter_Base {
252
  'to_fieldname' => '_bbp_author_ip'
253
  );
254
 
255
- // Post author.
256
  $this->field_map[] = array(
257
  'from_tablename' => 'post',
258
  'from_fieldname' => 'userid',
@@ -261,24 +313,20 @@ class vBulletin extends BBP_Converter_Base {
261
  'callback_method' => 'callback_userid'
262
  );
263
 
264
- // Topic title.
 
265
  $this->field_map[] = array(
266
- 'from_tablename' => 'post',
267
- 'from_fieldname' => 'title',
268
- 'to_type' => 'reply',
269
- 'to_fieldname' => 'post_title'
270
- );
271
-
272
- // Topic slug (Clean name)
273
- $this->field_map[] = array(
274
- 'from_tablename' => 'post',
275
  'from_fieldname' => 'title',
 
 
 
276
  'to_type' => 'reply',
277
- 'to_fieldname' => 'post_name',
278
- 'callback_method' => 'callback_slug'
279
  );
280
 
281
- // Post content.
282
  $this->field_map[] = array(
283
  'from_tablename' => 'post',
284
  'from_fieldname' => 'pagetext',
@@ -287,7 +335,7 @@ class vBulletin extends BBP_Converter_Base {
287
  'callback_method' => 'callback_html'
288
  );
289
 
290
- // Topic id (If no parent, than 0)
291
  $this->field_map[] = array(
292
  'from_tablename' => 'post',
293
  'from_fieldname' => 'threadid',
@@ -296,7 +344,7 @@ class vBulletin extends BBP_Converter_Base {
296
  'callback_method' => 'callback_topicid'
297
  );
298
 
299
- // Topic date update.
300
  $this->field_map[] = array(
301
  'from_tablename' => 'post',
302
  'from_fieldname' => 'dateline',
@@ -328,7 +376,7 @@ class vBulletin extends BBP_Converter_Base {
328
 
329
  /** User Section ******************************************************/
330
 
331
- // Store old User id (Stores in usermeta)
332
  $this->field_map[] = array(
333
  'from_tablename' => 'user',
334
  'from_fieldname' => 'userid',
@@ -336,7 +384,7 @@ class vBulletin extends BBP_Converter_Base {
336
  'to_fieldname' => '_bbp_user_id'
337
  );
338
 
339
- // Store old User password (Stores in usermeta serialized with salt)
340
  $this->field_map[] = array(
341
  'from_tablename' => 'user',
342
  'from_fieldname' => 'password',
@@ -345,8 +393,7 @@ class vBulletin extends BBP_Converter_Base {
345
  'callback_method' => 'callback_savepass'
346
  );
347
 
348
- // Store old User Salt (This is only used for the SELECT row info for
349
- // the above password save)
350
  $this->field_map[] = array(
351
  'from_tablename' => 'user',
352
  'from_fieldname' => 'salt',
@@ -354,7 +401,7 @@ class vBulletin extends BBP_Converter_Base {
354
  'to_fieldname' => ''
355
  );
356
 
357
- // User password verify class (Stores in usermeta for verifying password)
358
  $this->field_map[] = array(
359
  'to_type' => 'user',
360
  'to_fieldname' => '_bbp_class',
@@ -369,14 +416,6 @@ class vBulletin extends BBP_Converter_Base {
369
  'to_fieldname' => 'user_login'
370
  );
371
 
372
- // User nice name.
373
- $this->field_map[] = array(
374
- 'from_tablename' => 'user',
375
- 'from_fieldname' => 'user_nicename',
376
- 'to_type' => 'user',
377
- 'to_fieldname' => 'user_nicename'
378
- );
379
-
380
  // User email.
381
  $this->field_map[] = array(
382
  'from_tablename' => 'user',
@@ -402,7 +441,7 @@ class vBulletin extends BBP_Converter_Base {
402
  'callback_method' => 'callback_datetime'
403
  );
404
 
405
- // User aim.
406
  $this->field_map[] = array(
407
  'from_tablename' => 'user',
408
  'from_fieldname' => 'aim',
@@ -410,13 +449,37 @@ class vBulletin extends BBP_Converter_Base {
410
  'to_fieldname' => 'aim'
411
  );
412
 
413
- // User yahoo.
414
  $this->field_map[] = array(
415
  'from_tablename' => 'user',
416
  'from_fieldname' => 'yahoo',
417
  'to_type' => 'user',
418
  'to_fieldname' => 'yim'
419
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
420
  }
421
 
422
  /**
@@ -427,6 +490,7 @@ class vBulletin extends BBP_Converter_Base {
427
  return '';
428
  }
429
 
 
430
  /**
431
  * This method is to save the salt and password together. That
432
  * way when we authenticate it we can get it out of the database
@@ -440,9 +504,88 @@ class vBulletin extends BBP_Converter_Base {
440
  /**
441
  * This method is to take the pass out of the database and compare
442
  * to a pass the user has typed in.
 
 
 
 
 
443
  */
444
  public function authenticate_pass( $password, $serialized_pass ) {
445
  $pass_array = unserialize( $serialized_pass );
446
  return ( $pass_array['hash'] == md5( md5( $password ) . $pass_array['salt'] ) );
447
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
448
  }
1
  <?php
2
 
3
  /**
4
+ * Implementation of vBulletin v4.x Converter.
5
  *
6
+ * @since bbPress (r4724)
7
+ * @link Codex Docs http://codex.bbpress.org/import-forums/vbulletin
8
  */
9
  class vBulletin extends BBP_Converter_Base {
10
 
33
  'to_fieldname' => '_bbp_forum_id'
34
  );
35
 
36
+ // Forum parent id (If no parent, then 0. Stored in postmeta)
37
  $this->field_map[] = array(
38
  'from_tablename' => 'forum',
39
  'from_fieldname' => 'parentid',
41
  'to_fieldname' => '_bbp_forum_parent_id'
42
  );
43
 
44
+ // Forum topic count (Stored in postmeta)
45
+ $this->field_map[] = array(
46
+ 'from_tablename' => 'forum',
47
+ 'from_fieldname' => 'threadcount',
48
+ 'to_type' => 'forum',
49
+ 'to_fieldname' => '_bbp_topic_count'
50
+ );
51
+
52
+ // Forum reply count (Stored in postmeta)
53
+ $this->field_map[] = array(
54
+ 'from_tablename' => 'forum',
55
+ 'from_fieldname' => 'replycount',
56
+ 'to_type' => 'forum',
57
+ 'to_fieldname' => '_bbp_reply_count'
58
+ );
59
+
60
  // Forum title.
61
  $this->field_map[] = array(
62
  'from_tablename' => 'forum',
91
  'to_fieldname' => 'menu_order'
92
  );
93
 
94
+ // Forum dates.
95
  $this->field_map[] = array(
96
  'to_type' => 'forum',
97
  'to_fieldname' => 'post_date',
123
  'to_fieldname' => '_bbp_topic_id'
124
  );
125
 
126
+ // Topic parent forum id (If no parent, then 0. Stored in postmeta)
127
  $this->field_map[] = array(
128
  'from_tablename' => 'thread',
129
  'from_fieldname' => 'forumid',
132
  'callback_method' => 'callback_forumid'
133
  );
134
 
135
+ // Topic reply count (Stored in postmeta)
136
+ $this->field_map[] = array(
137
+ 'from_tablename' => 'thread',
138
+ 'from_fieldname' => 'replycount',
139
+ 'to_type' => 'topic',
140
+ 'to_fieldname' => '_bbp_reply_count',
141
+ 'callback_method' => 'callback_topic_reply_count'
142
+ );
143
+
144
  // Topic author.
145
  $this->field_map[] = array(
146
  'from_tablename' => 'thread',
167
  'callback_method' => 'callback_slug'
168
  );
169
 
170
+ // Topic parent forum id (If no parent, then 0)
171
  $this->field_map[] = array(
172
  'from_tablename' => 'thread',
173
  'from_fieldname' => 'forumid',
189
  'callback_method' => 'callback_html'
190
  );
191
 
192
+ // Topic dates.
193
  $this->field_map[] = array(
194
  'from_tablename' => 'thread',
195
  'from_fieldname' => 'dateline',
218
  'to_fieldname' => 'post_modified_gmt',
219
  'callback_method' => 'callback_datetime'
220
  );
221
+ $this->field_map[] = array(
222
+ 'from_tablename' => 'thread',
223
+ 'from_fieldname' => 'lastpost',
224
+ 'to_type' => 'topic',
225
+ 'to_fieldname' => '_bbp_last_active_time',
226
+ 'callback_method' => 'callback_datetime'
227
+ );
228
+
229
+ // Topic status (Open or Closed)
230
+ $this->field_map[] = array(
231
+ 'from_tablename' => 'thread',
232
+ 'from_fieldname' => 'open',
233
+ 'to_type' => 'topic',
234
+ 'to_fieldname' => 'post_status',
235
+ 'callback_method' => 'callback_topic_status'
236
+ );
237
 
238
  /** Tags Section ******************************************************/
239
 
246
  'callback_method' => 'callback_topicid'
247
  );
248
 
249
+ // Taxonomy ID.
250
+ $this->field_map[] = array(
251
+ 'from_tablename' => 'tagcontent',
252
+ 'from_fieldname' => 'tagid',
253
+ 'to_type' => 'tags',
254
+ 'to_fieldname' => 'taxonomy'
255
+ );
256
+
257
+ // Term text.
258
  $this->field_map[] = array(
259
  'from_tablename' => 'tag',
260
  'from_fieldname' => 'tagtext',
265
  'to_fieldname' => 'name'
266
  );
267
 
268
+ /** Reply Section *****************************************************/
269
 
270
+ // Reply id (Stored in postmeta)
271
  $this->field_map[] = array(
272
  'from_tablename' => 'post',
273
  'from_fieldname' => 'postid',
 
274
  'to_type' => 'reply',
275
  'to_fieldname' => '_bbp_post_id'
276
  );
277
 
278
+ // Reply parent forum id (If no parent, then 0. Stored in postmeta)
279
  $this->field_map[] = array(
280
+ 'from_tablename' => 'thread',
281
+ 'from_fieldname' => 'forumid',
282
+ 'join_tablename' => 'post',
283
+ 'join_type' => 'INNER',
284
+ 'join_expression' => 'USING (threadid) WHERE post.parentid != 0',
285
  'to_type' => 'reply',
286
  'to_fieldname' => '_bbp_forum_id',
287
  'callback_method' => 'callback_topicid_to_forumid'
288
  );
289
 
290
+ // Reply parent topic id (If no parent, then 0. Stored in postmeta)
291
  $this->field_map[] = array(
292
  'from_tablename' => 'post',
293
  'from_fieldname' => 'threadid',
296
  'callback_method' => 'callback_topicid'
297
  );
298
 
299
+ // Reply author ip (Stored in postmeta)
300
  $this->field_map[] = array(
301
  'from_tablename' => 'post',
302
  'from_fieldname' => 'ipaddress',
304
  'to_fieldname' => '_bbp_author_ip'
305
  );
306
 
307
+ // Reply author.
308
  $this->field_map[] = array(
309
  'from_tablename' => 'post',
310
  'from_fieldname' => 'userid',
313
  'callback_method' => 'callback_userid'
314
  );
315
 
316
+ // Reply title.
317
+ // Note: We join the thread table because post table does not include topic title.
318
  $this->field_map[] = array(
319
+ 'from_tablename' => 'thread',
 
 
 
 
 
 
 
 
320
  'from_fieldname' => 'title',
321
+ 'join_tablename' => 'post',
322
+ 'join_type' => 'INNER',
323
+ 'join_expression' => 'USING (threadid) WHERE post.parentid != 0',
324
  'to_type' => 'reply',
325
+ 'to_fieldname' => 'post_title',
326
+ 'callback_method' => 'callback_reply_title'
327
  );
328
 
329
+ // Reply content.
330
  $this->field_map[] = array(
331
  'from_tablename' => 'post',
332
  'from_fieldname' => 'pagetext',
335
  'callback_method' => 'callback_html'
336
  );
337
 
338
+ // Reply parent topic id (If no parent, then 0)
339
  $this->field_map[] = array(
340
  'from_tablename' => 'post',
341
  'from_fieldname' => 'threadid',
344
  'callback_method' => 'callback_topicid'
345
  );
346
 
347
+ // Reply dates.
348
  $this->field_map[] = array(
349
  'from_tablename' => 'post',
350
  'from_fieldname' => 'dateline',
376
 
377
  /** User Section ******************************************************/
378
 
379
+ // Store old User id (Stored in usermeta)
380
  $this->field_map[] = array(
381
  'from_tablename' => 'user',
382
  'from_fieldname' => 'userid',
384
  'to_fieldname' => '_bbp_user_id'
385
  );
386
 
387
+ // Store old User password (Stored in usermeta serialized with salt)
388
  $this->field_map[] = array(
389
  'from_tablename' => 'user',
390
  'from_fieldname' => 'password',
393
  'callback_method' => 'callback_savepass'
394
  );
395
 
396
+ // Store old User Salt (This is only used for the SELECT row info for the above password save)
 
397
  $this->field_map[] = array(
398
  'from_tablename' => 'user',
399
  'from_fieldname' => 'salt',
401
  'to_fieldname' => ''
402
  );
403
 
404
+ // User password verify class (Stored in usermeta for verifying password)
405
  $this->field_map[] = array(
406
  'to_type' => 'user',
407
  'to_fieldname' => '_bbp_class',
416
  'to_fieldname' => 'user_login'
417
  );
418
 
 
 
 
 
 
 
 
 
419
  // User email.
420
  $this->field_map[] = array(
421
  'from_tablename' => 'user',
441
  'callback_method' => 'callback_datetime'
442
  );
443
 
444
+ // User AIM (Stored in usermeta)
445
  $this->field_map[] = array(
446
  'from_tablename' => 'user',
447
  'from_fieldname' => 'aim',
449
  'to_fieldname' => 'aim'
450
  );
451
 
452
+ // User Yahoo (Stored in usermeta)
453
  $this->field_map[] = array(
454
  'from_tablename' => 'user',
455
  'from_fieldname' => 'yahoo',
456
  'to_type' => 'user',
457
  'to_fieldname' => 'yim'
458
  );
459
+
460
+ // User ICQ (Stored in usermeta)
461
+ $this->field_map[] = array(
462
+ 'from_tablename' => 'user',
463
+ 'from_fieldname' => 'icq',
464
+ 'to_type' => 'user',
465
+ 'to_fieldname' => '_bbp_vbulletin_user_icq'
466
+ );
467
+
468
+ // User MSN (Stored in usermeta)
469
+ $this->field_map[] = array(
470
+ 'from_tablename' => 'user',
471
+ 'from_fieldname' => 'msn',
472
+ 'to_type' => 'user',
473
+ 'to_fieldname' => '_bbp_vbulletin_user_msn'
474
+ );
475
+
476
+ // User Skype (Stored in usermeta)
477
+ $this->field_map[] = array(
478
+ 'from_tablename' => 'user',
479
+ 'from_fieldname' => 'skype',
480
+ 'to_type' => 'user',
481
+ 'to_fieldname' => '_bbp_vbulletin_user_skype'
482
+ );
483
  }
484
 
485
  /**
490
  return '';
491
  }
492
 
493
+
494
  /**
495
  * This method is to save the salt and password together. That
496
  * way when we authenticate it we can get it out of the database
504
  /**
505
  * This method is to take the pass out of the database and compare
506
  * to a pass the user has typed in.
507
+ *
508
+ * vBulletin passwords do not work. Maybe use the below plugin's approach?
509
+ *
510
+ * @link http://wordpress.org/extend/plugins/vb-user-copy/
511
+ * @link http://plugins.trac.wordpress.org/browser/vb-user-copy/trunk/vb_user_copy.php
512
  */
513
  public function authenticate_pass( $password, $serialized_pass ) {
514
  $pass_array = unserialize( $serialized_pass );
515
  return ( $pass_array['hash'] == md5( md5( $password ) . $pass_array['salt'] ) );
516
  }
517
+
518
+ /**
519
+ * Verify the topic reply count.
520
+ *
521
+ * @param int $count vBulletin v4.x reply count
522
+ * @return string WordPress safe
523
+ */
524
+ public function callback_topic_reply_count( $count = 1 ) {
525
+ $count = absint( (int) $count - 1 );
526
+ return $count;
527
+ }
528
+
529
+ /**
530
+ * Set the reply title
531
+ *
532
+ * @param string $title vBulletin v4.x topic title of this reply
533
+ * @return string Prefixed topic title, or empty string
534
+ */
535
+ public function callback_reply_title( $title = '' ) {
536
+ $title = !empty( $title ) ? __( 'Re: ', 'bbpress' ) . html_entity_decode( $title ) : '';
537
+ return $title;
538
+ }
539
+
540
+ /**
541
+ * Translate the post status from vBulletin numeric's to WordPress's strings.
542
+ *
543
+ * @param int $status vBulletin v4.x numeric topic status
544
+ * @return string WordPress safe
545
+ */
546
+ public function callback_topic_status( $status = 1 ) {
547
+ switch ( $status ) {
548
+ case 0 :
549
+ $status = 'closed';
550
+ break;
551
+
552
+ case 1 :
553
+ default :
554
+ $status = 'publish';
555
+ break;
556
+ }
557
+ return $status;
558
+ }
559
+
560
+ /**
561
+ * This callback processes any custom parser.php attributes and custom code with preg_replace
562
+ */
563
+ protected function callback_html( $field ) {
564
+
565
+ // Strips vBulletin custom HTML first from $field before parsing $field to parser.php
566
+ $vbulletin_markup = $field;
567
+ $vbulletin_markup = html_entity_decode( $vbulletin_markup );
568
+
569
+ // Replace '[QUOTE]' with '<blockquote>'
570
+ $vbulletin_markup = preg_replace( '/\[QUOTE\]/', '<blockquote>', $vbulletin_markup );
571
+ // Replace '[QUOTE=User Name($1);PostID($2)]' with '<em>@$1 $2 wrote:</em><blockquote>"
572
+ $vbulletin_markup = preg_replace( '/\[QUOTE=(.*?);(.*?)\]/' , '<em>@$1 $2 wrote:</em><blockquote>', $vbulletin_markup );
573
+ // Replace '[/QUOTE]' with '</blockquote>'
574
+ $vbulletin_markup = preg_replace( '/\[\/QUOTE\]/', '</blockquote>', $vbulletin_markup );
575
+ // Replace '[MENTION=###($1)]User Name($2)[/MENTION]' with '@$2"
576
+ $vbulletin_markup = preg_replace( '/\[MENTION=(.*?)\](.*?)\[\/MENTION\]/', '@$2', $vbulletin_markup );
577
+
578
+ // Replace '[video=youtube;$1]$2[/video]' with '$2"
579
+ $vbulletin_markup = preg_replace( '/\[video\=youtube;(.*?)\](.*?)\[\/video\]/', '$2', $vbulletin_markup );
580
+
581
+ // Now that vBulletin custom HTML has been stripped put the cleaned HTML back in $field
582
+ $field = $vbulletin_markup;
583
+
584
+ // Parse out any bbCodes in $field with the BBCode 'parser.php'
585
+ require_once( bbpress()->admin->admin_dir . 'parser.php' );
586
+ $bbcode = BBCode::getInstance();
587
+ $bbcode->enable_smileys = false;
588
+ $bbcode->smiley_regex = false;
589
+ return html_entity_decode( $bbcode->Parse( $field ) );
590
+ }
591
  }
includes/admin/metaboxes.php CHANGED
@@ -34,8 +34,8 @@
34
  */
35
  function bbp_dashboard_widget_right_now() {
36
 
37
- // Get the statistics and extract them
38
- extract( bbp_get_statistics(), EXTR_SKIP ); ?>
39
 
40
  <div class="table table_content">
41
 
@@ -46,8 +46,8 @@ function bbp_dashboard_widget_right_now() {
46
  <tr class="first">
47
 
48
  <?php
49
- $num = $forum_count;
50
- $text = _n( 'Forum', 'Forums', $forum_count, 'bbpress' );
51
  if ( current_user_can( 'publish_forums' ) ) {
52
  $link = add_query_arg( array( 'post_type' => bbp_get_forum_post_type() ), get_admin_url( null, 'edit.php' ) );
53
  $num = '<a href="' . $link . '">' . $num . '</a>';
@@ -63,8 +63,8 @@ function bbp_dashboard_widget_right_now() {
63
  <tr>
64
 
65
  <?php
66
- $num = $topic_count;
67
- $text = _n( 'Topic', 'Topics', $topic_count, 'bbpress' );
68
  if ( current_user_can( 'publish_topics' ) ) {
69
  $link = add_query_arg( array( 'post_type' => bbp_get_topic_post_type() ), get_admin_url( null, 'edit.php' ) );
70
  $num = '<a href="' . $link . '">' . $num . '</a>';
@@ -80,8 +80,8 @@ function bbp_dashboard_widget_right_now() {
80
  <tr>
81
 
82
  <?php
83
- $num = $reply_count;
84
- $text = _n( 'Reply', 'Replies', $reply_count, 'bbpress' );
85
  if ( current_user_can( 'publish_replies' ) ) {
86
  $link = add_query_arg( array( 'post_type' => bbp_get_reply_post_type() ), get_admin_url( null, 'edit.php' ) );
87
  $num = '<a href="' . $link . '">' . $num . '</a>';
@@ -99,8 +99,8 @@ function bbp_dashboard_widget_right_now() {
99
  <tr>
100
 
101
  <?php
102
- $num = $topic_tag_count;
103
- $text = _n( 'Topic Tag', 'Topic Tags', $topic_tag_count, 'bbpress' );
104
  if ( current_user_can( 'manage_topic_tags' ) ) {
105
  $link = add_query_arg( array( 'taxonomy' => bbp_get_topic_tag_tax_id(), 'post_type' => bbp_get_topic_post_type() ), get_admin_url( null, 'edit-tags.php' ) );
106
  $num = '<a href="' . $link . '">' . $num . '</a>';
@@ -131,8 +131,8 @@ function bbp_dashboard_widget_right_now() {
131
  <tr class="first">
132
 
133
  <?php
134
- $num = $user_count;
135
- $text = _n( 'User', 'Users', $user_count, 'bbpress' );
136
  if ( current_user_can( 'edit_users' ) ) {
137
  $link = get_admin_url( null, 'users.php' );
138
  $num = '<a href="' . $link . '">' . $num . '</a>';
@@ -145,19 +145,19 @@ function bbp_dashboard_widget_right_now() {
145
 
146
  </tr>
147
 
148
- <?php if ( isset( $topic_count_hidden ) ) : ?>
149
 
150
  <tr>
151
 
152
  <?php
153
- $num = $topic_count_hidden;
154
- $text = _n( 'Hidden Topic', 'Hidden Topics', $topic_count_hidden, 'bbpress' );
155
  $link = add_query_arg( array( 'post_type' => bbp_get_topic_post_type() ), get_admin_url( null, 'edit.php' ) );
156
  if ( '0' != $num ) {
157
  $link = add_query_arg( array( 'post_status' => bbp_get_spam_status_id() ), $link );
158
  }
159
- $num = '<a href="' . $link . '" title="' . esc_attr( $hidden_topic_title ) . '">' . $num . '</a>';
160
- $text = '<a class="waiting" href="' . $link . '" title="' . esc_attr( $hidden_topic_title ) . '">' . $text . '</a>';
161
  ?>
162
 
163
  <td class="b b-hidden-topics"><?php echo $num; ?></td>
@@ -167,19 +167,19 @@ function bbp_dashboard_widget_right_now() {
167
 
168
  <?php endif; ?>
169
 
170
- <?php if ( isset( $reply_count_hidden ) ) : ?>
171
 
172
  <tr>
173
 
174
  <?php
175
- $num = $reply_count_hidden;
176
- $text = _n( 'Hidden Reply', 'Hidden Replies', $reply_count_hidden, 'bbpress' );
177
  $link = add_query_arg( array( 'post_type' => bbp_get_reply_post_type() ), get_admin_url( null, 'edit.php' ) );
178
  if ( '0' != $num ) {
179
  $link = add_query_arg( array( 'post_status' => bbp_get_spam_status_id() ), $link );
180
  }
181
- $num = '<a href="' . $link . '" title="' . esc_attr( $hidden_reply_title ) . '">' . $num . '</a>';
182
- $text = '<a class="waiting" href="' . $link . '" title="' . esc_attr( $hidden_reply_title ) . '">' . $text . '</a>';
183
  ?>
184
 
185
  <td class="b b-hidden-replies"><?php echo $num; ?></td>
@@ -189,13 +189,13 @@ function bbp_dashboard_widget_right_now() {
189
 
190
  <?php endif; ?>
191
 
192
- <?php if ( bbp_allow_topic_tags() && isset( $empty_topic_tag_count ) ) : ?>
193
 
194
  <tr>
195
 
196
  <?php
197
- $num = $empty_topic_tag_count;
198
- $text = _n( 'Empty Topic Tag', 'Empty Topic Tags', $empty_topic_tag_count, 'bbpress' );
199
  $link = add_query_arg( array( 'taxonomy' => bbp_get_topic_tag_tax_id(), 'post_type' => bbp_get_topic_post_type() ), get_admin_url( null, 'edit-tags.php' ) );
200
  $num = '<a href="' . $link . '">' . $num . '</a>';
201
  $text = '<a class="waiting" href="' . $link . '">' . $text . '</a>';
@@ -301,7 +301,7 @@ function bbp_forum_metabox() {
301
  <?php bbp_dropdown( array(
302
  'post_type' => bbp_get_forum_post_type(),
303
  'selected' => $post_parent,
304
- 'child_of' => '0',
305
  'numberposts' => -1,
306
  'orderby' => 'title',
307
  'order' => 'ASC',
@@ -359,7 +359,7 @@ function bbp_topic_metabox() {
359
  <?php bbp_dropdown( array(
360
  'post_type' => bbp_get_forum_post_type(),
361
  'selected' => bbp_get_topic_forum_id( $post_id ),
362
- 'child_of' => '0',
363
  'numberposts' => -1,
364
  'orderby' => 'title',
365
  'order' => 'ASC',
@@ -412,7 +412,7 @@ function bbp_reply_metabox() {
412
  <?php bbp_dropdown( array(
413
  'post_type' => bbp_get_forum_post_type(),
414
  'selected' => $reply_forum_id,
415
- 'child_of' => '0',
416
  'numberposts' => -1,
417
  'orderby' => 'title',
418
  'order' => 'ASC',
34
  */
35
  function bbp_dashboard_widget_right_now() {
36
 
37
+ // Get the statistics
38
+ $r = bbp_get_statistics(); ?>
39
 
40
  <div class="table table_content">
41
 
46
  <tr class="first">
47
 
48
  <?php
49
+ $num = $r['forum_count'];
50
+ $text = _n( 'Forum', 'Forums', $r['forum_count'], 'bbpress' );
51
  if ( current_user_can( 'publish_forums' ) ) {
52
  $link = add_query_arg( array( 'post_type' => bbp_get_forum_post_type() ), get_admin_url( null, 'edit.php' ) );
53
  $num = '<a href="' . $link . '">' . $num . '</a>';
63
  <tr>
64
 
65
  <?php
66
+ $num = $r['topic_count'];
67
+ $text = _n( 'Topic', 'Topics', $r['topic_count'], 'bbpress' );
68
  if ( current_user_can( 'publish_topics' ) ) {
69
  $link = add_query_arg( array( 'post_type' => bbp_get_topic_post_type() ), get_admin_url( null, 'edit.php' ) );
70
  $num = '<a href="' . $link . '">' . $num . '</a>';
80
  <tr>
81
 
82
  <?php
83
+ $num = $r['reply_count'];
84
+ $text = _n( 'Reply', 'Replies', $r['reply_count'], 'bbpress' );
85
  if ( current_user_can( 'publish_replies' ) ) {
86
  $link = add_query_arg( array( 'post_type' => bbp_get_reply_post_type() ), get_admin_url( null, 'edit.php' ) );
87
  $num = '<a href="' . $link . '">' . $num . '</a>';
99
  <tr>
100
 
101
  <?php
102
+ $num = $r['topic_tag_count'];
103
+ $text = _n( 'Topic Tag', 'Topic Tags', $r['topic_tag_count'], 'bbpress' );
104
  if ( current_user_can( 'manage_topic_tags' ) ) {
105
  $link = add_query_arg( array( 'taxonomy' => bbp_get_topic_tag_tax_id(), 'post_type' => bbp_get_topic_post_type() ), get_admin_url( null, 'edit-tags.php' ) );
106
  $num = '<a href="' . $link . '">' . $num . '</a>';
131
  <tr class="first">
132
 
133
  <?php
134
+ $num = $r['user_count'];
135
+ $text = _n( 'User', 'Users', $r['user_count'], 'bbpress' );
136
  if ( current_user_can( 'edit_users' ) ) {
137
  $link = get_admin_url( null, 'users.php' );
138
  $num = '<a href="' . $link . '">' . $num . '</a>';
145
 
146
  </tr>
147
 
148
+ <?php if ( isset( $r['topic_count_hidden'] ) ) : ?>
149
 
150
  <tr>
151
 
152
  <?php
153
+ $num = $r['topic_count_hidden'];
154
+ $text = _n( 'Hidden Topic', 'Hidden Topics', $r['topic_count_hidden'], 'bbpress' );
155
  $link = add_query_arg( array( 'post_type' => bbp_get_topic_post_type() ), get_admin_url( null, 'edit.php' ) );
156
  if ( '0' != $num ) {
157
  $link = add_query_arg( array( 'post_status' => bbp_get_spam_status_id() ), $link );
158
  }
159
+ $num = '<a href="' . $link . '" title="' . esc_attr( $r['hidden_topic_title'] ) . '">' . $num . '</a>';
160
+ $text = '<a class="waiting" href="' . $link . '" title="' . esc_attr( $r['hidden_topic_title'] ) . '">' . $text . '</a>';
161
  ?>
162
 
163
  <td class="b b-hidden-topics"><?php echo $num; ?></td>
167
 
168
  <?php endif; ?>
169
 
170
+ <?php if ( isset( $r['reply_count_hidden'] ) ) : ?>
171
 
172
  <tr>
173
 
174
  <?php
175
+ $num = $r['reply_count_hidden'];
176
+ $text = _n( 'Hidden Reply', 'Hidden Replies', $r['reply_count_hidden'], 'bbpress' );
177
  $link = add_query_arg( array( 'post_type' => bbp_get_reply_post_type() ), get_admin_url( null, 'edit.php' ) );
178
  if ( '0' != $num ) {
179
  $link = add_query_arg( array( 'post_status' => bbp_get_spam_status_id() ), $link );
180
  }
181
+ $num = '<a href="' . $link . '" title="' . esc_attr( $r['hidden_reply_title'] ) . '">' . $num . '</a>';
182
+ $text = '<a class="waiting" href="' . $link . '" title="' . esc_attr( $r['hidden_reply_title'] ) . '">' . $text . '</a>';
183
  ?>
184
 
185
  <td class="b b-hidden-replies"><?php echo $num; ?></td>
189
 
190
  <?php endif; ?>
191
 
192
+ <?php if ( bbp_allow_topic_tags() && isset( $r['empty_topic_tag_count'] ) ) : ?>
193
 
194
  <tr>
195
 
196
  <?php
197
+ $num = $r['empty_topic_tag_count'];
198
+ $text = _n( 'Empty Topic Tag', 'Empty Topic Tags', $r['empty_topic_tag_count'], 'bbpress' );
199
  $link = add_query_arg( array( 'taxonomy' => bbp_get_topic_tag_tax_id(), 'post_type' => bbp_get_topic_post_type() ), get_admin_url( null, 'edit-tags.php' ) );
200
  $num = '<a href="' . $link . '">' . $num . '</a>';
201
  $text = '<a class="waiting" href="' . $link . '">' . $text . '</a>';
301
  <?php bbp_dropdown( array(
302
  'post_type' => bbp_get_forum_post_type(),
303
  'selected' => $post_parent,
304
+ 'post_parent' => 0,
305
  'numberposts' => -1,
306
  'orderby' => 'title',
307
  'order' => 'ASC',
359
  <?php bbp_dropdown( array(
360
  'post_type' => bbp_get_forum_post_type(),
361
  'selected' => bbp_get_topic_forum_id( $post_id ),
362
+ 'post_parent' => 0,
363
  'numberposts' => -1,
364
  'orderby' => 'title',
365
  'order' => 'ASC',
412
  <?php bbp_dropdown( array(
413
  'post_type' => bbp_get_forum_post_type(),
414
  'selected' => $reply_forum_id,
415
+ 'post_parent' => 0,
416
  'numberposts' => -1,
417
  'orderby' => 'title',
418
  'order' => 'ASC',
includes/admin/settings.php CHANGED
@@ -299,6 +299,14 @@ function bbp_admin_get_settings_fields() {
299
  'callback' => 'bbp_admin_setting_callback_view_slug',
300
  'sanitize_callback' => 'sanitize_title',
301
  'args' => array()
 
 
 
 
 
 
 
 
302
  )
303
  ),
304
 
@@ -494,7 +502,7 @@ function bbp_admin_setting_callback_anonymous() {
494
  function bbp_admin_setting_callback_global_access() {
495
  ?>
496
 
497
- <input id="_bbp_allow_global_access" name="_bbp_allow_global_access" type="checkbox" id="_bbp_allow_global_access" value="1" <?php checked( bbp_allow_global_access( false ) ); bbp_maybe_admin_setting_disabled( '_bbp_allow_global_access' ); ?> />
498
  <label for="_bbp_allow_global_access"><?php _e( 'Automatically assign default role to new, registered users upon visiting the site.', 'bbpress' ); ?></label>
499
 
500
  <?php
@@ -883,6 +891,23 @@ function bbp_admin_setting_callback_view_slug() {
883
  bbp_form_slug_conflict_check( '_bbp_view_slug', 'view' );
884
  }
885
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
886
  /** BuddyPress ****************************************************************/
887
 
888
  /**
299
  'callback' => 'bbp_admin_setting_callback_view_slug',
300
  'sanitize_callback' => 'sanitize_title',
301
  'args' => array()
302
+ ),
303
+
304
+ // Search slug setting
305
+ '_bbp_search_slug' => array(
306
+ 'title' => __( 'Search slug', 'bbpress' ),
307
+ 'callback' => 'bbp_admin_setting_callback_search_slug',
308
+ 'sanitize_callback' => 'sanitize_title',
309
+ 'args' => array()
310
  )
311
  ),
312
 
502
  function bbp_admin_setting_callback_global_access() {
503
  ?>
504
 
505
+ <input id="_bbp_allow_global_access" name="_bbp_allow_global_access" type="checkbox" id="_bbp_allow_global_access" value="1" <?php checked( bbp_allow_global_access( true ) ); bbp_maybe_admin_setting_disabled( '_bbp_allow_global_access' ); ?> />
506
  <label for="_bbp_allow_global_access"><?php _e( 'Automatically assign default role to new, registered users upon visiting the site.', 'bbpress' ); ?></label>
507
 
508
  <?php
891
  bbp_form_slug_conflict_check( '_bbp_view_slug', 'view' );
892
  }
893
 
894
+ /**
895
+ * Search slug setting field
896
+ *
897
+ * @since bbPress (r4579)
898
+ *
899
+ * @uses bbp_form_option() To output the option value
900
+ */
901
+ function bbp_admin_setting_callback_search_slug() {
902
+ ?>
903
+
904
+ <input name="_bbp_search_slug" type="text" id="_bbp_search_slug" class="regular-text code" value="<?php bbp_form_option( '_bbp_search_slug', 'search', true ); ?>"<?php bbp_maybe_admin_setting_disabled( '_bbp_search_slug' ); ?> />
905
+
906
+ <?php
907
+ // Slug Check
908
+ bbp_form_slug_conflict_check( '_bbp_search_slug', 'search' );
909
+ }
910
+
911
  /** BuddyPress ****************************************************************/
912
 
913
  /**
includes/admin/tools.php CHANGED
@@ -161,17 +161,18 @@ function bbp_admin_repair_list() {
161
  5 => array( 'bbp-sync-forum-meta', __( 'Recalculate the parent forum for each post', 'bbpress' ), 'bbp_admin_repair_forum_meta' ),
162
  10 => array( 'bbp-sync-forum-visibility', __( 'Recalculate private and hidden forums', 'bbpress' ), 'bbp_admin_repair_forum_visibility' ),
163
  15 => array( 'bbp-sync-all-topics-forums', __( 'Recalculate last activity in each topic and forum', 'bbpress' ), 'bbp_admin_repair_freshness' ),
164
- 20 => array( 'bbp-group-forums', __( 'Repair BuddyPress Group Forum relationships', 'bbpress' ), 'bbp_admin_repair_group_forum_relationship' ),
165
- 25 => array( 'bbp-forum-topics', __( 'Count topics in each forum', 'bbpress' ), 'bbp_admin_repair_forum_topic_count' ),
166
- 30 => array( 'bbp-forum-replies', __( 'Count replies in each forum', 'bbpress' ), 'bbp_admin_repair_forum_reply_count' ),
167
- 35 => array( 'bbp-topic-replies', __( 'Count replies in each topic', 'bbpress' ), 'bbp_admin_repair_topic_reply_count' ),
168
- 40 => array( 'bbp-topic-voices', __( 'Count voices in each topic', 'bbpress' ), 'bbp_admin_repair_topic_voice_count' ),
169
- 45 => array( 'bbp-topic-hidden-replies', __( 'Count spammed & trashed replies in each topic', 'bbpress' ), 'bbp_admin_repair_topic_hidden_reply_count' ),
170
- 50 => array( 'bbp-user-replies', __( 'Count topics for each user', 'bbpress' ), 'bbp_admin_repair_user_topic_count' ),
171
- 55 => array( 'bbp-user-topics', __( 'Count replies for each user', 'bbpress' ), 'bbp_admin_repair_user_reply_count' ),
172
- 60 => array( 'bbp-user-favorites', __( 'Remove trashed topics from user favorites', 'bbpress' ), 'bbp_admin_repair_user_favorites' ),
173
- 65 => array( 'bbp-user-subscriptions', __( 'Remove trashed topics from user subscriptions', 'bbpress' ), 'bbp_admin_repair_user_subscriptions' ),
174
- 70 => array( 'bbp-user-role-map', __( 'Remap existing users to default forum roles', 'bbpress' ), 'bbp_admin_repair_user_roles' )
 
175
  );
176
  ksort( $repair_list );
177
 
@@ -304,10 +305,12 @@ function bbp_admin_repair_group_forum_relationship() {
304
  $statement = __( 'Repairing BuddyPress group-forum relationships&hellip; %s', 'bbpress' );
305
  $g_count = 0;
306
  $f_count = 0;
 
307
 
308
  // Copy the BuddyPress filter here, incase BuddyPress is not active
309
- $prefix = apply_filters( 'bp_core_get_table_prefix', $wpdb->base_prefix );
310
- $tablename = $prefix . 'bp_groups_groupmeta';
 
311
 
312
  // Get the converted forum IDs
313
  $forum_ids = $wpdb->query( "SELECT `forum`.`ID`, `forummeta`.`meta_value`
@@ -333,17 +336,45 @@ function bbp_admin_repair_group_forum_relationship() {
333
  continue;
334
 
335
  // Attempt to update group meta
336
- $updated = $wpdb->query( "UPDATE `{$tablename}` SET `meta_value` = '{$group_forums->ID}' WHERE `meta_key` = 'forum_id' AND `meta_value` = '{$group_forums->meta_value}';" );
337
 
338
  // Bump the count
339
  if ( !empty( $updated ) && ! is_wp_error( $updated ) ) {
340
  ++$g_count;
341
  }
342
 
343
- // Update group's forum metadata
344
- $group_id = (int) $wpdb->get_var( "SELECT `group_id` FROM `{$tablename}` WHERE `meta_key` = 'forum_id' AND `meta_value` = '{$group_forums->ID}';" );
345
  if ( !empty( $group_id ) ) {
 
 
346
  update_post_meta( $group_forums->ID, '_bbp_group_ids', array( $group_id ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
347
  ++$f_count;
348
  }
349
  }
@@ -380,7 +411,7 @@ function bbp_admin_repair_group_forum_relationship() {
380
  update_option( '_bbp_group_forums_root_id', $posts[0]->ID );
381
  }
382
 
383
- // Remove bbPress 1.1 roles (BuddyPress)
384
  remove_role( 'member' );
385
  remove_role( 'inactive' );
386
  remove_role( 'blocked' );
@@ -388,7 +419,7 @@ function bbp_admin_repair_group_forum_relationship() {
388
  remove_role( 'keymaster' );
389
 
390
  // Complete results
391
- $result = sprintf( __( 'Complete! %s groups updated; %s forums updated.', 'bbpress' ), bbp_number_format( $g_count ), bbp_number_format( $f_count ) );
392
  return array( 0, sprintf( $statement, $result ) );
393
  }
394
 
@@ -704,7 +735,7 @@ function bbp_admin_repair_user_roles() {
704
 
705
  // If no role map exists, give the default forum role (bbp-participant)
706
  $new_role = isset( $role_map[$role] ) ? $role_map[$role] : $default_role;
707
-
708
  // Get users of this site, limited to 1000
709
  while ( $users = get_users( array(
710
  'role' => $role,
@@ -835,6 +866,63 @@ function bbp_admin_repair_freshness() {
835
  return array( 0, sprintf( $statement, __( 'Complete!', 'bbpress' ) ) );
836
  }
837
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
838
  /**
839
  * Recaches the private and hidden forums
840
  *
@@ -1091,7 +1179,10 @@ function bbp_admin_reset_handler() {
1091
 
1092
  /** Topic Tags ********************************************************/
1093
 
1094
- // @todo
 
 
 
1095
 
1096
  /** User Meta *********************************************************/
1097
 
161
  5 => array( 'bbp-sync-forum-meta', __( 'Recalculate the parent forum for each post', 'bbpress' ), 'bbp_admin_repair_forum_meta' ),
162
  10 => array( 'bbp-sync-forum-visibility', __( 'Recalculate private and hidden forums', 'bbpress' ), 'bbp_admin_repair_forum_visibility' ),
163
  15 => array( 'bbp-sync-all-topics-forums', __( 'Recalculate last activity in each topic and forum', 'bbpress' ), 'bbp_admin_repair_freshness' ),
164
+ 20 => array( 'bbp-sync-all-topics-sticky', __( 'Recalculate the sticky replationship of each topic', 'bbpress' ), 'bbp_admin_repair_sticky' ),
165
+ 25 => array( 'bbp-group-forums', __( 'Repair BuddyPress Group Forum relationships', 'bbpress' ), 'bbp_admin_repair_group_forum_relationship' ),
166
+ 30 => array( 'bbp-forum-topics', __( 'Count topics in each forum', 'bbpress' ), 'bbp_admin_repair_forum_topic_count' ),
167
+ 35 => array( 'bbp-forum-replies', __( 'Count replies in each forum', 'bbpress' ), 'bbp_admin_repair_forum_reply_count' ),
168
+ 40 => array( 'bbp-topic-replies', __( 'Count replies in each topic', 'bbpress' ), 'bbp_admin_repair_topic_reply_count' ),
169
+ 45 => array( 'bbp-topic-voices', __( 'Count voices in each topic', 'bbpress' ), 'bbp_admin_repair_topic_voice_count' ),
170
+ 50 => array( 'bbp-topic-hidden-replies', __( 'Count spammed & trashed replies in each topic', 'bbpress' ), 'bbp_admin_repair_topic_hidden_reply_count' ),
171
+ 55 => array( 'bbp-user-topics', __( 'Count topics for each user', 'bbpress' ), 'bbp_admin_repair_user_topic_count' ),
172
+ 60 => array( 'bbp-user-replies', __( 'Count replies for each user', 'bbpress' ), 'bbp_admin_repair_user_reply_count' ),
173
+ 65 => array( 'bbp-user-favorites', __( 'Remove trashed topics from user favorites', 'bbpress' ), 'bbp_admin_repair_user_favorites' ),
174
+ 70 => array( 'bbp-user-subscriptions', __( 'Remove trashed topics from user subscriptions', 'bbpress' ), 'bbp_admin_repair_user_subscriptions' ),
175
+ 75 => array( 'bbp-user-role-map', __( 'Remap existing users to default forum roles', 'bbpress' ), 'bbp_admin_repair_user_roles' )
176
  );
177
  ksort( $repair_list );
178
 
305
  $statement = __( 'Repairing BuddyPress group-forum relationships&hellip; %s', 'bbpress' );
306
  $g_count = 0;
307
  $f_count = 0;
308
+ $s_count = 0;
309
 
310
  // Copy the BuddyPress filter here, incase BuddyPress is not active
311
+ $prefix = apply_filters( 'bp_core_get_table_prefix', $wpdb->base_prefix );
312
+ $groups_table = $prefix . 'bp_groups';
313
+ $groups_meta_table = $prefix . 'bp_groups_groupmeta';
314
 
315
  // Get the converted forum IDs
316
  $forum_ids = $wpdb->query( "SELECT `forum`.`ID`, `forummeta`.`meta_value`
336
  continue;
337
 
338
  // Attempt to update group meta
339
+ $updated = $wpdb->query( "UPDATE `{$groups_meta_table}` SET `meta_value` = '{$group_forums->ID}' WHERE `meta_key` = 'forum_id' AND `meta_value` = '{$group_forums->meta_value}';" );
340
 
341
  // Bump the count
342
  if ( !empty( $updated ) && ! is_wp_error( $updated ) ) {
343
  ++$g_count;
344
  }
345
 
346
+ // Update group to forum relationship data
347
+ $group_id = (int) $wpdb->get_var( "SELECT `group_id` FROM `{$groups_meta_table}` WHERE `meta_key` = 'forum_id' AND `meta_value` = '{$group_forums->ID}';" );
348
  if ( !empty( $group_id ) ) {
349
+
350
+ // Update the group to forum meta connection in forums
351
  update_post_meta( $group_forums->ID, '_bbp_group_ids', array( $group_id ) );
352
+
353
+ // Get the group status
354
+ $group_status = $wpdb->get_var( "SELECT `status` FROM `{$groups_table}` WHERE `id` = '{$group_id}';" );
355
+
356
+ // Sync up forum visibility based on group status
357
+ switch ( $group_status ) {
358
+
359
+ // Public groups have public forums
360
+ case 'public' :
361
+ bbp_publicize_forum( $group_forums->ID );
362
+
363
+ // Bump the count for output later
364
+ ++$s_count;
365
+ break;
366
+
367
+ // Private/hidden groups have hidden forums
368
+ case 'private' :
369
+ case 'hidden' :
370
+ bbp_hide_forum( $group_forums->ID );
371
+
372
+ // Bump the count for output later
373
+ ++$s_count;
374
+ break;
375
+ }
376
+
377
+ // Bump the count for output later
378
  ++$f_count;
379
  }
380
  }
411
  update_option( '_bbp_group_forums_root_id', $posts[0]->ID );
412
  }
413
 
414
+ // Remove old bbPress 1.1 roles (BuddyPress)
415
  remove_role( 'member' );
416
  remove_role( 'inactive' );
417
  remove_role( 'blocked' );
419
  remove_role( 'keymaster' );
420
 
421
  // Complete results
422
+ $result = sprintf( __( 'Complete! %s groups updated; %s forums updated; %s forum statuses synced.', 'bbpress' ), bbp_number_format( $g_count ), bbp_number_format( $f_count ), bbp_number_format( $s_count ) );
423
  return array( 0, sprintf( $statement, $result ) );
424
  }
425
 
735
 
736
  // If no role map exists, give the default forum role (bbp-participant)
737
  $new_role = isset( $role_map[$role] ) ? $role_map[$role] : $default_role;
738
+
739
  // Get users of this site, limited to 1000
740
  while ( $users = get_users( array(
741
  'role' => $role,
866
  return array( 0, sprintf( $statement, __( 'Complete!', 'bbpress' ) ) );
867
  }
868
 
869
+ /**
870
+ * Repairs the relationship of sticky topics to the actual parent forum
871
+ *
872
+ * @since bbPress (r4695)
873
+ *
874
+ * @uses wpdb::get_col() To run our recount sql queries
875
+ * @uses is_wp_error() To check if the executed query returned {@link WP_Error}
876
+ * @return array An array of the status code and the message
877
+ */
878
+ function bbp_admin_repair_sticky() {
879
+ global $wpdb;
880
+
881
+ $statement = __( 'Repairing the sticky topic to the parent forum relationships&hellip; %s', 'bbpress' );
882
+ $result = __( 'Failed!', 'bbpress' );
883
+ $forums = $wpdb->get_col( "SELECT ID FROM `{$wpdb->posts}` WHERE `post_type` = 'forum';" );
884
+
885
+ // Bail if no forums found
886
+ if ( empty( $forums ) || is_wp_error( $forums ) )
887
+ return array( 1, sprintf( $statement, $result ) );
888
+
889
+ // Loop through forums and get their sticky topics
890
+ foreach ( $forums as $forum ) {
891
+ $forum_stickies[$forum] = get_post_meta( $forum, '_bbp_sticky_topics', true );
892
+ }
893
+
894
+ // Cleanup
895
+ unset( $forums, $forum );
896
+
897
+ // Loop through each forum with sticky topics
898
+ foreach ( $forum_stickies as $forum_id => $stickies ) {
899
+
900
+ // Skip if no stickies
901
+ if ( empty( $stickies ) ) {
902
+ continue;
903
+ }
904
+
905
+ // Loop through each sticky topic
906
+ foreach ( $stickies as $id => $topic_id ) {
907
+
908
+ // If the topic is not a super sticky, and the forum ID does not
909
+ // match the topic's forum ID, unset the forum's sticky meta.
910
+ if ( ! bbp_is_topic_super_sticky( $topic_id ) && $forum_id != bbp_get_topic_forum_id( $topic_id ) ) {
911
+ unset( $forum_stickies[$forum_id][$id] );
912
+ }
913
+ }
914
+
915
+ // Get sticky topic ID's, or use empty string
916
+ $stickers = empty( $forum_stickies[$forum_id] ) ? '' : array_values( $forum_stickies[$forum_id] );
917
+
918
+ // Update the forum's sticky topics meta
919
+ update_post_meta( $forum_id, '_bbp_sticky_topics', $stickers );
920
+ }
921
+
922
+ // Complete results
923
+ return array( 0, sprintf( $statement, __( 'Complete!', 'bbpress' ) ) );
924
+ }
925
+
926
  /**
927
  * Recaches the private and hidden forums
928
  *
1179
 
1180
  /** Topic Tags ********************************************************/
1181
 
1182
+ $statement = __( 'Deleting Topic Tags&hellip; %s', 'bbpress' );
1183
+ $sql_delete = "DELETE a,b,c FROM `{$wpdb->terms}` AS a LEFT JOIN `{$wpdb->term_taxonomy}` AS c ON a.term_id = c.term_id LEFT JOIN `{$wpdb->term_relationships}` AS b ON b.term_taxonomy_id = c.term_taxonomy_id WHERE c.taxonomy = 'topic-tag';";
1184
+ $result = is_wp_error( $wpdb->query( $sql_delete ) ) ? $failed : $success;
1185
+ $messages[] = sprintf( $statement, $result );
1186
 
1187
  /** User Meta *********************************************************/
1188
 
includes/admin/users.php CHANGED
@@ -139,13 +139,9 @@ class BBP_Users_Admin {
139
  <select name="bbp-new-role" id="bbp-new-role" style="display:inline-block; float:none;">
140
  <option value=''><?php _e( 'Change forum role to&hellip;', 'bbpress' ) ?></option>
141
  <?php foreach ( $dynamic_roles as $role => $details ) : ?>
142
-
143
  <option value="<?php echo esc_attr( $role ); ?>"><?php echo translate_user_role( $details['name'] ); ?></option>
144
-
145
  <?php endforeach; ?>
146
- </select>
147
-
148
- <?php submit_button( __( 'Change', 'bbpress' ), 'secondary', 'bbp-change-role', false );
149
  }
150
 
151
  /**
139
  <select name="bbp-new-role" id="bbp-new-role" style="display:inline-block; float:none;">
140
  <option value=''><?php _e( 'Change forum role to&hellip;', 'bbpress' ) ?></option>
141
  <?php foreach ( $dynamic_roles as $role => $details ) : ?>
 
142
  <option value="<?php echo esc_attr( $role ); ?>"><?php echo translate_user_role( $details['name'] ); ?></option>
 
143
  <?php endforeach; ?>
144
+ </select><?php submit_button( __( 'Change', 'bbpress' ), 'secondary', 'bbp-change-role', false );
 
 
145
  }
146
 
147
  /**
includes/common/ajax.php ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * bbPress Common AJAX Functions
5
+ *
6
+ * Common AJAX functions are ones that are used to setup and/or use during
7
+ * bbPress specific, theme-side AJAX requests.
8
+ *
9
+ * @package bbPress
10
+ * @subpackage Ajax
11
+ */
12
+
13
+ // Exit if accessed directly
14
+ if ( !defined( 'ABSPATH' ) ) exit;
15
+
16
+ /**
17
+ * Output the URL to use for theme-side bbPress AJAX requests
18
+ *
19
+ * @since bbPress (r4543)
20
+ *
21
+ * @uses bbp_get_ajax_url() To get the URL to use for AJAX requests
22
+ */
23
+ function bbp_ajax_url() {
24
+ echo bbp_get_ajax_url();
25
+ }
26
+ /**
27
+ * Return the URL to use for theme-side bbPress AJAX requests
28
+ *
29
+ * @since bbPress (r4543)
30
+ *
31
+ * @global WP $wp
32
+ * @return string
33
+ */
34
+ function bbp_get_ajax_url() {
35
+ global $wp;
36
+
37
+ $base_url = home_url( trailingslashit( $wp->request ), ( is_ssl() ? 'https' : 'http' ) );
38
+ $ajaxurl = add_query_arg( array( 'bbp-ajax' => 'true' ), $base_url );
39
+
40
+ return apply_filters( 'bbp_get_ajax_url', $ajaxurl );
41
+ }
42
+
43
+ /**
44
+ * Is this a bbPress AJAX request?
45
+ *
46
+ * @since bbPress (r4543)
47
+ *
48
+ * @return bool Looking for bbp-ajax
49
+ */
50
+ function bbp_is_ajax() {
51
+ return (bool) ( isset( $_GET['bbp-ajax'] ) && ! empty( $_REQUEST['action'] ) );
52
+ }
53
+
54
+ /**
55
+ * Hooked to the 'bbp_template_redirect' action, this is bbPress's custom
56
+ * theme-side ajax handler.
57
+ *
58
+ * @since bbPress (r4543)
59
+ *
60
+ * @return If not a bbPress ajax request
61
+ */
62
+ function bbp_do_ajax() {
63
+
64
+ // Bail if not an ajax request
65
+ if ( ! bbp_is_ajax() )
66
+ return;
67
+
68
+ // Set WordPress core ajax constant
69
+ define( 'DOING_AJAX', true );
70
+
71
+ // Set the header content type
72
+ @header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
73
+
74
+ // Disable content sniffing in browsers that support it
75
+ send_nosniff_header();
76
+
77
+ // Perform custom bbPress ajax
78
+ do_action( 'bbp_ajax_' . $_REQUEST['action'] );
79
+
80
+ // All done
81
+ die( '0' );
82
+ }
83
+
84
+ /**
85
+ * Helper method to return JSON response for the ajax calls
86
+ *
87
+ * @since bbPress (r4542)
88
+ *
89
+ * @param bool $success
90
+ * @param string $content
91
+ * @param array $extras
92
+ */
93
+ function bbp_ajax_response( $success = false, $content = '', $status = -1, $extras = array() ) {
94
+
95
+ // Set status to 200 if setting response as successful
96
+ if ( ( true === $success ) && ( -1 === $status ) )
97
+ $status = 200;
98
+
99
+ // Setup the response array
100
+ $response = array(
101
+ 'success' => $success,
102
+ 'status' => $status,
103
+ 'content' => $content
104
+ );
105
+
106
+ // Merge extra response parameters in
107
+ if ( !empty( $extras ) && is_array( $extras ) ) {
108
+ $response = array_merge( $response, $extras );
109
+ }
110
+
111
+ // Send back the JSON
112
+ @header( 'Content-type: application/json' );
113
+ echo json_encode( $response );
114
+ die();
115
+ }
includes/common/classes.php CHANGED
@@ -173,133 +173,6 @@ class BBP_Component {
173
  endif; // BBP_Component
174
 
175
  if ( class_exists( 'Walker' ) ) :
176
- /**
177
- * Create HTML list of forums.
178
- *
179
- * @package bbPress
180
- * @subpackage Classes
181
- *
182
- * @since bbPress (r2514)
183
- *
184
- * @uses Walker
185
- */
186
- class BBP_Walker_Forum extends Walker {
187
-
188
- /**
189
- * @see Walker::$tree_type
190
- *
191
- * @since bbPress (r2514)
192
- *
193
- * @var string
194
- */
195
- var $tree_type;
196
-
197
- /**
198
- * @see Walker::$db_fields
199
- *
200
- * @since bbPress (r2514)
201
- *
202
- * @var array
203
- */
204
- var $db_fields = array( 'parent' => 'post_parent', 'id' => 'ID' );
205
-
206
- /** Methods ***************************************************************/
207
-
208
- /**
209
- * Set the tree_type
210
- *
211
- * @since bbPress (r2514)
212
- */
213
- public function __construct() {
214
- $this->tree_type = bbp_get_forum_post_type();
215
- }
216
-
217
- /**
218
- * @see Walker::start_lvl()
219
- *
220
- * @since bbPress (r2514)
221
- *
222
- * @param string $output Passed by reference. Used to append additional
223
- * content.
224
- * @param int $depth Depth of page. Used for padding.
225
- */
226
- public function start_lvl( &$output, $depth ) {
227
- $indent = str_repeat( "\t", $depth );
228
- $output .= "\n$indent<ul class='children'>\n";
229
- }
230
-
231
- /**
232
- * @see Walker::end_lvl()
233
- *
234
- * @since bbPress (r2514)
235
- *
236
- * @param string $output Passed by reference. Used to append additional
237
- * content.
238
- * @param int $depth Depth of page. Used for padding.
239
- */
240
- public function end_lvl( &$output, $depth ) {
241
- $indent = str_repeat( "\t", $depth );
242
- $output .= "$indent</ul>\n";
243
- }
244
-
245
- /**
246
- * @see Walker::start_el()
247
- *
248
- * @since bbPress (r2514)
249
- *
250
- * @param string $output Passed by reference. Used to append additional
251
- * content.
252
- * @param object $forum Page data object.
253
- * @param int $depth Depth of page. Used for padding.
254
- * @param int $current_forum Page ID.
255
- * @param array $args
256
- */
257
- public function start_el( &$output, $forum, $depth, $args, $current_forum ) {
258
-
259
- $indent = $depth ? str_repeat( "\t", $depth ) : '';
260
-
261
- extract( $args, EXTR_SKIP );
262
- $css_class = array( 'bbp-forum-item', 'bbp-forum-item-' . $forum->ID );
263
-
264
- if ( !empty( $current_forum ) ) {
265
- $_current_page = bbp_get_forum( $current_forum );
266
-
267
- if ( isset( $_current_page->ancestors ) && in_array( $forum->ID, (array) $_current_page->ancestors ) )
268
- $css_class[] = 'bbp-current-forum-ancestor';
269
-
270
- if ( $forum->ID == $current_forum )
271
- $css_class[] = 'bbp_current_forum_item';
272
- elseif ( $_current_page && $forum->ID == $_current_page->post_parent )
273
- $css_class[] = 'bbp-current-forum-parent';
274
-
275
- } elseif ( $forum->ID == get_option( 'page_for_posts' ) ) {
276
- $css_class[] = 'bbp-current-forum-parent';
277
- }
278
-
279
- $css_class = implode( ' ', apply_filters( 'bbp_forum_css_class', $css_class, $forum ) );
280
- $output .= $indent . '<li class="' . $css_class . '"><a href="' . bbp_get_forum_permalink( $forum->ID ) . '" title="' . esc_attr( wp_strip_all_tags( apply_filters( 'the_title', $forum->post_title, $forum->ID ) ) ) . '">' . $link_before . apply_filters( 'the_title', $forum->post_title, $forum->ID ) . $link_after . '</a>';
281
-
282
- if ( !empty( $show_date ) ) {
283
- $time = ( 'modified' == $show_date ) ? $forum->post_modified : $time = $forum->post_date;
284
- $output .= " " . mysql2date( $date_format, $time );
285
- }
286
- }
287
-
288
- /**
289
- * @see Walker::end_el()
290
- *
291
- * @since bbPress (r2514)
292
- *
293
- * @param string $output Passed by reference. Used to append additional
294
- * content.
295
- * @param object $forum Page data object. Not used.
296
- * @param int $depth Depth of page. Not Used.
297
- */
298
- public function end_el( &$output, $forum, $depth ) {
299
- $output .= "</li>\n";
300
- }
301
- }
302
-
303
  /**
304
  * Create HTML dropdown list of bbPress forums/topics.
305
  *
173
  endif; // BBP_Component
174
 
175
  if ( class_exists( 'Walker' ) ) :
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  /**
177
  * Create HTML dropdown list of bbPress forums/topics.
178
  *
includes/common/formatting.php ADDED
@@ -0,0 +1,263 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * bbPress Formatting
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Formatting
8
+ */
9
+
10
+ // Exit if accessed directly
11
+ if ( !defined( 'ABSPATH' ) ) exit;
12
+
13
+ /** Kses **********************************************************************/
14
+
15
+ /**
16
+ * Custom allowed tags for forum topics and replies
17
+ *
18
+ * Allows all users to post links, quotes, code, formatting, lists, and images
19
+ *
20
+ * @since bbPress (r4603)
21
+ *
22
+ * @return array Associative array of allowed tags and attributes
23
+ */
24
+ function bbp_kses_allowed_tags() {
25
+ return apply_filters( 'bbp_kses_allowed_tags', array(
26
+
27
+ // Links
28
+ 'a' => array(
29
+ 'href' => array(),
30
+ 'title' => array(),
31
+ 'rel' => array()
32
+ ),
33
+
34
+ // Quotes
35
+ 'blockquote' => array(
36
+ 'cite' => array()
37
+ ),
38
+
39
+ // Code
40
+ 'code' => array(),
41
+ 'pre' => array(),
42
+
43
+ // Formatting
44
+ 'em' => array(),
45
+ 'strong' => array(),
46
+ 'del' => array(
47
+ 'datetime' => true,
48
+ ),
49
+
50
+ // Lists
51
+ 'ul' => array(),
52
+ 'ol' => array(
53
+ 'start' => true,
54
+ ),
55
+ 'li' => array(),
56
+
57
+ // Images
58
+ 'img' => array(
59
+ 'src' => true,
60
+ 'border' => true,
61
+ 'alt' => true,
62
+ 'height' => true,
63
+ 'width' => true,
64
+ )
65
+ ) );
66
+ }
67
+
68
+ /**
69
+ * Custom kses filter for forum topics and replies, for filtering incoming data
70
+ *
71
+ * @since bbPress (r4603)
72
+ *
73
+ * @param string $data Content to filter, expected to be escaped with slashes
74
+ * @return string Filtered content
75
+ */
76
+ function bbp_filter_kses( $data = '' ) {
77
+ return addslashes( wp_kses( stripslashes( $data ), bbp_kses_allowed_tags() ) );
78
+ }
79
+
80
+ /**
81
+ * Custom kses filter for forum topics and replies, for raw data
82
+ *
83
+ * @since bbPress (r4603)
84
+ *
85
+ * @param string $data Content to filter, expected to not be escaped
86
+ * @return string Filtered content
87
+ */
88
+ function bbp_kses_data( $data = '' ) {
89
+ return wp_kses( $data , bbp_kses_allowed_tags() );
90
+ }
91
+
92
+ /** Formatting ****************************************************************/
93
+
94
+ /**
95
+ * Filter the topic or reply content and output code and pre tags
96
+ *
97
+ * @since bbPress (r4641)
98
+ *
99
+ * @param string $content Topic and reply content
100
+ * @return string Partially encodedd content
101
+ */
102
+ function bbp_code_trick( $content = '' ) {
103
+ $content = str_replace( array( "\r\n", "\r" ), "\n", $content );
104
+ $content = preg_replace_callback( "|(`)(.*?)`|", 'bbp_encode_callback', $content );
105
+ $content = preg_replace_callback( "!(^|\n)`(.*?)`!s", 'bbp_encode_callback', $content );
106
+
107
+ return $content;
108
+ }
109
+
110
+ /**
111
+ * When editing a topic or reply, reverse the code trick so the textarea
112
+ * contains the correct editable content.
113
+ *
114
+ * @since bbPress (r4641)
115
+ *
116
+ * @param string $content Topic and reply content
117
+ * @return string Partially encodedd content
118
+ */
119
+ function bbp_code_trick_reverse( $content = '' ) {
120
+
121
+ // Setup variables
122
+ $openers = array( '<p>', '<br />' );
123
+ $content = preg_replace_callback( "!(<pre><code>|<code>)(.*?)(</code></pre>|</code>)!s", 'bbp_decode_callback', $content );
124
+
125
+ // Do the do
126
+ $content = str_replace( $openers, '', $content );
127
+ $content = str_replace( '</p>', "\n", $content );
128
+ $content = str_replace( '<coded_br />', '<br />', $content );
129
+ $content = str_replace( '<coded_p>', '<p>', $content );
130
+ $content = str_replace( '</coded_p>', '</p>', $content );
131
+
132
+ return $content;
133
+ }
134
+
135
+ /**
136
+ * Filter the content and encode any bad HTML tags
137
+ *
138
+ * @since bbPress (r4641)
139
+ *
140
+ * @param string $content Topic and reply content
141
+ * @return string Partially encodedd content
142
+ */
143
+ function bbp_encode_bad( $content = '' ) {
144
+
145
+ // Setup variables
146
+ $content = _wp_specialchars( $content, ENT_NOQUOTES );
147
+ $content = preg_split( '@(`[^`]*`)@m', $content, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE );
148
+ $allowed = bbp_kses_allowed_tags();
149
+ $empty = array(
150
+ 'br' => true,
151
+ 'hr' => true,
152
+ 'img' => true,
153
+ 'input' => true,
154
+ 'param' => true,
155
+ 'area' => true,
156
+ 'col' => true,
157
+ 'embed' => true
158
+ );
159
+
160
+ // Add 'p' and 'br' tags to allowed array, so they are not encoded
161
+ $allowed['p'] = array();
162
+ $allowed['br'] = array();
163
+
164
+ // Loop through allowed tags and compare for empty and normal tags
165
+ foreach ( $allowed as $tag => $args ) {
166
+ $preg = $args ? "{$tag}(?:\s.*?)?" : $tag;
167
+
168
+ // Which walker to use based on the tag and argments
169
+ if ( isset( $empty[$tag] ) ) {
170
+ array_walk( $content, 'bbp_encode_empty_callback', $preg );
171
+ } else {
172
+ array_walk( $content, 'bbp_encode_normal_callback', $preg );
173
+ }
174
+ }
175
+
176
+ // Return the joined content array
177
+ return join( '', $content );
178
+ }
179
+
180
+ /** Code Callbacks ************************************************************/
181
+
182
+ /**
183
+ * Callback to encode the tags in topic or reply content
184
+ *
185
+ * @since bbPress (r4641)
186
+ *
187
+ * @param array $matches
188
+ * @return string
189
+ */
190
+ function bbp_encode_callback( $matches = array() ) {
191
+ $content = trim( $matches[2] );
192
+ $content = htmlspecialchars( $content, ENT_QUOTES );
193
+ $content = str_replace( array( "\r\n", "\r" ), "\n", $content );
194
+ $content = preg_replace( "|\n\n\n+|", "\n\n", $content );
195
+ $content = str_replace( '&amp;amp;', '&amp;', $content );
196
+ $content = str_replace( '&amp;lt;', '&lt;', $content );
197
+ $content = str_replace( '&amp;gt;', '&gt;', $content );
198
+ $content = '<code>' . $content . '</code>';
199
+
200
+ if ( "`" != $matches[1] )
201
+ $content = '<pre>' . $content . '</pre>';
202
+
203
+ return $content;
204
+ }
205
+
206
+ /**
207
+ * Callback to decode the tags in topic or reply content
208
+ *
209
+ * @since bbPress (r4641)
210
+ *
211
+ * @param array $matches
212
+ * @return string
213
+ */
214
+ function bbp_decode_callback( $matches = array() ) {
215
+
216
+ // Setup variables
217
+ $trans_table = array_flip( get_html_translation_table( HTML_ENTITIES ) );
218
+ $amps = array( '&#38;','&amp;' );
219
+ $content = $matches[2];
220
+ $content = strtr( $content, $trans_table );
221
+
222
+ // Do the do
223
+ $content = str_replace( '<br />', '<coded_br />', $content );
224
+ $content = str_replace( '<p>', '<coded_p>', $content );
225
+ $content = str_replace( '</p>', '</coded_p>', $content );
226
+ $content = str_replace( $amps, '&', $content );
227
+ $content = str_replace( '&#39;', "'", $content );
228
+
229
+ // Return content wrapped in code tags
230
+ return '`' . $content . '`';
231
+ }
232
+
233
+ /**
234
+ * Callback to replace empty HTML tags in a content string
235
+ *
236
+ * @since bbPress (r4641)
237
+ *
238
+ * @internal Used by bbp_encode_bad()
239
+ * @param string $content
240
+ * @param string $key Not used
241
+ * @param string $preg
242
+ */
243
+ function bbp_encode_empty_callback( &$content = '', $key = '', $preg = '' ) {
244
+ if ( strpos( $content, '`' ) !== 0 ) {
245
+ $content = preg_replace( "|&lt;({$preg})\s*?/*?&gt;|i", '<$1 />', $content );
246
+ }
247
+ }
248
+
249
+ /**
250
+ * Callback to replace normal HTML tags in a content string
251
+ *
252
+ * @since bbPress (r4641)
253
+ *
254
+ * @internal Used by bbp_encode_bad()
255
+ * @param type $content
256
+ * @param type $key
257
+ * @param type $preg
258
+ */
259
+ function bbp_encode_normal_callback( &$content = '', $key = '', $preg = '') {
260
+ if ( strpos( $content, '`' ) !== 0 ) {
261
+ $content = preg_replace( "|&lt;(/?{$preg})&gt;|i", '<$1>', $content );
262
+ }
263
+ }
includes/common/functions.php CHANGED
@@ -88,7 +88,7 @@ function bbp_convert_date( $time, $d = 'U', $translate = false ) {
88
  * @uses bbp_get_time_since() To get the formatted time
89
  */
90
  function bbp_time_since( $older_date, $newer_date = false ) {
91
- echo bbp_get_time_since( $older_date, $newer_date = false );
92
  }
93
  /**
94
  * Return formatted time to display human readable time difference.
@@ -105,7 +105,7 @@ function bbp_time_since( $older_date, $newer_date = false ) {
105
  * @return string Formatted time
106
  */
107
  function bbp_get_time_since( $older_date, $newer_date = false ) {
108
-
109
  // Setup the strings
110
  $unknown_text = apply_filters( 'bbp_core_time_since_unknown_text', __( 'sometime', 'bbpress' ) );
111
  $right_now_text = apply_filters( 'bbp_core_time_since_right_now_text', __( 'right now', 'bbpress' ) );
@@ -228,6 +228,19 @@ function bbp_format_revision_reason( $reason = '' ) {
228
 
229
  /** Misc **********************************************************************/
230
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  /**
232
  * Append 'view=all' to query string if it's already there from referer
233
  *
@@ -243,10 +256,11 @@ function bbp_format_revision_reason( $reason = '' ) {
243
  function bbp_add_view_all( $original_link = '', $force = false ) {
244
 
245
  // Are we appending the view=all vars?
246
- if ( bbp_get_view_all() || !empty( $force ) )
247
  $link = add_query_arg( array( 'view' => 'all' ), $original_link );
248
- else
249
  $link = $original_link;
 
250
 
251
  return apply_filters( 'bbp_add_view_all', $link, $original_link );
252
  }
@@ -429,7 +443,8 @@ function bbp_past_edit_lock( $post_date_gmt ) {
429
  */
430
  function bbp_get_statistics( $args = '' ) {
431
 
432
- $defaults = array (
 
433
  'count_users' => true,
434
  'count_forums' => true,
435
  'count_topics' => true,
@@ -442,18 +457,26 @@ function bbp_get_statistics( $args = '' ) {
442
  'count_trashed_replies' => true,
443
  'count_tags' => true,
444
  'count_empty_tags' => true
445
- );
446
- $r = bbp_parse_args( $args, $defaults, 'get_statistics' );
447
- extract( $r );
 
 
 
 
 
 
 
 
448
 
449
  // Users
450
- if ( !empty( $count_users ) )
451
  $user_count = bbp_get_total_users();
 
452
 
453
  // Forums
454
- if ( !empty( $count_forums ) ) {
455
- $forum_count = wp_count_posts( bbp_get_forum_post_type() );
456
- $forum_count = $forum_count->publish;
457
  }
458
 
459
  // Post statuses
@@ -463,8 +486,7 @@ function bbp_get_statistics( $args = '' ) {
463
  $closed = bbp_get_closed_status_id();
464
 
465
  // Topics
466
- if ( !empty( $count_topics ) ) {
467
-
468
  $all_topics = wp_count_posts( bbp_get_topic_post_type() );
469
 
470
  // Published (publish + closed)
@@ -473,13 +495,13 @@ function bbp_get_statistics( $args = '' ) {
473
  if ( current_user_can( 'read_private_topics' ) || current_user_can( 'edit_others_topics' ) || current_user_can( 'view_trash' ) ) {
474
 
475
  // Private
476
- $topics['private'] = ( !empty( $count_private_topics ) && current_user_can( 'read_private_topics' ) ) ? (int) $all_topics->{$private} : 0;
477
 
478
  // Spam
479
- $topics['spammed'] = ( !empty( $count_spammed_topics ) && current_user_can( 'edit_others_topics' ) ) ? (int) $all_topics->{$spam} : 0;
480
 
481
  // Trash
482
- $topics['trashed'] = ( !empty( $count_trashed_topics ) && current_user_can( 'view_trash' ) ) ? (int) $all_topics->{$trash} : 0;
483
 
484
  // Total hidden (private + spam + trash)
485
  $topic_count_hidden = $topics['private'] + $topics['spammed'] + $topics['trashed'];
@@ -495,7 +517,7 @@ function bbp_get_statistics( $args = '' ) {
495
  }
496
 
497
  // Replies
498
- if ( !empty( $count_replies ) ) {
499
 
500
  $all_replies = wp_count_posts( bbp_get_reply_post_type() );
501
 
@@ -505,13 +527,13 @@ function bbp_get_statistics( $args = '' ) {
505
  if ( current_user_can( 'read_private_replies' ) || current_user_can( 'edit_others_replies' ) || current_user_can( 'view_trash' ) ) {
506
 
507
  // Private
508
- $replies['private'] = ( !empty( $count_private_replies ) && current_user_can( 'read_private_replies' ) ) ? (int) $all_replies->{$private} : 0;
509
 
510
  // Spam
511
- $replies['spammed'] = ( !empty( $count_spammed_replies ) && current_user_can( 'edit_others_replies' ) ) ? (int) $all_replies->{$spam} : 0;
512
 
513
  // Trash
514
- $replies['trashed'] = ( !empty( $count_trashed_replies ) && current_user_can( 'view_trash' ) ) ? (int) $all_replies->{$trash} : 0;
515
 
516
  // Total hidden (private + spam + trash)
517
  $reply_count_hidden = $replies['private'] + $replies['spammed'] + $replies['trashed'];
@@ -528,28 +550,33 @@ function bbp_get_statistics( $args = '' ) {
528
  }
529
 
530
  // Topic Tags
531
- if ( !empty( $count_tags ) && bbp_allow_topic_tags() ) {
532
 
533
  // Get the count
534
  $topic_tag_count = wp_count_terms( bbp_get_topic_tag_tax_id(), array( 'hide_empty' => true ) );
535
 
536
  // Empty tags
537
- if ( !empty( $count_empty_tags ) && current_user_can( 'edit_topic_tags' ) ) {
538
  $empty_topic_tag_count = wp_count_terms( bbp_get_topic_tag_tax_id() ) - $topic_tag_count;
539
  }
540
  }
541
 
542
  // Tally the tallies
543
- $statistics = compact( 'user_count', 'forum_count', 'topic_count', 'topic_count_hidden', 'reply_count', 'reply_count_hidden', 'topic_tag_count', 'empty_topic_tag_count' );
544
- $statistics = array_map( 'absint', $statistics );
545
- $statistics = array_map( 'number_format_i18n', $statistics );
546
-
547
- // Add the hidden (topic/reply) count title attribute strings because we don't need to run the math functions on these (see above)
548
- if ( isset( $hidden_topic_title ) )
549
- $statistics['hidden_topic_title'] = $hidden_topic_title;
550
-
551
- if ( isset( $hidden_reply_title ) )
552
- $statistics['hidden_reply_title'] = $hidden_reply_title;
 
 
 
 
 
553
 
554
  return apply_filters( 'bbp_get_statistics', $statistics, $args );
555
  }
@@ -582,31 +609,27 @@ function bbp_get_statistics( $args = '' ) {
582
  */
583
  function bbp_filter_anonymous_post_data( $args = '' ) {
584
 
585
- // Assign variables
586
- $defaults = array (
587
  'bbp_anonymous_name' => !empty( $_POST['bbp_anonymous_name'] ) ? $_POST['bbp_anonymous_name'] : false,
588
  'bbp_anonymous_email' => !empty( $_POST['bbp_anonymous_email'] ) ? $_POST['bbp_anonymous_email'] : false,
589
  'bbp_anonymous_website' => !empty( $_POST['bbp_anonymous_website'] ) ? $_POST['bbp_anonymous_website'] : false,
590
- );
591
- $r = bbp_parse_args( $args, $defaults, 'filter_anonymous_post_data' );
592
- extract( $r );
593
 
594
  // Filter variables and add errors if necessary
595
- $bbp_anonymous_name = apply_filters( 'bbp_pre_anonymous_post_author_name', $bbp_anonymous_name );
596
- if ( empty( $bbp_anonymous_name ) )
597
  bbp_add_error( 'bbp_anonymous_name', __( '<strong>ERROR</strong>: Invalid author name submitted!', 'bbpress' ) );
598
 
599
- $bbp_anonymous_email = apply_filters( 'bbp_pre_anonymous_post_author_email', $bbp_anonymous_email );
600
- if ( empty( $bbp_anonymous_email ) )
601
  bbp_add_error( 'bbp_anonymous_email', __( '<strong>ERROR</strong>: Invalid email address submitted!', 'bbpress' ) );
602
 
603
  // Website is optional
604
- $bbp_anonymous_website = apply_filters( 'bbp_pre_anonymous_post_author_website', $bbp_anonymous_website );
605
 
606
- if ( !bbp_has_errors() )
607
- $retval = compact( 'bbp_anonymous_name', 'bbp_anonymous_email', 'bbp_anonymous_website' );
608
- else
609
- $retval = false;
610
 
611
  // Finally, return sanitized data or false
612
  return apply_filters( 'bbp_filter_anonymous_post_data', $retval, $args );
@@ -630,21 +653,30 @@ function bbp_filter_anonymous_post_data( $args = '' ) {
630
  * it is found that it is a duplicate
631
  * @return bool True if it is not a duplicate, false if it is
632
  */
633
- function bbp_check_for_duplicate( $post_data ) {
634
 
635
  // No duplicate checks for those who can throttle
636
  if ( current_user_can( 'throttle' ) )
637
  return true;
638
 
 
639
  global $wpdb;
640
 
641
- extract( $post_data, EXTR_SKIP );
 
 
 
 
 
 
 
 
642
 
643
  // Check for anonymous post
644
- if ( empty( $post_author ) && ( isset( $anonymous_data ) && !empty( $anonymous_data['bbp_anonymous_email'] ) ) ) {
645
  $clauses = get_meta_sql( array( array(
646
  'key' => '_bbp_anonymous_email',
647
- 'value' => $anonymous_data['bbp_anonymous_email']
648
  ) ), 'post', $wpdb->posts, 'ID' );
649
 
650
  $join = $clauses['join'];
@@ -655,11 +687,10 @@ function bbp_check_for_duplicate( $post_data ) {
655
 
656
  // Simple duplicate check
657
  // Expected slashed ($post_type, $post_parent, $post_author, $post_content, $anonymous_data)
658
- $status = bbp_get_trash_status_id();
659
- $dupe = "SELECT ID FROM {$wpdb->posts} {$join} WHERE post_type = '{$post_type}' AND post_status != '{$status}' AND post_author = {$post_author} AND post_content = '{$post_content}' {$where}";
660
- $dupe .= !empty( $post_parent ) ? " AND post_parent = '{$post_parent}'" : '';
661
- $dupe .= " LIMIT 1";
662
- $dupe = apply_filters( 'bbp_check_for_duplicate_query', $dupe, $post_data );
663
 
664
  if ( $wpdb->get_var( $dupe ) ) {
665
  do_action( 'bbp_check_for_duplicate_trigger', $post_data );
@@ -705,7 +736,7 @@ function bbp_check_for_flood( $anonymous_data = false, $author_id = 0 ) {
705
  if ( !empty( $last_posted ) && time() < $last_posted + $throttle_time ) {
706
  return false;
707
  }
708
-
709
  // User is logged in, so check their last posted time
710
  } elseif ( !empty( $author_id ) ) {
711
  $author_id = (int) $author_id;
@@ -737,6 +768,10 @@ function bbp_check_for_flood( $anonymous_data = false, $author_id = 0 ) {
737
  */
738
  function bbp_check_for_moderation( $anonymous_data = false, $author_id = 0, $title = '', $content = '' ) {
739
 
 
 
 
 
740
  // Bail if super admin is author
741
  if ( is_super_admin( $author_id ) )
742
  return true;
@@ -852,6 +887,10 @@ function bbp_check_for_moderation( $anonymous_data = false, $author_id = 0, $tit
852
  */
853
  function bbp_check_for_blacklist( $anonymous_data = false, $author_id = 0, $title = '', $content = '' ) {
854
 
 
 
 
 
855
  // Bail if super admin is author
856
  if ( is_super_admin( $author_id ) )
857
  return true;
@@ -1011,7 +1050,7 @@ function bbp_notify_subscribers( $reply_id = 0, $topic_id = 0, $forum_id = 0, $a
1011
  $topic_title = strip_tags( bbp_get_topic_title( $topic_id ) );
1012
  $reply_content = strip_tags( bbp_get_reply_content( $reply_id ) );
1013
  $reply_url = bbp_get_reply_url( $reply_id );
1014
- $blog_name = get_option( 'blogname' );
1015
 
1016
  // Loop through users
1017
  foreach ( (array) $user_ids as $user_id ) {
@@ -1024,7 +1063,7 @@ function bbp_notify_subscribers( $reply_id = 0, $topic_id = 0, $forum_id = 0, $a
1024
  $message = sprintf( __( '%1$s wrote:
1025
 
1026
  %2$s
1027
-
1028
  Post Link: %3$s
1029
 
1030
  -----------
@@ -1032,7 +1071,7 @@ Post Link: %3$s
1032
  You are receiving this email because you subscribed to a forum topic.
1033
 
1034
  Login and visit the topic to unsubscribe from these emails.', 'bbpress' ),
1035
-
1036
  $reply_author_name,
1037
  $reply_content,
1038
  $reply_url
@@ -1406,8 +1445,10 @@ function bbp_get_global_post_field( $field = 'ID', $context = 'edit' ) {
1406
  */
1407
  function bbp_verify_nonce_request( $action = '', $query_arg = '_wpnonce' ) {
1408
 
1409
- // Get the home URL
1410
- $home_url = strtolower( home_url() );
 
 
1411
 
1412
  // Build the currently requested URL
1413
  $scheme = is_ssl() ? 'https://' : 'http://';
@@ -1461,21 +1502,17 @@ function bbp_request_feed_trap( $query_vars = array() ) {
1461
  // Single forum
1462
  if ( isset( $query_vars[bbp_get_forum_post_type()] ) ) {
1463
 
1464
- // Get the forum by the path
1465
- $forum = get_page_by_path( $query_vars[bbp_get_forum_post_type()], OBJECT, bbp_get_forum_post_type() );
1466
- $forum_id = $forum->ID;
1467
-
1468
  // Load up our own query
1469
  query_posts( array(
1470
  'post_type' => bbp_get_forum_post_type(),
1471
- 'ID' => $forum_id,
1472
  'feed' => true
1473
  ) );
1474
 
1475
  // Restrict to specific forum ID
1476
  $meta_query = array( array(
1477
  'key' => '_bbp_forum_id',
1478
- 'value' => $forum_id,
1479
  'type' => 'numeric',
1480
  'compare' => '='
1481
  ) );
@@ -1507,7 +1544,7 @@ function bbp_request_feed_trap( $query_vars = array() ) {
1507
  'author' => 0,
1508
  'feed' => true,
1509
  'post_type' => bbp_get_topic_post_type(),
1510
- 'post_parent' => $forum_id,
1511
  'post_status' => join( ',', array( bbp_get_public_status_id(), bbp_get_closed_status_id() ) ),
1512
  'posts_per_page' => bbp_get_topics_per_rss_page(),
1513
  'order' => 'DESC'
88
  * @uses bbp_get_time_since() To get the formatted time
89
  */
90
  function bbp_time_since( $older_date, $newer_date = false ) {
91
+ echo bbp_get_time_since( $older_date, $newer_date );
92
  }
93
  /**
94
  * Return formatted time to display human readable time difference.
105
  * @return string Formatted time
106
  */
107
  function bbp_get_time_since( $older_date, $newer_date = false ) {
108
+
109
  // Setup the strings
110
  $unknown_text = apply_filters( 'bbp_core_time_since_unknown_text', __( 'sometime', 'bbpress' ) );
111
  $right_now_text = apply_filters( 'bbp_core_time_since_right_now_text', __( 'right now', 'bbpress' ) );
228
 
229
  /** Misc **********************************************************************/
230
 
231
+ /**
232
+ * Return the unescaped redirect_to request value
233
+ *
234
+ * @bbPress (r4655)
235
+ *
236
+ * @return string The URL to redirect to, if set
237
+ */
238
+ function bbp_get_redirect_to() {
239
+ $retval = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
240
+
241
+ return apply_filters( 'bbp_get_redirect_to', $retval );
242
+ }
243
+
244
  /**
245
  * Append 'view=all' to query string if it's already there from referer
246
  *
256
  function bbp_add_view_all( $original_link = '', $force = false ) {
257
 
258
  // Are we appending the view=all vars?
259
+ if ( bbp_get_view_all() || !empty( $force ) ) {
260
  $link = add_query_arg( array( 'view' => 'all' ), $original_link );
261
+ } else {
262
  $link = $original_link;
263
+ }
264
 
265
  return apply_filters( 'bbp_add_view_all', $link, $original_link );
266
  }
443
  */
444
  function bbp_get_statistics( $args = '' ) {
445
 
446
+ // Parse arguments against default values
447
+ $r = bbp_parse_args( $args, array(
448
  'count_users' => true,
449
  'count_forums' => true,
450
  'count_topics' => true,
457
  'count_trashed_replies' => true,
458
  'count_tags' => true,
459
  'count_empty_tags' => true
460
+ ), 'get_statistics' );
461
+
462
+ // Defaults
463
+ $user_count = 0;
464
+ $forum_count = 0;
465
+ $topic_count = 0;
466
+ $topic_count_hidden = 0;
467
+ $reply_count = 0;
468
+ $reply_count_hidden = 0;
469
+ $topic_tag_count = 0;
470
+ $empty_topic_tag_count = 0;
471
 
472
  // Users
473
+ if ( !empty( $r['count_users'] ) ) {
474
  $user_count = bbp_get_total_users();
475
+ }
476
 
477
  // Forums
478
+ if ( !empty( $r['count_forums'] ) ) {
479
+ $forum_count = wp_count_posts( bbp_get_forum_post_type() )->publish;
 
480
  }
481
 
482
  // Post statuses
486
  $closed = bbp_get_closed_status_id();
487
 
488
  // Topics
489
+ if ( !empty( $r['count_topics'] ) ) {
 
490
  $all_topics = wp_count_posts( bbp_get_topic_post_type() );
491
 
492
  // Published (publish + closed)
495
  if ( current_user_can( 'read_private_topics' ) || current_user_can( 'edit_others_topics' ) || current_user_can( 'view_trash' ) ) {
496
 
497
  // Private
498
+ $topics['private'] = ( !empty( $r['count_private_topics'] ) && current_user_can( 'read_private_topics' ) ) ? (int) $all_topics->{$private} : 0;
499
 
500
  // Spam
501
+ $topics['spammed'] = ( !empty( $r['count_spammed_topics'] ) && current_user_can( 'edit_others_topics' ) ) ? (int) $all_topics->{$spam} : 0;
502
 
503
  // Trash
504
+ $topics['trashed'] = ( !empty( $r['count_trashed_topics'] ) && current_user_can( 'view_trash' ) ) ? (int) $all_topics->{$trash} : 0;
505
 
506
  // Total hidden (private + spam + trash)
507
  $topic_count_hidden = $topics['private'] + $topics['spammed'] + $topics['trashed'];
517
  }
518
 
519
  // Replies
520
+ if ( !empty( $r['count_replies'] ) ) {
521
 
522
  $all_replies = wp_count_posts( bbp_get_reply_post_type() );
523
 
527
  if ( current_user_can( 'read_private_replies' ) || current_user_can( 'edit_others_replies' ) || current_user_can( 'view_trash' ) ) {
528
 
529
  // Private
530
+ $replies['private'] = ( !empty( $r['count_private_replies'] ) && current_user_can( 'read_private_replies' ) ) ? (int) $all_replies->{$private} : 0;
531
 
532
  // Spam
533
+ $replies['spammed'] = ( !empty( $r['count_spammed_replies'] ) && current_user_can( 'edit_others_replies' ) ) ? (int) $all_replies->{$spam} : 0;
534
 
535
  // Trash
536
+ $replies['trashed'] = ( !empty( $r['count_trashed_replies'] ) && current_user_can( 'view_trash' ) ) ? (int) $all_replies->{$trash} : 0;
537
 
538
  // Total hidden (private + spam + trash)
539
  $reply_count_hidden = $replies['private'] + $replies['spammed'] + $replies['trashed'];
550
  }
551
 
552
  // Topic Tags
553
+ if ( !empty( $r['count_tags'] ) && bbp_allow_topic_tags() ) {
554
 
555
  // Get the count
556
  $topic_tag_count = wp_count_terms( bbp_get_topic_tag_tax_id(), array( 'hide_empty' => true ) );
557
 
558
  // Empty tags
559
+ if ( !empty( $r['count_empty_tags'] ) && current_user_can( 'edit_topic_tags' ) ) {
560
  $empty_topic_tag_count = wp_count_terms( bbp_get_topic_tag_tax_id() ) - $topic_tag_count;
561
  }
562
  }
563
 
564
  // Tally the tallies
565
+ $statistics = array_map( 'number_format_i18n', array_map( 'absint', compact(
566
+ 'user_count',
567
+ 'forum_count',
568
+ 'topic_count',
569
+ 'topic_count_hidden',
570
+ 'reply_count',
571
+ 'reply_count_hidden',
572
+ 'topic_tag_count',
573
+ 'empty_topic_tag_count'
574
+ ) ) );
575
+
576
+ // Add the hidden (topic/reply) count title attribute strings because we
577
+ // don't need to run the math functions on these (see above)
578
+ $statistics['hidden_topic_title'] = isset( $hidden_topic_title ) ? $hidden_topic_title : '';
579
+ $statistics['hidden_reply_title'] = isset( $hidden_reply_title ) ? $hidden_reply_title : '';
580
 
581
  return apply_filters( 'bbp_get_statistics', $statistics, $args );
582
  }
609
  */
610
  function bbp_filter_anonymous_post_data( $args = '' ) {
611
 
612
+ // Parse arguments against default values
613
+ $r = bbp_parse_args( $args, array (
614
  'bbp_anonymous_name' => !empty( $_POST['bbp_anonymous_name'] ) ? $_POST['bbp_anonymous_name'] : false,
615
  'bbp_anonymous_email' => !empty( $_POST['bbp_anonymous_email'] ) ? $_POST['bbp_anonymous_email'] : false,
616
  'bbp_anonymous_website' => !empty( $_POST['bbp_anonymous_website'] ) ? $_POST['bbp_anonymous_website'] : false,
617
+ ), 'filter_anonymous_post_data' );
 
 
618
 
619
  // Filter variables and add errors if necessary
620
+ $r['bbp_anonymous_name'] = apply_filters( 'bbp_pre_anonymous_post_author_name', $r['bbp_anonymous_name'] );
621
+ if ( empty( $r['bbp_anonymous_name'] ) )
622
  bbp_add_error( 'bbp_anonymous_name', __( '<strong>ERROR</strong>: Invalid author name submitted!', 'bbpress' ) );
623
 
624
+ $r['bbp_anonymous_email'] = apply_filters( 'bbp_pre_anonymous_post_author_email', $r['bbp_anonymous_email'] );
625
+ if ( empty( $r['bbp_anonymous_email'] ) )
626
  bbp_add_error( 'bbp_anonymous_email', __( '<strong>ERROR</strong>: Invalid email address submitted!', 'bbpress' ) );
627
 
628
  // Website is optional
629
+ $r['bbp_anonymous_website'] = apply_filters( 'bbp_pre_anonymous_post_author_website', $r['bbp_anonymous_website'] );
630
 
631
+ // Return false if we have any errors
632
+ $retval = bbp_has_errors() ? false : $r;
 
 
633
 
634
  // Finally, return sanitized data or false
635
  return apply_filters( 'bbp_filter_anonymous_post_data', $retval, $args );
653
  * it is found that it is a duplicate
654
  * @return bool True if it is not a duplicate, false if it is
655
  */
656
+ function bbp_check_for_duplicate( $post_data = array() ) {
657
 
658
  // No duplicate checks for those who can throttle
659
  if ( current_user_can( 'throttle' ) )
660
  return true;
661
 
662
+ // Define global to use get_meta_sql() and get_var() methods
663
  global $wpdb;
664
 
665
+ // Parse arguments against default values
666
+ $r = bbp_parse_args( $post_data, array(
667
+ 'post_author' => 0,
668
+ 'post_type' => array( bbp_get_topic_post_type(), bbp_get_reply_post_type() ),
669
+ 'post_parent' => 0,
670
+ 'post_content' => '',
671
+ 'post_status' => bbp_get_trash_status_id(),
672
+ 'anonymous_data' => false
673
+ ), 'check_for_duplicate' );
674
 
675
  // Check for anonymous post
676
+ if ( empty( $r['post_author'] ) && ( !empty( $r['anonymous_data'] ) && !empty( $r['anonymous_data']['bbp_anonymous_email'] ) ) ) {
677
  $clauses = get_meta_sql( array( array(
678
  'key' => '_bbp_anonymous_email',
679
+ 'value' => $r['anonymous_data']['bbp_anonymous_email']
680
  ) ), 'post', $wpdb->posts, 'ID' );
681
 
682
  $join = $clauses['join'];
687
 
688
  // Simple duplicate check
689
  // Expected slashed ($post_type, $post_parent, $post_author, $post_content, $anonymous_data)
690
+ $query = "SELECT ID FROM {$wpdb->posts} {$join} WHERE post_type = '{$r['post_type']}' AND post_status != '{$r['post_status']}' AND post_author = {$r['post_author']} AND post_content = '{$r['post_content']}' {$where}";
691
+ $query .= !empty( $r['post_parent'] ) ? " AND post_parent = '{$r['post_parent']}'" : '';
692
+ $query .= " LIMIT 1";
693
+ $dupe = apply_filters( 'bbp_check_for_duplicate_query', $query, $r );
 
694
 
695
  if ( $wpdb->get_var( $dupe ) ) {
696
  do_action( 'bbp_check_for_duplicate_trigger', $post_data );
736
  if ( !empty( $last_posted ) && time() < $last_posted + $throttle_time ) {
737
  return false;
738
  }
739
+
740
  // User is logged in, so check their last posted time
741
  } elseif ( !empty( $author_id ) ) {
742
  $author_id = (int) $author_id;
768
  */
769
  function bbp_check_for_moderation( $anonymous_data = false, $author_id = 0, $title = '', $content = '' ) {
770
 
771
+ // Allow for moderation check to be skipped
772
+ if ( apply_filters( 'bbp_bypass_check_for_moderation', false, $anonymous_data, $author_id, $title, $content ) )
773
+ return true;
774
+
775
  // Bail if super admin is author
776
  if ( is_super_admin( $author_id ) )
777
  return true;
887
  */
888
  function bbp_check_for_blacklist( $anonymous_data = false, $author_id = 0, $title = '', $content = '' ) {
889
 
890
+ // Allow for blacklist check to be skipped
891
+ if ( apply_filters( 'bbp_bypass_check_for_blacklist', false, $anonymous_data, $author_id, $title, $content ) )
892
+ return true;
893
+
894
  // Bail if super admin is author
895
  if ( is_super_admin( $author_id ) )
896
  return true;
1050
  $topic_title = strip_tags( bbp_get_topic_title( $topic_id ) );
1051
  $reply_content = strip_tags( bbp_get_reply_content( $reply_id ) );
1052
  $reply_url = bbp_get_reply_url( $reply_id );
1053
+ $blog_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
1054
 
1055
  // Loop through users
1056
  foreach ( (array) $user_ids as $user_id ) {
1063
  $message = sprintf( __( '%1$s wrote:
1064
 
1065
  %2$s
1066
+
1067
  Post Link: %3$s
1068
 
1069
  -----------
1071
  You are receiving this email because you subscribed to a forum topic.
1072
 
1073
  Login and visit the topic to unsubscribe from these emails.', 'bbpress' ),
1074
+
1075
  $reply_author_name,
1076
  $reply_content,
1077
  $reply_url
1445
  */
1446
  function bbp_verify_nonce_request( $action = '', $query_arg = '_wpnonce' ) {
1447
 
1448
+ // Parse home_url() into pieces to remove query-strings, strange characters,
1449
+ // and other funny things that plugins might to do to it.
1450
+ $parsed_home = parse_url( home_url( '/', ( is_ssl() ? 'https://' : 'http://' ) ) );
1451
+ $home_url = trim( strtolower( $parsed_home['scheme'] . '://' . $parsed_home['host'] . $parsed_home['path'] ), '/' );
1452
 
1453
  // Build the currently requested URL
1454
  $scheme = is_ssl() ? 'https://' : 'http://';
1502
  // Single forum
1503
  if ( isset( $query_vars[bbp_get_forum_post_type()] ) ) {
1504
 
 
 
 
 
1505
  // Load up our own query
1506
  query_posts( array(
1507
  'post_type' => bbp_get_forum_post_type(),
1508
+ 'name' => $query_vars[bbp_get_forum_post_type()],
1509
  'feed' => true
1510
  ) );
1511
 
1512
  // Restrict to specific forum ID
1513
  $meta_query = array( array(
1514
  'key' => '_bbp_forum_id',
1515
+ 'value' => bbp_get_forum_id(),
1516
  'type' => 'numeric',
1517
  'compare' => '='
1518
  ) );
1544
  'author' => 0,
1545
  'feed' => true,
1546
  'post_type' => bbp_get_topic_post_type(),
1547
+ 'post_parent' => bbp_get_forum_id(),
1548
  'post_status' => join( ',', array( bbp_get_public_status_id(), bbp_get_closed_status_id() ) ),
1549
  'posts_per_page' => bbp_get_topics_per_rss_page(),
1550
  'order' => 'DESC'
includes/common/shortcodes.php CHANGED
@@ -79,11 +79,20 @@ class BBP_Shortcodes {
79
 
80
  'bbp-single-view' => array( $this, 'display_view' ), // Single view
81
 
 
 
 
 
 
82
  /** Account *******************************************************/
83
 
84
  'bbp-login' => array( $this, 'display_login' ), // Login
85
  'bbp-register' => array( $this, 'display_register' ), // Register
86
  'bbp-lost-pass' => array( $this, 'display_lost_pass' ), // Lost Password
 
 
 
 
87
  ) );
88
  }
89
 
@@ -110,9 +119,10 @@ class BBP_Shortcodes {
110
  $bbp = bbpress();
111
 
112
  // Unset global queries
113
- $bbp->forum_query = new stdClass;
114
- $bbp->topic_query = new stdClass;
115
- $bbp->reply_query = new stdClass;
 
116
 
117
  // Unset global ID's
118
  $bbp->current_forum_id = 0;
@@ -598,6 +608,64 @@ class BBP_Shortcodes {
598
  return $this->end();
599
  }
600
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
601
  /** Account ***************************************************************/
602
 
603
  /**
@@ -677,6 +745,28 @@ class BBP_Shortcodes {
677
 
678
  /** Other *****************************************************************/
679
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
680
  /**
681
  * Display a breadcrumb
682
  *
79
 
80
  'bbp-single-view' => array( $this, 'display_view' ), // Single view
81
 
82
+ /** Search ********************************************************/
83
+
84
+ 'bbp-search-form' => array( $this, 'display_search_form' ), // Search form
85
+ 'bbp-search' => array( $this, 'display_search' ), // Search
86
+
87
  /** Account *******************************************************/
88
 
89
  'bbp-login' => array( $this, 'display_login' ), // Login
90
  'bbp-register' => array( $this, 'display_register' ), // Register
91
  'bbp-lost-pass' => array( $this, 'display_lost_pass' ), // Lost Password
92
+
93
+ /** Others *******************************************************/
94
+
95
+ 'bbp-stats' => array( $this, 'display_stats' ), // Stats
96
  ) );
97
  }
98
 
119
  $bbp = bbpress();
120
 
121
  // Unset global queries
122
+ $bbp->forum_query = new stdClass;
123
+ $bbp->topic_query = new stdClass;
124
+ $bbp->reply_query = new stdClass;
125
+ $bbp->search_query = new stdClass;
126
 
127
  // Unset global ID's
128
  $bbp->current_forum_id = 0;
608
  return $this->end();
609
  }
610
 
611
+ /** Search ****************************************************************/
612
+
613
+ /**
614
+ * Display the search form in an output buffer and return to ensure
615
+ * post/page contents are displayed first.
616
+ *
617
+ * @since bbPress (r4585)
618
+ *
619
+ * @uses get_template_part()
620
+ */
621
+ public function display_search_form() {
622
+
623
+ // Start output buffer
624
+ $this->start( 'bbp_search_form' );
625
+
626
+ // Output templates
627
+ bbp_get_template_part( 'form', 'search' );
628
+
629
+ // Return contents of output buffer
630
+ return $this->end();
631
+ }
632
+
633
+ /**
634
+ * Display the contents of search results in an output buffer and return to
635
+ * ensure that post/page contents are displayed first.
636
+ *
637
+ * @since bbPress (r4579)
638
+ *
639
+ * @param array $attr
640
+ * @param string $content
641
+ * @uses bbp_search_query()
642
+ * @uses get_template_part()
643
+ */
644
+ public function display_search( $attr, $content = '' ) {
645
+
646
+ // Sanity check required info
647
+ if ( !empty( $content ) )
648
+ return $content;
649
+
650
+ // Set passed attribute to $search_terms for clarity
651
+ $search_terms = empty( $attr['search'] ) ? bbp_get_search_terms() : $attr['search'];
652
+
653
+ // Unset globals
654
+ $this->unset_globals();
655
+
656
+ // Set terms for query
657
+ set_query_var( bbp_get_search_rewrite_id(), $search_terms );
658
+
659
+ // Start output buffer
660
+ $this->start( 'bbp_search' );
661
+
662
+ // Output template
663
+ bbp_get_template_part( 'content', 'search' );
664
+
665
+ // Return contents of output buffer
666
+ return $this->end();
667
+ }
668
+
669
  /** Account ***************************************************************/
670
 
671
  /**
745
 
746
  /** Other *****************************************************************/
747
 
748
+ /**
749
+ * Display forum statistics
750
+ *
751
+ * @since bbPress (r4509)
752
+ *
753
+ * @return shring
754
+ */
755
+ public function display_stats() {
756
+
757
+ // Unset globals
758
+ $this->unset_globals();
759
+
760
+ // Start output buffer
761
+ $this->start();
762
+
763
+ // Output statistics
764
+ bbp_get_template_part( 'content', 'statistics' );
765
+
766
+ // Return contents of output buffer
767
+ return $this->end();
768
+ }
769
+
770
  /**
771
  * Display a breadcrumb
772
  *
includes/common/template-tags.php CHANGED
@@ -17,7 +17,7 @@ if ( !defined( 'ABSPATH' ) ) exit;
17
 
18
  /**
19
  * Ouput the forum URL
20
- *
21
  * @since bbPress (r3979)
22
  *
23
  * @uses bbp_get_forums_url() To get the forums URL
@@ -28,7 +28,7 @@ function bbp_forums_url( $path = '/' ) {
28
  }
29
  /**
30
  * Return the forum URL
31
- *
32
  * @since bbPress (r3979)
33
  *
34
  * @uses home_url() To get the home URL
@@ -478,6 +478,24 @@ function bbp_is_reply_edit() {
478
  return (bool) apply_filters( 'bbp_is_reply_edit', $retval );
479
  }
480
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
481
  /**
482
  * Viewing a single reply
483
  *
@@ -744,7 +762,7 @@ function bbp_is_single_user_replies() {
744
  *
745
  * @since bbPress (r2789)
746
  *
747
- * @global WP_Query $wp_query To check if WP_Query::bbp_is_view is true
748
  * @uses bbp_is_query_name() To get the query name
749
  * @return bool Is it a view page?
750
  */
@@ -765,6 +783,36 @@ function bbp_is_single_view() {
765
  return (bool) apply_filters( 'bbp_is_single_view', $retval );
766
  }
767
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
768
  /**
769
  * Check if current page is an edit page
770
  *
@@ -800,7 +848,7 @@ function bbp_is_edit() {
800
  * @uses bbp_is_topic_split()
801
  * @uses bbp_is_single_reply()
802
  * @uses bbp_is_reply_edit()
803
- * @uses bbp_is_reply_edit()
804
  * @uses bbp_is_single_view()
805
  * @uses bbp_is_single_user_edit()
806
  * @uses bbp_is_single_user()
@@ -823,101 +871,102 @@ function bbp_body_class( $wp_classes, $custom_classes = false ) {
823
 
824
  /** Archives **************************************************************/
825
 
826
- if ( bbp_is_forum_archive() )
827
  $bbp_classes[] = bbp_get_forum_post_type() . '-archive';
828
 
829
- if ( bbp_is_topic_archive() )
830
  $bbp_classes[] = bbp_get_topic_post_type() . '-archive';
831
 
832
  /** Topic Tags ************************************************************/
833
 
834
- if ( bbp_is_topic_tag() ) {
835
  $bbp_classes[] = bbp_get_topic_tag_tax_id();
836
  $bbp_classes[] = bbp_get_topic_tag_tax_id() . '-' . bbp_get_topic_tag_slug();
837
  $bbp_classes[] = bbp_get_topic_tag_tax_id() . '-' . bbp_get_topic_tag_id();
838
- }
839
-
840
- if ( bbp_is_topic_tag_edit() ) {
841
  $bbp_classes[] = bbp_get_topic_tag_tax_id() . '-edit';
842
  $bbp_classes[] = bbp_get_topic_tag_tax_id() . '-' . bbp_get_topic_tag_slug() . '-edit';
843
  $bbp_classes[] = bbp_get_topic_tag_tax_id() . '-' . bbp_get_topic_tag_id() . '-edit';
844
- }
845
 
846
  /** Components ************************************************************/
847
 
848
- if ( bbp_is_single_forum() )
849
  $bbp_classes[] = bbp_get_forum_post_type();
850
 
851
- if ( bbp_is_single_topic() )
852
  $bbp_classes[] = bbp_get_topic_post_type();
853
 
854
- if ( bbp_is_single_reply() )
855
  $bbp_classes[] = bbp_get_reply_post_type();
856
 
857
- if ( bbp_is_topic_edit() )
858
  $bbp_classes[] = bbp_get_topic_post_type() . '-edit';
859
 
860
- if ( bbp_is_topic_merge() )
861
  $bbp_classes[] = bbp_get_topic_post_type() . '-merge';
862
 
863
- if ( bbp_is_topic_split() )
864
  $bbp_classes[] = bbp_get_topic_post_type() . '-split';
865
 
866
- if ( bbp_is_reply_edit() )
867
  $bbp_classes[] = bbp_get_reply_post_type() . '-edit';
868
 
869
- if ( bbp_is_single_view() )
 
 
 
870
  $bbp_classes[] = 'bbp-view';
871
 
872
  /** User ******************************************************************/
873
 
874
- if ( bbp_is_single_user_edit() ) {
875
  $bbp_classes[] = 'bbp-user-edit';
876
  $bbp_classes[] = 'single';
877
  $bbp_classes[] = 'singular';
878
- }
879
 
880
- if ( bbp_is_single_user() ) {
881
  $bbp_classes[] = 'bbp-user-page';
882
  $bbp_classes[] = 'single';
883
  $bbp_classes[] = 'singular';
884
- }
885
 
886
- if ( bbp_is_user_home() ) {
887
  $bbp_classes[] = 'bbp-user-home';
888
  $bbp_classes[] = 'single';
889
  $bbp_classes[] = 'singular';
890
- }
891
 
892
- if ( bbp_is_user_home_edit() ) {
893
  $bbp_classes[] = 'bbp-user-home-edit';
894
  $bbp_classes[] = 'single';
895
  $bbp_classes[] = 'singular';
896
- }
897
 
898
- if ( bbp_is_topics_created() ) {
899
  $bbp_classes[] = 'bbp-topics-created';
900
  $bbp_classes[] = 'single';
901
  $bbp_classes[] = 'singular';
902
- }
903
 
904
- if ( bbp_is_favorites() ) {
905
  $bbp_classes[] = 'bbp-favorites';
906
  $bbp_classes[] = 'single';
907
  $bbp_classes[] = 'singular';
908
- }
909
 
910
- if ( bbp_is_subscriptions() ) {
911
  $bbp_classes[] = 'bbp-subscriptions';
912
  $bbp_classes[] = 'single';
913
  $bbp_classes[] = 'singular';
 
 
 
 
 
 
914
  }
915
 
916
  /** Clean up **************************************************************/
917
 
918
  // Add bbPress class if we are within a bbPress page
919
- if ( !empty( $bbp_classes ) )
920
  $bbp_classes[] = 'bbPress';
 
921
 
922
  // Merge WP classes with bbPress classes and remove any duplicates
923
  $classes = array_unique( array_merge( (array) $bbp_classes, (array) $wp_classes ) );
@@ -937,7 +986,7 @@ function bbp_body_class( $wp_classes, $custom_classes = false ) {
937
  * @uses bbp_is_topic_split()
938
  * @uses bbp_is_single_reply()
939
  * @uses bbp_is_reply_edit()
940
- * @uses bbp_is_reply_edit()
941
  * @uses bbp_is_single_view()
942
  * @uses bbp_is_single_user_edit()
943
  * @uses bbp_is_single_user()
@@ -954,68 +1003,77 @@ function is_bbpress() {
954
 
955
  /** Archives **************************************************************/
956
 
957
- if ( bbp_is_forum_archive() )
958
  $retval = true;
959
 
960
- elseif ( bbp_is_topic_archive() )
961
  $retval = true;
962
 
963
  /** Topic Tags ************************************************************/
964
 
965
- elseif ( bbp_is_topic_tag() )
966
  $retval = true;
967
 
968
- elseif ( bbp_is_topic_tag_edit() )
969
  $retval = true;
970
 
971
  /** Components ************************************************************/
972
 
973
- elseif ( bbp_is_single_forum() )
 
 
 
974
  $retval = true;
975
 
976
- elseif ( bbp_is_single_topic() )
977
  $retval = true;
978
 
979
- elseif ( bbp_is_single_reply() )
980
  $retval = true;
981
 
982
- elseif ( bbp_is_topic_edit() )
983
  $retval = true;
984
 
985
- elseif ( bbp_is_topic_merge() )
986
  $retval = true;
987
 
988
- elseif ( bbp_is_topic_split() )
989
  $retval = true;
990
 
991
- elseif ( bbp_is_reply_edit() )
992
  $retval = true;
993
 
994
- elseif ( bbp_is_single_view() )
995
  $retval = true;
996
 
997
  /** User ******************************************************************/
998
 
999
- elseif ( bbp_is_single_user_edit() )
1000
  $retval = true;
1001
 
1002
- elseif ( bbp_is_single_user() )
1003
  $retval = true;
1004
 
1005
- elseif ( bbp_is_user_home() )
1006
  $retval = true;
1007
 
1008
- elseif ( bbp_is_user_home_edit() )
1009
  $retval = true;
1010
 
1011
- elseif ( bbp_is_topics_created() )
1012
  $retval = true;
1013
 
1014
- elseif ( bbp_is_favorites() )
1015
  $retval = true;
1016
 
1017
- elseif ( bbp_is_subscriptions() )
 
 
 
 
 
1018
  $retval = true;
 
1019
 
1020
  /** Done ******************************************************************/
1021
 
@@ -1035,19 +1093,23 @@ function is_bbpress() {
1035
  * @uses apply_filters() Calls 'bbp_wp_login_action' with the url and args
1036
  */
1037
  function bbp_wp_login_action( $args = '' ) {
1038
- $defaults = array (
 
 
1039
  'action' => '',
1040
  'context' => ''
1041
- );
1042
- $r = bbp_parse_args( $args, $defaults, 'login_action' );
1043
- extract( $r );
 
 
1044
 
1045
- if ( !empty( $action ) )
1046
- $login_url = add_query_arg( array( 'action' => $action ), 'wp-login.php' );
1047
- else
1048
  $login_url = 'wp-login.php';
 
1049
 
1050
- $login_url = site_url( $login_url, $context );
1051
 
1052
  echo apply_filters( 'bbp_wp_login_action', $login_url, $args );
1053
  }
@@ -1055,26 +1117,27 @@ function bbp_wp_login_action( $args = '' ) {
1055
  /**
1056
  * Output hidden request URI field for user forms.
1057
  *
1058
- * The referer link is the current Request URI from the server super global. The
1059
- * input name is '_wp_http_referer', in case you wanted to check manually.
1060
  *
1061
  * @since bbPress (r2815)
1062
  *
1063
- * @param string $url Pass a URL to redirect to
 
1064
  * @uses wp_get_referer() To get the referer
1065
  * @uses esc_attr() To escape the url
1066
- * @uses apply_filters() Calls 'bbp_redirect_to_field' with the referer field
1067
- * and url
1068
  */
1069
  function bbp_redirect_to_field( $redirect_to = '' ) {
1070
 
1071
- // Rejig the $redirect_to
1072
- if ( !isset( $_SERVER['REDIRECT_URL'] ) || ( !$redirect_to == home_url( $_SERVER['REDIRECT_URL'] ) ) )
1073
- $redirect_to = wp_get_referer();
1074
-
1075
  // Make sure we are directing somewhere
1076
- if ( empty( $redirect_to ) )
1077
- $redirect_to = home_url( isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '' );
 
 
 
 
 
1078
 
1079
  // Remove loggedout query arg if it's there
1080
  $redirect_to = (string) esc_attr( remove_query_arg( 'loggedout', $redirect_to ) );
@@ -1208,7 +1271,7 @@ function bbp_dropdown( $args = '' ) {
1208
  * box, the first value would of course be selected -
1209
  * though you can have that as none (pass 'show_none' arg))
1210
  * - sort_column: Sort by? Defaults to 'menu_order, post_title'
1211
- * - child_of: Child of. Defaults to 0
1212
  * - post_status: Which all post_statuses to find in? Can be an array
1213
  * or CSV of publish, category, closed, private, spam,
1214
  * trash (based on post type) - if not set, these are
@@ -1243,11 +1306,13 @@ function bbp_dropdown( $args = '' ) {
1243
 
1244
  /** Arguments *********************************************************/
1245
 
1246
- $defaults = array (
 
1247
  'post_type' => bbp_get_forum_post_type(),
1248
  'selected' => 0,
1249
  'sort_column' => 'menu_order',
1250
- 'child_of' => '0',
 
1251
  'numberposts' => -1,
1252
  'orderby' => 'menu_order',
1253
  'order' => 'ASC',
@@ -1261,8 +1326,7 @@ function bbp_dropdown( $args = '' ) {
1261
  'none_found' => false,
1262
  'disable_categories' => true,
1263
  'disabled' => ''
1264
- );
1265
- $r = bbp_parse_args( $args, $defaults, 'get_dropdown' );
1266
 
1267
  if ( empty( $r['walker'] ) ) {
1268
  $r['walker'] = new BBP_Walker_Dropdown();
@@ -1270,14 +1334,14 @@ function bbp_dropdown( $args = '' ) {
1270
  }
1271
 
1272
  // Force 0
1273
- if ( is_numeric( $r['selected'] ) && $r['selected'] < 0 )
1274
  $r['selected'] = 0;
 
1275
 
1276
- extract( $r );
1277
-
1278
- // Unset the args not needed for WP_Query to avoid any possible conflicts.
1279
- // Note: walker and disable_categories are not unset
1280
- unset( $r['select_id'], $r['tab'], $r['options_only'], $r['show_none'], $r['none_found'] );
1281
 
1282
  /** Post Status *******************************************************/
1283
 
@@ -1288,7 +1352,7 @@ function bbp_dropdown( $args = '' ) {
1288
  $post_stati[] = bbp_get_public_status_id();
1289
 
1290
  // Forums
1291
- if ( bbp_get_forum_post_type() == $post_type ) {
1292
 
1293
  // Private forums
1294
  if ( current_user_can( 'read_private_forums' ) ) {
@@ -1306,33 +1370,47 @@ function bbp_dropdown( $args = '' ) {
1306
 
1307
  /** Setup variables ***************************************************/
1308
 
1309
- $name = esc_attr( $select_id );
1310
  $select_id = $name;
1311
- $tab = (int) $tab;
1312
  $retval = '';
1313
- $posts = get_posts( $r );
1314
- $disabled = disabled( isset( bbpress()->options[$disabled] ), true, false );
 
 
 
 
 
 
 
 
 
 
 
 
 
1315
 
1316
  /** Drop Down *********************************************************/
1317
 
1318
  // Items found
1319
  if ( !empty( $posts ) ) {
1320
- if ( empty( $options_only ) ) {
1321
  $tab = !empty( $tab ) ? ' tabindex="' . $tab . '"' : '';
1322
  $retval .= '<select name="' . $name . '" id="' . $select_id . '"' . $tab . $disabled . '>' . "\n";
1323
  }
1324
 
1325
- $retval .= !empty( $show_none ) ? "\t<option value=\"\" class=\"level-0\">" . $show_none . '</option>' : '';
1326
  $retval .= walk_page_dropdown_tree( $posts, 0, $r );
1327
 
1328
- if ( empty( $options_only ) )
1329
  $retval .= '</select>';
 
1330
 
1331
  // No items found - Display feedback if no custom message was passed
1332
- } elseif ( empty( $none_found ) ) {
1333
 
1334
  // Switch the response based on post type
1335
- switch ( $post_type ) {
1336
 
1337
  // Topics
1338
  case bbp_get_topic_post_type() :
@@ -1535,7 +1613,7 @@ function bbp_merge_topic_form_fields() {
1535
  *
1536
  * @since bbPress (r2756)
1537
  *
1538
- * @uses wp_nonce_field() To generete a hidden nonce field
1539
  */
1540
  function bbp_split_topic_form_fields() {
1541
  ?>
@@ -1546,6 +1624,22 @@ function bbp_split_topic_form_fields() {
1546
  <?php wp_nonce_field( 'bbp-split-topic_' . bbp_get_topic_id() );
1547
  }
1548
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1549
  /**
1550
  * Output a textarea or TinyMCE if enabled
1551
  *
@@ -1570,54 +1664,67 @@ function bbp_the_content( $args = array() ) {
1570
  * @uses bbp_is_edit() To see if we are editing something
1571
  * @uses wp_editor() To output the WordPress editor
1572
  *
1573
- * @return string HTML from output buffer
1574
  */
1575
  function bbp_get_the_content( $args = array() ) {
1576
 
1577
- // Default arguments
1578
- $defaults = array(
1579
- 'context' => 'topic',
1580
- 'before' => '<div class="bbp-the-content-wrapper">',
1581
- 'after' => '</div>',
1582
- 'wpautop' => true,
1583
- 'media_buttons' => false,
1584
- 'textarea_rows' => '12',
1585
- 'tabindex' => bbp_get_tab_index(),
1586
- 'editor_class' => 'bbp-the-content',
1587
- 'tinymce' => true,
1588
- 'teeny' => true,
1589
- 'quicktags' => true
1590
- );
1591
- $r = bbp_parse_args( $args, $defaults, 'get_the_content' );
1592
- extract( $r );
1593
 
1594
  // Assume we are not editing
1595
- $post_content = '';
1596
 
1597
  // Start an output buffor
1598
  ob_start();
1599
 
1600
  // Output something before the editor
1601
- if ( !empty( $before ) )
1602
- echo $before;
1603
-
1604
- // Get sanitized content
1605
- if ( bbp_is_edit() )
1606
- $post_content = call_user_func( 'bbp_get_form_' . $context . '_content' );
1607
 
1608
  // Use TinyMCE if available
1609
  if ( bbp_use_wp_editor() ) :
1610
- wp_editor( htmlspecialchars_decode( $post_content, ENT_QUOTES ), 'bbp_' . $context . '_content', array(
1611
- 'wpautop' => $wpautop,
1612
- 'media_buttons' => $media_buttons,
1613
- 'textarea_rows' => $textarea_rows,
1614
- 'tabindex' => $tabindex,
1615
- 'editor_class' => $editor_class,
1616
- 'tinymce' => $tinymce,
1617
- 'teeny' => $teeny,
1618
- 'quicktags' => $quicktags
 
 
 
 
 
 
 
 
 
 
1619
  ) );
1620
 
 
 
 
 
 
 
1621
  /**
1622
  * Fallback to normal textarea.
1623
  *
@@ -1626,13 +1733,14 @@ function bbp_the_content( $args = array() ) {
1626
  */
1627
  else : ?>
1628
 
1629
- <textarea id="bbp_<?php echo esc_attr( $context ); ?>_content" class="<?php echo esc_attr( $editor_class ); ?>" name="bbp_<?php echo esc_attr( $context ); ?>_content" cols="60" rows="<?php echo esc_attr( $textarea_rows ); ?>" tabindex="<?php echo esc_attr( $tabindex ); ?>"><?php echo $post_content; ?></textarea>
1630
 
1631
  <?php endif;
1632
 
1633
  // Output something after the editor
1634
- if ( !empty( $after ) )
1635
- echo $after;
 
1636
 
1637
  // Put the output into a usable variable
1638
  $output = ob_get_contents();
@@ -1643,6 +1751,83 @@ function bbp_the_content( $args = array() ) {
1643
  return apply_filters( 'bbp_get_the_content', $output, $args, $post_content );
1644
  }
1645
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1646
  /** Views *********************************************************************/
1647
 
1648
  /**
@@ -1878,8 +2063,9 @@ function bbp_breadcrumb( $args = array() ) {
1878
  // No custom home text
1879
  if ( empty( $args['home_text'] ) ) {
1880
 
1881
- // Set home text to page title
1882
  $front_id = get_option( 'page_on_front' );
 
 
1883
  if ( !empty( $front_id ) ) {
1884
  $pre_front_text = get_the_title( $front_id );
1885
 
@@ -1903,16 +2089,19 @@ function bbp_breadcrumb( $args = array() ) {
1903
  /** Includes **********************************************************/
1904
 
1905
  // Root slug is also the front page
1906
- if ( !empty( $front_id ) && ( $front_id == $root_id ) )
1907
  $pre_include_root = false;
 
1908
 
1909
  // Don't show root if viewing forum archive
1910
- if ( bbp_is_forum_archive() )
1911
  $pre_include_root = false;
 
1912
 
1913
  // Don't show root if viewing page in place of forum archive
1914
- if ( !empty( $root_id ) && ( ( is_single() || is_page() ) && ( $root_id == get_the_ID() ) ) )
1915
  $pre_include_root = false;
 
1916
 
1917
  /** Current Text ******************************************************/
1918
 
@@ -1966,18 +2155,18 @@ function bbp_breadcrumb( $args = array() ) {
1966
  /** Parse Args ********************************************************/
1967
 
1968
  // Parse args
1969
- $defaults = array(
1970
 
1971
  // HTML
1972
  'before' => '<div class="bbp-breadcrumb"><p>',
1973
  'after' => '</p></div>',
1974
-
1975
  // Separator
1976
- 'sep' => __( '&rsaquo;', 'bbpress' ),
1977
  'pad_sep' => 1,
1978
  'sep_before' => '<span class="bbp-breadcrumb-sep">',
1979
  'sep_after' => '</span>',
1980
-
1981
  // Crumbs
1982
  'crumb_before' => '',
1983
  'crumb_after' => '',
@@ -1995,22 +2184,22 @@ function bbp_breadcrumb( $args = array() ) {
1995
  'current_text' => $pre_current_text,
1996
  'current_before' => '<span class="bbp-breadcrumb-current">',
1997
  'current_after' => '</span>',
1998
- );
1999
- $r = bbp_parse_args( $args, $defaults, 'get_breadcrumb' );
2000
- extract( $r );
2001
 
2002
  /** Ancestors *********************************************************/
2003
 
2004
  // Get post ancestors
2005
- if ( is_singular() || bbp_is_forum_edit() || bbp_is_topic_edit() || bbp_is_reply_edit() )
2006
  $ancestors = array_reverse( (array) get_post_ancestors( get_the_ID() ) );
 
2007
 
2008
  // Do we want to include a link to home?
2009
- if ( !empty( $include_home ) || empty( $home_text ) )
2010
- $crumbs[] = '<a href="' . trailingslashit( home_url() ) . '" class="bbp-breadcrumb-home">' . $home_text . '</a>';
 
2011
 
2012
  // Do we want to include a link to the forum root?
2013
- if ( !empty( $include_root ) || empty( $root_text ) ) {
2014
 
2015
  // Page exists at root slug path, so use its permalink
2016
  $page = bbp_get_page_by_path( bbp_get_root_slug() );
@@ -2023,7 +2212,7 @@ function bbp_breadcrumb( $args = array() ) {
2023
  }
2024
 
2025
  // Add the breadcrumb
2026
- $crumbs[] = '<a href="' . $root_url . '" class="bbp-breadcrumb-root">' . $root_text . '</a>';
2027
  }
2028
 
2029
  // Ancestors exist
@@ -2063,23 +2252,30 @@ function bbp_breadcrumb( $args = array() ) {
2063
  // Edit topic tag
2064
  } elseif ( bbp_is_topic_tag_edit() ) {
2065
  $crumbs[] = '<a href="' . get_term_link( bbp_get_topic_tag_id(), bbp_get_topic_tag_tax_id() ) . '" class="bbp-breadcrumb-topic-tag">' . sprintf( __( 'Topic Tag: %s', 'bbpress' ), bbp_get_topic_tag_name() ) . '</a>';
 
 
 
 
2066
  }
2067
 
2068
  /** Current ***********************************************************/
2069
 
2070
  // Add current page to breadcrumb
2071
- if ( !empty( $include_current ) || empty( $pre_current_text ) )
2072
- $crumbs[] = $current_before . $current_text . $current_after;
 
2073
 
2074
  /** Separator *********************************************************/
2075
 
2076
  // Wrap the separator in before/after before padding and filter
2077
- if ( ! empty( $sep ) )
2078
- $sep = $sep_before . $sep . $sep_after;
 
2079
 
2080
  // Pad the separator
2081
- if ( !empty( $pad_sep ) )
2082
- $sep = str_pad( $sep, strlen( $sep ) + ( (int) $pad_sep * 2 ), ' ', STR_PAD_BOTH );
 
2083
 
2084
  /** Finish Up *********************************************************/
2085
 
@@ -2088,7 +2284,7 @@ function bbp_breadcrumb( $args = array() ) {
2088
  $crumbs = apply_filters( 'bbp_breadcrumbs', $crumbs );
2089
 
2090
  // Build the trail
2091
- $trail = !empty( $crumbs ) ? ( $before . $crumb_before . implode( $sep . $crumb_after . $crumb_before , $crumbs ) . $crumb_after . $after ) : '';
2092
 
2093
  return apply_filters( 'bbp_get_breadcrumb', $trail, $crumbs, $r );
2094
  }
@@ -2116,12 +2312,25 @@ function bbp_allowed_tags() {
2116
  *
2117
  * @since bbPress (r2780)
2118
  *
2119
- * @uses allowed_tags() To get the allowed tags
2120
  * @uses apply_filters() Calls 'bbp_allowed_tags' with the tags
2121
  * @return string HTML allowed tags entity encoded.
2122
  */
2123
  function bbp_get_allowed_tags() {
2124
- return apply_filters( 'bbp_get_allowed_tags', allowed_tags() );
 
 
 
 
 
 
 
 
 
 
 
 
 
2125
  }
2126
 
2127
  /** Errors & Messages *********************************************************/
@@ -2314,6 +2523,12 @@ function bbp_title( $title = '', $sep = '&raquo;', $seplocation = '' ) {
2314
  // Views
2315
  } elseif ( bbp_is_single_view() ) {
2316
  $title = sprintf( __( 'View: %s', 'bbpress' ), bbp_get_view_title() );
 
 
 
 
 
 
2317
  }
2318
 
2319
  // Filter the raw title
17
 
18
  /**
19
  * Ouput the forum URL
20
+ *
21
  * @since bbPress (r3979)
22
  *
23
  * @uses bbp_get_forums_url() To get the forums URL
28
  }
29
  /**
30
  * Return the forum URL
31
+ *
32
  * @since bbPress (r3979)
33
  *
34
  * @uses home_url() To get the home URL
478
  return (bool) apply_filters( 'bbp_is_reply_edit', $retval );
479
  }
480
 
481
+ /**
482
+ * Check if current page is a reply move page
483
+ *
484
+ * @uses bbp_is_reply_move() To check if it's a reply move page
485
+ * @return bool True if it's the reply move page, false if not
486
+ */
487
+ function bbp_is_reply_move() {
488
+
489
+ // Assume false
490
+ $retval = false;
491
+
492
+ // Check reply edit and GET params
493
+ if ( bbp_is_reply_edit() && !empty( $_GET['action'] ) && ( 'move' == $_GET['action'] ) )
494
+ $retval = true;
495
+
496
+ return (bool) apply_filters( 'bbp_is_reply_move', $retval );
497
+ }
498
+
499
  /**
500
  * Viewing a single reply
501
  *
762
  *
763
  * @since bbPress (r2789)
764
  *
765
+ * @global WP_Query $wp_query To check if WP_Query::bbp_is_view is true
766
  * @uses bbp_is_query_name() To get the query name
767
  * @return bool Is it a view page?
768
  */
783
  return (bool) apply_filters( 'bbp_is_single_view', $retval );
784
  }
785
 
786
+ /**
787
+ * Check if current page is a search page
788
+ *
789
+ * @since bbPress (r4579)
790
+ *
791
+ * @global WP_Query $wp_query To check if WP_Query::bbp_is_search is true
792
+ * @uses bbp_is_query_name() To get the query name
793
+ * @return bool Is it a search page?
794
+ */
795
+ function bbp_is_search() {
796
+ global $wp_query;
797
+
798
+ // Assume false
799
+ $retval = false;
800
+
801
+ // Check query
802
+ if ( !empty( $wp_query->bbp_is_search ) && ( true == $wp_query->bbp_is_search ) )
803
+ $retval = true;
804
+
805
+ // Check query name
806
+ if ( empty( $retval ) && bbp_is_query_name( 'bbp_search' ) )
807
+ $retval = true;
808
+
809
+ // Check $_GET
810
+ if ( empty( $retval ) && isset( $_GET[bbp_get_search_rewrite_id()] ) )
811
+ $retval = true;
812
+
813
+ return (bool) apply_filters( 'bbp_is_search', $retval );
814
+ }
815
+
816
  /**
817
  * Check if current page is an edit page
818
  *
848
  * @uses bbp_is_topic_split()
849
  * @uses bbp_is_single_reply()
850
  * @uses bbp_is_reply_edit()
851
+ * @uses bbp_is_reply_move()
852
  * @uses bbp_is_single_view()
853
  * @uses bbp_is_single_user_edit()
854
  * @uses bbp_is_single_user()
871
 
872
  /** Archives **************************************************************/
873
 
874
+ if ( bbp_is_forum_archive() ) {
875
  $bbp_classes[] = bbp_get_forum_post_type() . '-archive';
876
 
877
+ } elseif ( bbp_is_topic_archive() ) {
878
  $bbp_classes[] = bbp_get_topic_post_type() . '-archive';
879
 
880
  /** Topic Tags ************************************************************/
881
 
882
+ } elseif ( bbp_is_topic_tag() ) {
883
  $bbp_classes[] = bbp_get_topic_tag_tax_id();
884
  $bbp_classes[] = bbp_get_topic_tag_tax_id() . '-' . bbp_get_topic_tag_slug();
885
  $bbp_classes[] = bbp_get_topic_tag_tax_id() . '-' . bbp_get_topic_tag_id();
886
+ } elseif ( bbp_is_topic_tag_edit() ) {
 
 
887
  $bbp_classes[] = bbp_get_topic_tag_tax_id() . '-edit';
888
  $bbp_classes[] = bbp_get_topic_tag_tax_id() . '-' . bbp_get_topic_tag_slug() . '-edit';
889
  $bbp_classes[] = bbp_get_topic_tag_tax_id() . '-' . bbp_get_topic_tag_id() . '-edit';
 
890
 
891
  /** Components ************************************************************/
892
 
893
+ } elseif ( bbp_is_single_forum() ) {
894
  $bbp_classes[] = bbp_get_forum_post_type();
895
 
896
+ } elseif ( bbp_is_single_topic() ) {
897
  $bbp_classes[] = bbp_get_topic_post_type();
898
 
899
+ } elseif ( bbp_is_single_reply() ) {
900
  $bbp_classes[] = bbp_get_reply_post_type();
901
 
902
+ } elseif ( bbp_is_topic_edit() ) {
903
  $bbp_classes[] = bbp_get_topic_post_type() . '-edit';
904
 
905
+ } elseif ( bbp_is_topic_merge() ) {
906
  $bbp_classes[] = bbp_get_topic_post_type() . '-merge';
907
 
908
+ } elseif ( bbp_is_topic_split() ) {
909
  $bbp_classes[] = bbp_get_topic_post_type() . '-split';
910
 
911
+ } elseif ( bbp_is_reply_edit() ) {
912
  $bbp_classes[] = bbp_get_reply_post_type() . '-edit';
913
 
914
+ } elseif ( bbp_is_reply_move() ) {
915
+ $bbp_classes[] = bbp_get_reply_post_type() . '-move';
916
+
917
+ } elseif ( bbp_is_single_view() ) {
918
  $bbp_classes[] = 'bbp-view';
919
 
920
  /** User ******************************************************************/
921
 
922
+ } elseif ( bbp_is_single_user_edit() ) {
923
  $bbp_classes[] = 'bbp-user-edit';
924
  $bbp_classes[] = 'single';
925
  $bbp_classes[] = 'singular';
 
926
 
927
+ } elseif ( bbp_is_single_user() ) {
928
  $bbp_classes[] = 'bbp-user-page';
929
  $bbp_classes[] = 'single';
930
  $bbp_classes[] = 'singular';
 
931
 
932
+ } elseif ( bbp_is_user_home() ) {
933
  $bbp_classes[] = 'bbp-user-home';
934
  $bbp_classes[] = 'single';
935
  $bbp_classes[] = 'singular';
 
936
 
937
+ } elseif ( bbp_is_user_home_edit() ) {
938
  $bbp_classes[] = 'bbp-user-home-edit';
939
  $bbp_classes[] = 'single';
940
  $bbp_classes[] = 'singular';
 
941
 
942
+ } elseif ( bbp_is_topics_created() ) {
943
  $bbp_classes[] = 'bbp-topics-created';
944
  $bbp_classes[] = 'single';
945
  $bbp_classes[] = 'singular';
 
946
 
947
+ } elseif ( bbp_is_favorites() ) {
948
  $bbp_classes[] = 'bbp-favorites';
949
  $bbp_classes[] = 'single';
950
  $bbp_classes[] = 'singular';
 
951
 
952
+ } elseif ( bbp_is_subscriptions() ) {
953
  $bbp_classes[] = 'bbp-subscriptions';
954
  $bbp_classes[] = 'single';
955
  $bbp_classes[] = 'singular';
956
+
957
+ /** Search ****************************************************************/
958
+
959
+ } elseif ( bbp_is_search() ) {
960
+ $bbp_classes[] = 'bbp-search';
961
+ $bbp_classes[] = 'forum-search';
962
  }
963
 
964
  /** Clean up **************************************************************/
965
 
966
  // Add bbPress class if we are within a bbPress page
967
+ if ( !empty( $bbp_classes ) ) {
968
  $bbp_classes[] = 'bbPress';
969
+ }
970
 
971
  // Merge WP classes with bbPress classes and remove any duplicates
972
  $classes = array_unique( array_merge( (array) $bbp_classes, (array) $wp_classes ) );
986
  * @uses bbp_is_topic_split()
987
  * @uses bbp_is_single_reply()
988
  * @uses bbp_is_reply_edit()
989
+ * @uses bbp_is_reply_move()
990
  * @uses bbp_is_single_view()
991
  * @uses bbp_is_single_user_edit()
992
  * @uses bbp_is_single_user()
1003
 
1004
  /** Archives **************************************************************/
1005
 
1006
+ if ( bbp_is_forum_archive() ) {
1007
  $retval = true;
1008
 
1009
+ } elseif ( bbp_is_topic_archive() ) {
1010
  $retval = true;
1011
 
1012
  /** Topic Tags ************************************************************/
1013
 
1014
+ } elseif ( bbp_is_topic_tag() ) {
1015
  $retval = true;
1016
 
1017
+ } elseif ( bbp_is_topic_tag_edit() ) {
1018
  $retval = true;
1019
 
1020
  /** Components ************************************************************/
1021
 
1022
+ } elseif ( bbp_is_single_forum() ) {
1023
+ $retval = true;
1024
+
1025
+ } elseif ( bbp_is_single_topic() ) {
1026
  $retval = true;
1027
 
1028
+ } elseif ( bbp_is_single_reply() ) {
1029
  $retval = true;
1030
 
1031
+ } elseif ( bbp_is_topic_edit() ) {
1032
  $retval = true;
1033
 
1034
+ } elseif ( bbp_is_topic_merge() ) {
1035
  $retval = true;
1036
 
1037
+ } elseif ( bbp_is_topic_split() ) {
1038
  $retval = true;
1039
 
1040
+ } elseif ( bbp_is_reply_edit() ) {
1041
  $retval = true;
1042
 
1043
+ } elseif ( bbp_is_reply_move() ) {
1044
  $retval = true;
1045
 
1046
+ } elseif ( bbp_is_single_view() ) {
1047
  $retval = true;
1048
 
1049
  /** User ******************************************************************/
1050
 
1051
+ } elseif ( bbp_is_single_user_edit() ) {
1052
  $retval = true;
1053
 
1054
+ } elseif ( bbp_is_single_user() ) {
1055
  $retval = true;
1056
 
1057
+ } elseif ( bbp_is_user_home() ) {
1058
  $retval = true;
1059
 
1060
+ } elseif ( bbp_is_user_home_edit() ) {
1061
  $retval = true;
1062
 
1063
+ } elseif ( bbp_is_topics_created() ) {
1064
  $retval = true;
1065
 
1066
+ } elseif ( bbp_is_favorites() ) {
1067
  $retval = true;
1068
 
1069
+ } elseif ( bbp_is_subscriptions() ) {
1070
+ $retval = true;
1071
+
1072
+ /** Search ****************************************************************/
1073
+
1074
+ } elseif ( bbp_is_search() ) {
1075
  $retval = true;
1076
+ }
1077
 
1078
  /** Done ******************************************************************/
1079
 
1093
  * @uses apply_filters() Calls 'bbp_wp_login_action' with the url and args
1094
  */
1095
  function bbp_wp_login_action( $args = '' ) {
1096
+
1097
+ // Parse arguments against default values
1098
+ $r = bbp_parse_args( $args, array(
1099
  'action' => '',
1100
  'context' => ''
1101
+ ), 'login_action' );
1102
+
1103
+ // Add action as query arg
1104
+ if ( !empty( $r['action'] ) ) {
1105
+ $login_url = add_query_arg( array( 'action' => $r['action'] ), 'wp-login.php' );
1106
 
1107
+ // No query arg
1108
+ } else {
 
1109
  $login_url = 'wp-login.php';
1110
+ }
1111
 
1112
+ $login_url = site_url( $login_url, $r['context'] );
1113
 
1114
  echo apply_filters( 'bbp_wp_login_action', $login_url, $args );
1115
  }
1117
  /**
1118
  * Output hidden request URI field for user forms.
1119
  *
1120
+ * The referer link is the current Request URI from the server super global. To
1121
+ * check the field manually, use bbp_get_redirect_to().
1122
  *
1123
  * @since bbPress (r2815)
1124
  *
1125
+ * @param string $redirect_to Pass a URL to redirect to
1126
+ *
1127
  * @uses wp_get_referer() To get the referer
1128
  * @uses esc_attr() To escape the url
1129
+ * @uses apply_filters() Calls 'bbp_redirect_to_field', passes field and to
 
1130
  */
1131
  function bbp_redirect_to_field( $redirect_to = '' ) {
1132
 
 
 
 
 
1133
  // Make sure we are directing somewhere
1134
+ if ( empty( $redirect_to ) ) {
1135
+ if ( isset( $_SERVER['REQUEST_URI'] ) ) {
1136
+ $redirect_to = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
1137
+ } else {
1138
+ $redirect_to = wp_get_referer();
1139
+ }
1140
+ }
1141
 
1142
  // Remove loggedout query arg if it's there
1143
  $redirect_to = (string) esc_attr( remove_query_arg( 'loggedout', $redirect_to ) );
1271
  * box, the first value would of course be selected -
1272
  * though you can have that as none (pass 'show_none' arg))
1273
  * - sort_column: Sort by? Defaults to 'menu_order, post_title'
1274
+ * - post_parent: Post parent. Defaults to 0
1275
  * - post_status: Which all post_statuses to find in? Can be an array
1276
  * or CSV of publish, category, closed, private, spam,
1277
  * trash (based on post type) - if not set, these are
1306
 
1307
  /** Arguments *********************************************************/
1308
 
1309
+ // Parse arguments against default values
1310
+ $r = bbp_parse_args( $args, array(
1311
  'post_type' => bbp_get_forum_post_type(),
1312
  'selected' => 0,
1313
  'sort_column' => 'menu_order',
1314
+ 'exclude' => array(),
1315
+ 'post_parent' => null,
1316
  'numberposts' => -1,
1317
  'orderby' => 'menu_order',
1318
  'order' => 'ASC',
1326
  'none_found' => false,
1327
  'disable_categories' => true,
1328
  'disabled' => ''
1329
+ ), 'get_dropdown' );
 
1330
 
1331
  if ( empty( $r['walker'] ) ) {
1332
  $r['walker'] = new BBP_Walker_Dropdown();
1334
  }
1335
 
1336
  // Force 0
1337
+ if ( is_numeric( $r['selected'] ) && $r['selected'] < 0 ) {
1338
  $r['selected'] = 0;
1339
+ }
1340
 
1341
+ // Force array
1342
+ if ( !empty( $r['exclude'] ) && !is_array( $r['exclude'] ) ) {
1343
+ $r['exclude'] = explode( ',', $r['exclude'] );
1344
+ }
 
1345
 
1346
  /** Post Status *******************************************************/
1347
 
1352
  $post_stati[] = bbp_get_public_status_id();
1353
 
1354
  // Forums
1355
+ if ( bbp_get_forum_post_type() == $r['post_type'] ) {
1356
 
1357
  // Private forums
1358
  if ( current_user_can( 'read_private_forums' ) ) {
1370
 
1371
  /** Setup variables ***************************************************/
1372
 
1373
+ $name = esc_attr( $r['select_id'] );
1374
  $select_id = $name;
1375
+ $tab = (int) $r['tab'];
1376
  $retval = '';
1377
+ $disabled = disabled( isset( bbpress()->options[$r['disabled']] ), true, false );
1378
+ $post_arr = array(
1379
+ 'post_type' => $r['post_type'],
1380
+ 'post_status' => $r['post_status'],
1381
+ 'sort_column' => $r['sort_column'],
1382
+ 'exclude' => $r['exclude'],
1383
+ 'post_parent' => $r['post_parent'],
1384
+ 'numberposts' => $r['numberposts'],
1385
+ 'orderby' => $r['orderby'],
1386
+ 'order' => $r['order'],
1387
+ 'walker' => $r['walker'],
1388
+ 'disable_categories' => $r['disable_categories']
1389
+ );
1390
+
1391
+ $posts = get_posts( $post_arr );
1392
 
1393
  /** Drop Down *********************************************************/
1394
 
1395
  // Items found
1396
  if ( !empty( $posts ) ) {
1397
+ if ( empty( $r['options_only'] ) ) {
1398
  $tab = !empty( $tab ) ? ' tabindex="' . $tab . '"' : '';
1399
  $retval .= '<select name="' . $name . '" id="' . $select_id . '"' . $tab . $disabled . '>' . "\n";
1400
  }
1401
 
1402
+ $retval .= !empty( $r['show_none'] ) ? "\t<option value=\"\" class=\"level-0\">" . $r['show_none'] . '</option>' : '';
1403
  $retval .= walk_page_dropdown_tree( $posts, 0, $r );
1404
 
1405
+ if ( empty( $r['options_only'] ) ) {
1406
  $retval .= '</select>';
1407
+ }
1408
 
1409
  // No items found - Display feedback if no custom message was passed
1410
+ } elseif ( empty( $r['none_found'] ) ) {
1411
 
1412
  // Switch the response based on post type
1413
+ switch ( $r['post_type'] ) {
1414
 
1415
  // Topics
1416
  case bbp_get_topic_post_type() :
1613
  *
1614
  * @since bbPress (r2756)
1615
  *
1616
+ * @uses wp_nonce_field() To generate a hidden nonce field
1617
  */
1618
  function bbp_split_topic_form_fields() {
1619
  ?>
1624
  <?php wp_nonce_field( 'bbp-split-topic_' . bbp_get_topic_id() );
1625
  }
1626
 
1627
+ /**
1628
+ * Move reply form fields
1629
+ *
1630
+ * Output the required hidden fields when moving a reply
1631
+ *
1632
+ * @uses wp_nonce_field() To generate a hidden nonce field
1633
+ */
1634
+ function bbp_move_reply_form_fields() {
1635
+ ?>
1636
+
1637
+ <input type="hidden" name="action" id="bbp_post_action" value="bbp-move-reply" />
1638
+ <input type="hidden" name="bbp_reply_id" id="bbp_reply_id" value="<?php echo absint( $_GET['reply_id'] ); ?>" />
1639
+
1640
+ <?php wp_nonce_field( 'bbp-move-reply_' . bbp_get_reply_id() );
1641
+ }
1642
+
1643
  /**
1644
  * Output a textarea or TinyMCE if enabled
1645
  *
1664
  * @uses bbp_is_edit() To see if we are editing something
1665
  * @uses wp_editor() To output the WordPress editor
1666
  *
1667
+ * @return string HTML from output buffer
1668
  */
1669
  function bbp_get_the_content( $args = array() ) {
1670
 
1671
+ // Parse arguments against default values
1672
+ $r = bbp_parse_args( $args, array(
1673
+ 'context' => 'topic',
1674
+ 'before' => '<div class="bbp-the-content-wrapper">',
1675
+ 'after' => '</div>',
1676
+ 'wpautop' => true,
1677
+ 'media_buttons' => false,
1678
+ 'textarea_rows' => '12',
1679
+ 'tabindex' => bbp_get_tab_index(),
1680
+ 'tabfocus_elements' => 'bbp_topic_title,bbp_topic_tags',
1681
+ 'editor_class' => 'bbp-the-content',
1682
+ 'tinymce' => true,
1683
+ 'teeny' => true,
1684
+ 'quicktags' => true,
1685
+ 'dfw' => false
1686
+ ), 'get_the_content' );
1687
 
1688
  // Assume we are not editing
1689
+ $post_content = call_user_func( 'bbp_get_form_' . $r['context'] . '_content' );
1690
 
1691
  // Start an output buffor
1692
  ob_start();
1693
 
1694
  // Output something before the editor
1695
+ if ( !empty( $r['before'] ) ) {
1696
+ echo $r['before'];
1697
+ }
 
 
 
1698
 
1699
  // Use TinyMCE if available
1700
  if ( bbp_use_wp_editor() ) :
1701
+
1702
+ // Enable additional TinyMCE plugins before outputting the editor
1703
+ add_filter( 'tiny_mce_plugins', 'bbp_get_tiny_mce_plugins' );
1704
+ add_filter( 'teeny_mce_plugins', 'bbp_get_tiny_mce_plugins' );
1705
+ add_filter( 'teeny_mce_buttons', 'bbp_get_teeny_mce_buttons' );
1706
+ add_filter( 'quicktags_settings', 'bbp_get_quicktags_settings' );
1707
+
1708
+ // Output the editor
1709
+ wp_editor( htmlspecialchars_decode( $post_content, ENT_QUOTES ), 'bbp_' . $r['context'] . '_content', array(
1710
+ 'wpautop' => $r['wpautop'],
1711
+ 'media_buttons' => $r['media_buttons'],
1712
+ 'textarea_rows' => $r['textarea_rows'],
1713
+ 'tabindex' => $r['tabindex'],
1714
+ 'tabfocus_elements' => $r['tabfocus_elements'],
1715
+ 'editor_class' => $r['editor_class'],
1716
+ 'tinymce' => $r['tinymce'],
1717
+ 'teeny' => $r['teeny'],
1718
+ 'quicktags' => $r['quicktags'],
1719
+ 'dfw' => $r['dfw'],
1720
  ) );
1721
 
1722
+ // Remove additional TinyMCE plugins after outputting the editor
1723
+ remove_filter( 'tiny_mce_plugins', 'bbp_get_tiny_mce_plugins' );
1724
+ remove_filter( 'teeny_mce_plugins', 'bbp_get_tiny_mce_plugins' );
1725
+ remove_filter( 'teeny_mce_buttons', 'bbp_get_teeny_mce_buttons' );
1726
+ remove_filter( 'quicktags_settings', 'bbp_get_quicktags_settings' );
1727
+
1728
  /**
1729
  * Fallback to normal textarea.
1730
  *
1733
  */
1734
  else : ?>
1735
 
1736
+ <textarea id="bbp_<?php echo esc_attr( $r['context'] ); ?>_content" class="<?php echo esc_attr( $r['editor_class'] ); ?>" name="bbp_<?php echo esc_attr( $r['context'] ); ?>_content" cols="60" rows="<?php echo esc_attr( $r['textarea_rows'] ); ?>" tabindex="<?php echo esc_attr( $r['tabindex'] ); ?>"><?php echo $post_content; ?></textarea>
1737
 
1738
  <?php endif;
1739
 
1740
  // Output something after the editor
1741
+ if ( !empty( $r['after'] ) ) {
1742
+ echo $r['after'];
1743
+ }
1744
 
1745
  // Put the output into a usable variable
1746
  $output = ob_get_contents();
1751
  return apply_filters( 'bbp_get_the_content', $output, $args, $post_content );
1752
  }
1753
 
1754
+ /**
1755
+ * Edit TinyMCE plugins to match core behaviour
1756
+ *
1757
+ * @since bbPress (r4574)
1758
+ *
1759
+ * @param array $plugins
1760
+ * @see tiny_mce_plugins, teeny_mce_plugins
1761
+ * @return array
1762
+ */
1763
+ function bbp_get_tiny_mce_plugins( $plugins = array() ) {
1764
+
1765
+ // Unset fullscreen
1766
+ foreach ( $plugins as $key => $value ) {
1767
+ if ( 'fullscreen' == $value ) {
1768
+ unset( $plugins[$key] );
1769
+ break;
1770
+ }
1771
+ }
1772
+
1773
+ // Add the tabfocus plugin
1774
+ $plugins[] = 'tabfocus';
1775
+
1776
+ return apply_filters( 'bbp_get_tiny_mce_plugins', $plugins );
1777
+ }
1778
+
1779
+ /**
1780
+ * Edit TeenyMCE buttons to match allowedtags
1781
+ *
1782
+ * @since bbPress (r4605)
1783
+ *
1784
+ * @param array $buttons
1785
+ * @see teeny_mce_buttons
1786
+ * @return array
1787
+ */
1788
+ function bbp_get_teeny_mce_buttons( $buttons = array() ) {
1789
+
1790
+ // Remove some buttons from TeenyMCE
1791
+ $buttons = array_diff( $buttons, array(
1792
+ 'underline',
1793
+ 'justifyleft',
1794
+ 'justifycenter',
1795
+ 'justifyright'
1796
+ ) );
1797
+
1798
+ // Images
1799
+ array_push( $buttons, 'image' );
1800
+
1801
+ return apply_filters( 'bbp_get_teeny_mce_buttons', $buttons );
1802
+ }
1803
+
1804
+ /**
1805
+ * Edit TinyMCE quicktags buttons to match allowedtags
1806
+ *
1807
+ * @since bbPress (r4606)
1808
+ *
1809
+ * @param array $buttons
1810
+ * @see quicktags_settings
1811
+ * @return array Quicktags settings
1812
+ */
1813
+ function bbp_get_quicktags_settings( $settings = array() ) {
1814
+
1815
+ // Get buttons out of settings
1816
+ $buttons_array = explode( ',', $settings['buttons'] );
1817
+
1818
+ // Diff the ones we don't want out
1819
+ $buttons = array_diff( $buttons_array, array(
1820
+ 'ins',
1821
+ 'more',
1822
+ 'spell'
1823
+ ) );
1824
+
1825
+ // Put them back into a string in the $settings array
1826
+ $settings['buttons'] = implode( ',', $buttons );
1827
+
1828
+ return apply_filters( 'bbp_get_quicktags_settings', $settings );
1829
+ }
1830
+
1831
  /** Views *********************************************************************/
1832
 
1833
  /**
2063
  // No custom home text
2064
  if ( empty( $args['home_text'] ) ) {
2065
 
 
2066
  $front_id = get_option( 'page_on_front' );
2067
+
2068
+ // Set home text to page title
2069
  if ( !empty( $front_id ) ) {
2070
  $pre_front_text = get_the_title( $front_id );
2071
 
2089
  /** Includes **********************************************************/
2090
 
2091
  // Root slug is also the front page
2092
+ if ( !empty( $front_id ) && ( $front_id == $root_id ) ) {
2093
  $pre_include_root = false;
2094
+ }
2095
 
2096
  // Don't show root if viewing forum archive
2097
+ if ( bbp_is_forum_archive() ) {
2098
  $pre_include_root = false;
2099
+ }
2100
 
2101
  // Don't show root if viewing page in place of forum archive
2102
+ if ( !empty( $root_id ) && ( ( is_single() || is_page() ) && ( $root_id == get_the_ID() ) ) ) {
2103
  $pre_include_root = false;
2104
+ }
2105
 
2106
  /** Current Text ******************************************************/
2107
 
2155
  /** Parse Args ********************************************************/
2156
 
2157
  // Parse args
2158
+ $r = bbp_parse_args( $args, array(
2159
 
2160
  // HTML
2161
  'before' => '<div class="bbp-breadcrumb"><p>',
2162
  'after' => '</p></div>',
2163
+
2164
  // Separator
2165
+ 'sep' => is_rtl() ? __( '&lsaquo;', 'bbpress' ) : __( '&rsaquo;', 'bbpress' ),
2166
  'pad_sep' => 1,
2167
  'sep_before' => '<span class="bbp-breadcrumb-sep">',
2168
  'sep_after' => '</span>',
2169
+
2170
  // Crumbs
2171
  'crumb_before' => '',
2172
  'crumb_after' => '',
2184
  'current_text' => $pre_current_text,
2185
  'current_before' => '<span class="bbp-breadcrumb-current">',
2186
  'current_after' => '</span>',
2187
+ ), 'get_breadcrumb' );
 
 
2188
 
2189
  /** Ancestors *********************************************************/
2190
 
2191
  // Get post ancestors
2192
+ if ( is_singular() || bbp_is_forum_edit() || bbp_is_topic_edit() || bbp_is_reply_edit() ) {
2193
  $ancestors = array_reverse( (array) get_post_ancestors( get_the_ID() ) );
2194
+ }
2195
 
2196
  // Do we want to include a link to home?
2197
+ if ( !empty( $r['include_home'] ) || empty( $r['home_text'] ) ) {
2198
+ $crumbs[] = '<a href="' . trailingslashit( home_url() ) . '" class="bbp-breadcrumb-home">' . $r['home_text'] . '</a>';
2199
+ }
2200
 
2201
  // Do we want to include a link to the forum root?
2202
+ if ( !empty( $r['include_root'] ) || empty( $r['root_text'] ) ) {
2203
 
2204
  // Page exists at root slug path, so use its permalink
2205
  $page = bbp_get_page_by_path( bbp_get_root_slug() );
2212
  }
2213
 
2214
  // Add the breadcrumb
2215
+ $crumbs[] = '<a href="' . $root_url . '" class="bbp-breadcrumb-root">' . $r['root_text'] . '</a>';
2216
  }
2217
 
2218
  // Ancestors exist
2252
  // Edit topic tag
2253
  } elseif ( bbp_is_topic_tag_edit() ) {
2254
  $crumbs[] = '<a href="' . get_term_link( bbp_get_topic_tag_id(), bbp_get_topic_tag_tax_id() ) . '" class="bbp-breadcrumb-topic-tag">' . sprintf( __( 'Topic Tag: %s', 'bbpress' ), bbp_get_topic_tag_name() ) . '</a>';
2255
+
2256
+ // Search
2257
+ } elseif ( bbp_is_search() && bbp_get_search_terms() ) {
2258
+ $crumbs[] = '<a href="' . home_url( bbp_get_search_slug() ) . '" class="bbp-breadcrumb-search">' . __( 'Search', 'bbpress' ) . '</a>';
2259
  }
2260
 
2261
  /** Current ***********************************************************/
2262
 
2263
  // Add current page to breadcrumb
2264
+ if ( !empty( $r['include_current'] ) || empty( $r['pre_current_text'] ) ) {
2265
+ $crumbs[] = $r['current_before'] . $r['current_text'] . $r['current_after'];
2266
+ }
2267
 
2268
  /** Separator *********************************************************/
2269
 
2270
  // Wrap the separator in before/after before padding and filter
2271
+ if ( ! empty( $r['sep'] ) ) {
2272
+ $sep = $r['sep_before'] . $r['sep'] . $r['sep_after'];
2273
+ }
2274
 
2275
  // Pad the separator
2276
+ if ( !empty( $r['pad_sep'] ) ) {
2277
+ $sep = str_pad( $sep, strlen( $sep ) + ( (int) $r['pad_sep'] * 2 ), ' ', STR_PAD_BOTH );
2278
+ }
2279
 
2280
  /** Finish Up *********************************************************/
2281
 
2284
  $crumbs = apply_filters( 'bbp_breadcrumbs', $crumbs );
2285
 
2286
  // Build the trail
2287
+ $trail = !empty( $crumbs ) ? ( $r['before'] . $r['crumb_before'] . implode( $sep . $r['crumb_after'] . $r['crumb_before'] , $crumbs ) . $r['crumb_after'] . $r['after'] ) : '';
2288
 
2289
  return apply_filters( 'bbp_get_breadcrumb', $trail, $crumbs, $r );
2290
  }
2312
  *
2313
  * @since bbPress (r2780)
2314
  *
2315
+ * @uses bbp_kses_allowed_tags() To get the allowed tags
2316
  * @uses apply_filters() Calls 'bbp_allowed_tags' with the tags
2317
  * @return string HTML allowed tags entity encoded.
2318
  */
2319
  function bbp_get_allowed_tags() {
2320
+
2321
+ $allowed = '';
2322
+
2323
+ foreach ( (array) bbp_kses_allowed_tags() as $tag => $attributes ) {
2324
+ $allowed .= '<' . $tag;
2325
+ if ( 0 < count( $attributes ) ) {
2326
+ foreach ( array_keys( $attributes ) as $attribute ) {
2327
+ $allowed .= ' ' . $attribute . '=""';
2328
+ }
2329
+ }
2330
+ $allowed .= '> ';
2331
+ }
2332
+
2333
+ return apply_filters( 'bbp_get_allowed_tags', htmlentities( $allowed ) );
2334
  }
2335
 
2336
  /** Errors & Messages *********************************************************/
2523
  // Views
2524
  } elseif ( bbp_is_single_view() ) {
2525
  $title = sprintf( __( 'View: %s', 'bbpress' ), bbp_get_view_title() );
2526
+
2527
+ /** Search ****************************************************************/
2528
+
2529
+ // Search
2530
+ } elseif ( bbp_is_search() ) {
2531
+ $title = bbp_get_search_title();
2532
  }
2533
 
2534
  // Filter the raw title
includes/common/widgets.php CHANGED
@@ -64,16 +64,19 @@ class BBP_Login_Widget extends WP_Widget {
64
  * @uses get_template_part() To get the login/logged in form
65
  */
66
  public function widget( $args, $instance ) {
67
- extract( $args );
68
 
69
- $title = apply_filters( 'bbp_login_widget_title', $instance['title'] );
70
- $register = apply_filters( 'bbp_login_widget_register', $instance['register'] );
71
- $lostpass = apply_filters( 'bbp_login_widget_lostpass', $instance['lostpass'] );
72
 
73
- echo $before_widget;
 
 
 
 
 
74
 
75
  if ( !empty( $title ) )
76
- echo $before_title . $title . $after_title;
77
 
78
  if ( !is_user_logged_in() ) : ?>
79
 
@@ -140,7 +143,7 @@ class BBP_Login_Widget extends WP_Widget {
140
 
141
  <?php endif;
142
 
143
- echo $after_widget;
144
  }
145
 
146
  /**
@@ -255,16 +258,18 @@ class BBP_Views_Widget extends WP_Widget {
255
  // Only output widget contents if views exist
256
  if ( bbp_get_views() ) :
257
 
258
- extract( $args );
 
259
 
260
- $title = apply_filters( 'bbp_view_widget_title', $instance['title'] );
 
261
 
262
- echo $before_widget;
263
- echo $before_title . $title . $after_title; ?>
264
 
265
  <ul>
266
 
267
- <?php foreach ( bbp_get_views() as $view => $args ) : ?>
268
 
269
  <li><a class="bbp-view-title" href="<?php bbp_view_url( $view ); ?>" title="<?php bbp_view_title( $view ); ?>"><?php bbp_view_title( $view ); ?></a></li>
270
 
@@ -272,7 +277,7 @@ class BBP_Views_Widget extends WP_Widget {
272
 
273
  </ul>
274
 
275
- <?php echo $after_widget;
276
 
277
  endif;
278
  }
@@ -314,6 +319,108 @@ class BBP_Views_Widget extends WP_Widget {
314
  }
315
  }
316
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
317
  /**
318
  * bbPress Forum Widget
319
  *
@@ -374,9 +481,12 @@ class BBP_Forums_Widget extends WP_Widget {
374
  * @uses bbp_forum_title() To display the forum title
375
  */
376
  public function widget( $args, $instance ) {
377
- extract( $args );
378
 
379
- $title = apply_filters( 'bbp_forum_widget_title', $instance['title'] );
 
 
 
 
380
  $parent_forum = !empty( $instance['parent_forum'] ) ? $instance['parent_forum'] : '0';
381
 
382
  // Note: private and hidden forums will be excluded via the
@@ -391,8 +501,8 @@ class BBP_Forums_Widget extends WP_Widget {
391
 
392
  if ( $widget_query->have_posts() ) :
393
 
394
- echo $before_widget;
395
- echo $before_title . $title . $after_title; ?>
396
 
397
  <ul>
398
 
@@ -404,7 +514,7 @@ class BBP_Forums_Widget extends WP_Widget {
404
 
405
  </ul>
406
 
407
- <?php echo $after_widget;
408
 
409
  // Reset the $post global
410
  wp_reset_postdata();
@@ -523,9 +633,11 @@ class BBP_Topics_Widget extends WP_Widget {
523
  */
524
  public function widget( $args, $instance ) {
525
 
526
- extract( $args );
 
527
 
528
- $title = apply_filters( 'bbp_topic_widget_title', $instance['title'] );
 
529
  $max_shown = !empty( $instance['max_shown'] ) ? (int) $instance['max_shown'] : 5;
530
  $show_date = !empty( $instance['show_date'] ) ? 'on' : false;
531
  $show_user = !empty( $instance['show_user'] ) ? 'on' : false;
@@ -564,7 +676,7 @@ class BBP_Topics_Widget extends WP_Widget {
564
  'orderby' => 'meta_value',
565
  'order' => 'DESC',
566
  'meta_query' => array( bbp_exclude_forum_ids( 'meta_query' ) )
567
- );
568
  break;
569
 
570
  // Order by which topic was created most recently
@@ -579,26 +691,26 @@ class BBP_Topics_Widget extends WP_Widget {
579
  'show_stickes' => false,
580
  'order' => 'DESC',
581
  'meta_query' => array( bbp_exclude_forum_ids( 'meta_query' ) )
582
- );
583
  break;
584
  }
585
-
586
  // Note: private and hidden forums will be excluded via the
587
  // bbp_pre_get_posts_exclude_forums filter and function.
588
  $widget_query = new WP_Query( $topics_query );
589
 
590
  // Topics exist
591
- if ( $widget_query->have_posts() ) :
592
-
593
- echo $before_widget;
594
- echo $before_title . $title . $after_title; ?>
595
 
596
  <ul>
597
 
598
  <?php while ( $widget_query->have_posts() ) :
599
 
600
  $widget_query->the_post();
601
- $topic_id = bbp_get_topic_id( $widget_query->post->ID );
602
  $author_link = bbp_get_topic_author_link( array( 'post_id' => $topic_id, 'type' => 'both', 'size' => 14 ) ); ?>
603
 
604
  <li>
@@ -622,7 +734,7 @@ class BBP_Topics_Widget extends WP_Widget {
622
 
623
  </ul>
624
 
625
- <?php echo $after_widget;
626
 
627
  // Reset the $post global
628
  wp_reset_postdata();
@@ -683,6 +795,111 @@ class BBP_Topics_Widget extends WP_Widget {
683
  }
684
  }
685
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
686
  /**
687
  * bbPress Replies Widget
688
  *
@@ -743,9 +960,11 @@ class BBP_Replies_Widget extends WP_Widget {
743
  */
744
  public function widget( $args, $instance ) {
745
 
746
- extract( $args );
 
747
 
748
- $title = apply_filters( 'bbp_replies_widget_title', $instance['title'] );
 
749
  $max_shown = !empty( $instance['max_shown'] ) ? $instance['max_shown'] : '5';
750
  $show_date = !empty( $instance['show_date'] ) ? 'on' : false;
751
  $show_user = !empty( $instance['show_user'] ) ? 'on' : false;
@@ -763,8 +982,8 @@ class BBP_Replies_Widget extends WP_Widget {
763
  // Get replies and display them
764
  if ( $widget_query->have_posts() ) :
765
 
766
- echo $before_widget;
767
- echo $before_title . $title . $after_title; ?>
768
 
769
  <ul>
770
 
@@ -812,7 +1031,7 @@ class BBP_Replies_Widget extends WP_Widget {
812
 
813
  </ul>
814
 
815
- <?php echo $after_widget;
816
 
817
  // Reset the $post global
818
  wp_reset_postdata();
64
  * @uses get_template_part() To get the login/logged in form
65
  */
66
  public function widget( $args, $instance ) {
 
67
 
68
+ // Typical WordPress filter
69
+ $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
 
70
 
71
+ // bbPress filters
72
+ $title = apply_filters( 'bbp_login_widget_title', $instance['title'], $instance, $this->id_base );
73
+ $register = apply_filters( 'bbp_login_widget_register', $instance['register'], $instance, $this->id_base );
74
+ $lostpass = apply_filters( 'bbp_login_widget_lostpass', $instance['lostpass'], $instance, $this->id_base );
75
+
76
+ echo $args['before_widget'];
77
 
78
  if ( !empty( $title ) )
79
+ echo $args['before_title'] . $title . $args['after_title'];
80
 
81
  if ( !is_user_logged_in() ) : ?>
82
 
143
 
144
  <?php endif;
145
 
146
+ echo $args['after_widget'];
147
  }
148
 
149
  /**
258
  // Only output widget contents if views exist
259
  if ( bbp_get_views() ) :
260
 
261
+ // Typical WordPress filter
262
+ $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
263
 
264
+ // bbPress filter
265
+ $title = apply_filters( 'bbp_view_widget_title', $instance['title'], $instance, $this->id_base );
266
 
267
+ echo $args['before_widget'];
268
+ echo $args['before_title'] . $title . $args['after_title']; ?>
269
 
270
  <ul>
271
 
272
+ <?php foreach ( array_keys( bbp_get_views() ) as $view ) : ?>
273
 
274
  <li><a class="bbp-view-title" href="<?php bbp_view_url( $view ); ?>" title="<?php bbp_view_title( $view ); ?>"><?php bbp_view_title( $view ); ?></a></li>
275
 
277
 
278
  </ul>
279
 
280
+ <?php echo $args['after_widget'];
281
 
282
  endif;
283
  }
319
  }
320
  }
321
 
322
+ /**
323
+ * bbPress Search Widget
324
+ *
325
+ * Adds a widget which displays the forum search form
326
+ *
327
+ * @since bbPress (r4579)
328
+ *
329
+ * @uses WP_Widget
330
+ */
331
+ class BBP_Search_Widget extends WP_Widget {
332
+
333
+ /**
334
+ * bbPress Search Widget
335
+ *
336
+ * Registers the search widget
337
+ *
338
+ * @since bbPress (r4579)
339
+ *
340
+ * @uses apply_filters() Calls 'bbp_search_widget_options' with the
341
+ * widget options
342
+ */
343
+ public function __construct() {
344
+ $widget_ops = apply_filters( 'bbp_search_widget_options', array(
345
+ 'classname' => 'widget_display_search',
346
+ 'description' => __( 'The bbPress forum search form.', 'bbpress' )
347
+ ) );
348
+
349
+ parent::__construct( false, __( '(bbPress) Forum Search Form', 'bbpress' ), $widget_ops );
350
+ }
351
+
352
+ /**
353
+ * Register the widget
354
+ *
355
+ * @since bbPress (r4579)
356
+ *
357
+ * @uses register_widget()
358
+ */
359
+ public static function register_widget() {
360
+ register_widget( 'BBP_Search_Widget' );
361
+ }
362
+
363
+ /**
364
+ * Displays the output, the search form
365
+ *
366
+ * @since bbPress (r4579)
367
+ *
368
+ * @uses apply_filters() Calls 'bbp_search_widget_title' with the title
369
+ * @uses get_template_part() To get the search form
370
+ */
371
+ public function widget( $args, $instance ) {
372
+
373
+ // Typical WordPress filter
374
+ $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
375
+
376
+ // bbPress filter
377
+ $title = apply_filters( 'bbp_search_widget_title', $instance['title'], $instance, $this->id_base );
378
+
379
+ echo $args['before_widget'];
380
+ echo $args['before_title'] . $title . $args['after_title'];
381
+
382
+ bbp_get_template_part( 'form', 'search' );
383
+
384
+ echo $args['after_widget'];
385
+ }
386
+
387
+ /**
388
+ * Update the widget options
389
+ *
390
+ * @since bbPress (r4579)
391
+ *
392
+ * @param array $new_instance The new instance options
393
+ * @param array $old_instance The old instance options
394
+ */
395
+ public function update( $new_instance, $old_instance ) {
396
+ $instance = $old_instance;
397
+ $instance['title'] = strip_tags( $new_instance['title'] );
398
+
399
+ return $instance;
400
+ }
401
+
402
+ /**
403
+ * Output the search widget options form
404
+ *
405
+ * @since bbPress (r4579)
406
+ *
407
+ * @param $instance Instance
408
+ * @uses BBP_Search_Widget::get_field_id() To output the field id
409
+ * @uses BBP_Search_Widget::get_field_name() To output the field name
410
+ */
411
+ public function form( $instance ) {
412
+ $title = !empty( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; ?>
413
+
414
+ <p>
415
+ <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'bbpress' ); ?>
416
+ <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>" />
417
+ </label>
418
+ </p>
419
+
420
+ <?php
421
+ }
422
+ }
423
+
424
  /**
425
  * bbPress Forum Widget
426
  *
481
  * @uses bbp_forum_title() To display the forum title
482
  */
483
  public function widget( $args, $instance ) {
 
484
 
485
+ // Typical WordPress filter
486
+ $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
487
+
488
+ // bbPress filter
489
+ $title = apply_filters( 'bbp_forum_widget_title', $instance['title'], $instance, $this->id_base );
490
  $parent_forum = !empty( $instance['parent_forum'] ) ? $instance['parent_forum'] : '0';
491
 
492
  // Note: private and hidden forums will be excluded via the
501
 
502
  if ( $widget_query->have_posts() ) :
503
 
504
+ echo $args['before_widget'];
505
+ echo $args['before_title'] . $title . $args['after_title']; ?>
506
 
507
  <ul>
508
 
514
 
515
  </ul>
516
 
517
+ <?php echo $args['after_widget'];
518
 
519
  // Reset the $post global
520
  wp_reset_postdata();
633
  */
634
  public function widget( $args, $instance ) {
635
 
636
+ // Typical WordPress filter
637
+ $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
638
 
639
+ // bbPress filter
640
+ $title = apply_filters( 'bbp_topic_widget_title', $instance['title'], $instance, $this->id_base );
641
  $max_shown = !empty( $instance['max_shown'] ) ? (int) $instance['max_shown'] : 5;
642
  $show_date = !empty( $instance['show_date'] ) ? 'on' : false;
643
  $show_user = !empty( $instance['show_user'] ) ? 'on' : false;
676
  'orderby' => 'meta_value',
677
  'order' => 'DESC',
678
  'meta_query' => array( bbp_exclude_forum_ids( 'meta_query' ) )
679
+ );
680
  break;
681
 
682
  // Order by which topic was created most recently
691
  'show_stickes' => false,
692
  'order' => 'DESC',
693
  'meta_query' => array( bbp_exclude_forum_ids( 'meta_query' ) )
694
+ );
695
  break;
696
  }
697
+
698
  // Note: private and hidden forums will be excluded via the
699
  // bbp_pre_get_posts_exclude_forums filter and function.
700
  $widget_query = new WP_Query( $topics_query );
701
 
702
  // Topics exist
703
+ if ( $widget_query->have_posts() ) :
704
+
705
+ echo $args['before_widget'];
706
+ echo $args['before_title'] . $title . $args['after_title']; ?>
707
 
708
  <ul>
709
 
710
  <?php while ( $widget_query->have_posts() ) :
711
 
712
  $widget_query->the_post();
713
+ $topic_id = bbp_get_topic_id( $widget_query->post->ID );
714
  $author_link = bbp_get_topic_author_link( array( 'post_id' => $topic_id, 'type' => 'both', 'size' => 14 ) ); ?>
715
 
716
  <li>
734
 
735
  </ul>
736
 
737
+ <?php echo $args['after_widget'];
738
 
739
  // Reset the $post global
740
  wp_reset_postdata();
795
  }
796
  }
797
 
798
+ /**
799
+ * bbPress Stats Widget
800
+ *
801
+ * Adds a widget which displays the forum statistics
802
+ *
803
+ * @since bbPress (r4509)
804
+ *
805
+ * @uses WP_Widget
806
+ */
807
+ class BBP_Stats_Widget extends WP_Widget {
808
+
809
+ /**
810
+ * bbPress Stats Widget
811
+ *
812
+ * Registers the stats widget
813
+ *
814
+ * @since bbPress (r4509)
815
+ *
816
+ * @uses apply_filters() Calls 'bbp_stats_widget_options' with the
817
+ * widget options
818
+ */
819
+ public function __construct() {
820
+ $widget_ops = apply_filters( 'bbp_stats_widget_options', array(
821
+ 'classname' => 'widget_display_stats',
822
+ 'description' => __( 'Some statistics from your forum.', 'bbpress' )
823
+ ) );
824
+
825
+ parent::__construct( false, __( '(bbPress) Statistics', 'bbpress' ), $widget_ops );
826
+ }
827
+
828
+ /**
829
+ * Register the widget
830
+ *
831
+ * @since bbPress (r4509)
832
+ *
833
+ * @uses register_widget()
834
+ */
835
+ public static function register_widget() {
836
+ register_widget( 'BBP_Stats_Widget' );
837
+ }
838
+
839
+ /**
840
+ * Displays the output, the statistics
841
+ *
842
+ * @since bbPress (r4509)
843
+ *
844
+ * @param mixed $args Arguments
845
+ * @param array $instance Instance
846
+ *
847
+ * @uses apply_filters() Calls 'bbp_stats_widget_title' with the title
848
+ * @uses bbp_get_template_part() To get the content-forum-statistics template
849
+ */
850
+ public function widget( $args, $instance ) {
851
+
852
+ $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
853
+ $title = apply_filters( 'bbp_stats_widget_title', $instance['title'], $instance, $this->id_base );
854
+
855
+ echo $args['before_widget'];
856
+ echo $args['before_title'] . $title . $args['after_title'];
857
+
858
+ bbp_get_template_part( 'content', 'statistics' );
859
+
860
+ echo $args['after_widget'];
861
+ }
862
+
863
+ /**
864
+ * Update the stats widget options
865
+ *
866
+ * @since bbPress (r4509)
867
+ *
868
+ * @param array $new_instance The new instance options
869
+ * @param array $old_instance The old instance options
870
+ *
871
+ * @return array
872
+ */
873
+ public function update( $new_instance, $old_instance ) {
874
+ $instance = $old_instance;
875
+ $instance['title'] = strip_tags( $new_instance['title'] );
876
+
877
+ return $instance;
878
+ }
879
+
880
+ /**
881
+ * Output the stats widget options form
882
+ *
883
+ * @since bbPress (r4509)
884
+ *
885
+ * @param $instance
886
+ *
887
+ * @return string|void
888
+ */
889
+ public function form( $instance ) {
890
+ $title = !empty( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; ?>
891
+
892
+ <p>
893
+ <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'bbpress' ); ?>
894
+ <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>"
895
+ name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>"/>
896
+ </label>
897
+ </p>
898
+
899
+ <?php
900
+ }
901
+ }
902
+
903
  /**
904
  * bbPress Replies Widget
905
  *
960
  */
961
  public function widget( $args, $instance ) {
962
 
963
+ // Typical WordPress filter
964
+ $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
965
 
966
+ // bbPress filter
967
+ $title = apply_filters( 'bbp_replies_widget_title', $instance['title'], $instance, $this->id_base );
968
  $max_shown = !empty( $instance['max_shown'] ) ? $instance['max_shown'] : '5';
969
  $show_date = !empty( $instance['show_date'] ) ? 'on' : false;
970
  $show_user = !empty( $instance['show_user'] ) ? 'on' : false;
982
  // Get replies and display them
983
  if ( $widget_query->have_posts() ) :
984
 
985
+ echo $args['before_widget'];
986
+ echo $args['before_title'] . $title . $args['after_title']; ?>
987
 
988
  <ul>
989
 
1031
 
1032
  </ul>
1033
 
1034
+ <?php echo $args['after_widget'];
1035
 
1036
  // Reset the $post global
1037
  wp_reset_postdata();
includes/core/actions.php CHANGED
@@ -76,8 +76,8 @@ add_action( 'bbp_loaded', 'bbp_filter_user_roles_option', 16 );
76
  * The load order helps to execute code at the correct time.
77
  * v---Load order
78
  */
 
79
  add_action( 'bbp_init', 'bbp_register', 0 );
80
- add_action( 'bbp_init', 'bbp_load_textdomain', 10 );
81
  add_action( 'bbp_init', 'bbp_add_rewrite_tags', 20 );
82
  add_action( 'bbp_init', 'bbp_ready', 999 );
83
 
@@ -90,19 +90,11 @@ add_action( 'bbp_init', 'bbp_ready', 999 );
90
  add_action( 'bbp_setup_theme', 'bbp_add_forums_roles', 1 );
91
 
92
  /**
93
- * When switching to a new blog, a users mapped role will get wiped out by
94
- * WP_User::for_blog() and WP_User::_init_caps().
95
  *
96
- * This happens naturally in multisite setups during WP_Admin_Bar::initialize(),
97
- * which is annoying because it will happen on each page-load.
98
- *
99
- * Resetting the role on blog-switch enables us to maintain the user's dynamic
100
- * role between sites. Note that if a user already has a role on that site, no
101
- * mapping will occur.
102
- *
103
- * We also hook to 'bbp_setup_current_user' -- naturally.
104
  */
105
- add_action( 'switch_blog', 'bbp_set_current_user_default_role' );
106
  add_action( 'bbp_setup_current_user', 'bbp_set_current_user_default_role' );
107
 
108
  /**
@@ -138,9 +130,11 @@ add_action( 'bbp_after_setup_theme', 'bbp_load_theme_functions', 10 );
138
  // Widgets
139
  add_action( 'bbp_widgets_init', array( 'BBP_Login_Widget', 'register_widget' ), 10 );
140
  add_action( 'bbp_widgets_init', array( 'BBP_Views_Widget', 'register_widget' ), 10 );
 
141
  add_action( 'bbp_widgets_init', array( 'BBP_Forums_Widget', 'register_widget' ), 10 );
142
  add_action( 'bbp_widgets_init', array( 'BBP_Topics_Widget', 'register_widget' ), 10 );
143
  add_action( 'bbp_widgets_init', array( 'BBP_Replies_Widget', 'register_widget' ), 10 );
 
144
 
145
  // Template - Head, foot, errors and messages
146
  add_action( 'bbp_loaded', 'bbp_login_notices' );
@@ -202,6 +196,9 @@ add_action( 'bbp_edit_topic', 'bbp_update_topic', 10, 5 );
202
  add_action( 'bbp_merged_topic', 'bbp_merge_topic_count', 1, 3 );
203
  add_action( 'bbp_post_split_topic', 'bbp_split_topic_count', 1, 3 );
204
 
 
 
 
205
  // Before Delete/Trash/Untrash Topic
206
  add_action( 'wp_trash_post', 'bbp_trash_topic' );
207
  add_action( 'trash_post', 'bbp_trash_topic' );
@@ -218,9 +215,9 @@ add_action( 'bbp_trash_topic', 'bbp_remove_topic_from_all_favorites' );
218
  add_action( 'bbp_delete_topic', 'bbp_remove_topic_from_all_favorites' );
219
 
220
  // Subscriptions
221
- add_action( 'bbp_trash_topic', 'bbp_remove_topic_from_all_subscriptions' );
222
- add_action( 'bbp_delete_topic', 'bbp_remove_topic_from_all_subscriptions' );
223
- add_action( 'bbp_new_reply', 'bbp_notify_subscribers', 1, 5 );
224
 
225
  // Sticky
226
  add_action( 'bbp_trash_topic', 'bbp_unstick_topic' );
@@ -262,32 +259,41 @@ add_action( 'bbp_new_reply_post_extras', 'bbp_clean_post_cache' );
262
  /**
263
  * bbPress needs to redirect the user around in a few different circumstances:
264
  *
265
- * 1. Form submission within a theme (new and edit)
266
  * 2. Accessing private or hidden content (forums/topics/replies)
267
  * 3. Editing forums, topics, replies, users, and tags
 
268
  */
269
- add_action( 'bbp_template_redirect', 'bbp_forum_enforce_blocked', -1 );
270
- add_action( 'bbp_template_redirect', 'bbp_forum_enforce_hidden', -1 );
271
- add_action( 'bbp_template_redirect', 'bbp_forum_enforce_private', -1 );
272
- add_action( 'bbp_template_redirect', 'bbp_new_forum_handler', 10 );
273
- add_action( 'bbp_template_redirect', 'bbp_new_reply_handler', 10 );
274
- add_action( 'bbp_template_redirect', 'bbp_new_topic_handler', 10 );
275
- add_action( 'bbp_template_redirect', 'bbp_edit_topic_tag_handler', 1 );
276
- add_action( 'bbp_template_redirect', 'bbp_edit_user_handler', 1 );
277
- add_action( 'bbp_template_redirect', 'bbp_edit_forum_handler', 1 );
278
- add_action( 'bbp_template_redirect', 'bbp_edit_reply_handler', 1 );
279
- add_action( 'bbp_template_redirect', 'bbp_edit_topic_handler', 1 );
280
- add_action( 'bbp_template_redirect', 'bbp_merge_topic_handler', 1 );
281
- add_action( 'bbp_template_redirect', 'bbp_split_topic_handler', 1 );
282
- add_action( 'bbp_template_redirect', 'bbp_toggle_topic_handler', 1 );
283
- add_action( 'bbp_template_redirect', 'bbp_toggle_reply_handler', 1 );
284
- add_action( 'bbp_template_redirect', 'bbp_favorites_handler', 1 );
285
- add_action( 'bbp_template_redirect', 'bbp_subscriptions_handler', 1 );
286
- add_action( 'bbp_template_redirect', 'bbp_check_user_edit', 10 );
287
- add_action( 'bbp_template_redirect', 'bbp_check_forum_edit', 10 );
288
- add_action( 'bbp_template_redirect', 'bbp_check_topic_edit', 10 );
289
- add_action( 'bbp_template_redirect', 'bbp_check_reply_edit', 10 );
290
- add_action( 'bbp_template_redirect', 'bbp_check_topic_tag_edit', 10 );
 
 
 
 
 
 
 
 
291
 
292
  // Maybe convert the users password
293
  add_action( 'bbp_login_form_login', 'bbp_user_maybe_convert_pass' );
76
  * The load order helps to execute code at the correct time.
77
  * v---Load order
78
  */
79
+ add_action( 'bbp_init', 'bbp_load_textdomain', 0 );
80
  add_action( 'bbp_init', 'bbp_register', 0 );
 
81
  add_action( 'bbp_init', 'bbp_add_rewrite_tags', 20 );
82
  add_action( 'bbp_init', 'bbp_ready', 999 );
83
 
90
  add_action( 'bbp_setup_theme', 'bbp_add_forums_roles', 1 );
91
 
92
  /**
93
+ * When setting up the current user, make sure they have a role for the forums.
 
94
  *
95
+ * This is multisite aware, thanks to bbp_filter_user_roles_option(), hooked to
96
+ * the 'bbp_loaded' action above.
 
 
 
 
 
 
97
  */
 
98
  add_action( 'bbp_setup_current_user', 'bbp_set_current_user_default_role' );
99
 
100
  /**
130
  // Widgets
131
  add_action( 'bbp_widgets_init', array( 'BBP_Login_Widget', 'register_widget' ), 10 );
132
  add_action( 'bbp_widgets_init', array( 'BBP_Views_Widget', 'register_widget' ), 10 );
133
+ add_action( 'bbp_widgets_init', array( 'BBP_Search_Widget', 'register_widget' ), 10 );
134
  add_action( 'bbp_widgets_init', array( 'BBP_Forums_Widget', 'register_widget' ), 10 );
135
  add_action( 'bbp_widgets_init', array( 'BBP_Topics_Widget', 'register_widget' ), 10 );
136
  add_action( 'bbp_widgets_init', array( 'BBP_Replies_Widget', 'register_widget' ), 10 );
137
+ add_action( 'bbp_widgets_init', array( 'BBP_Stats_Widget', 'register_widget' ), 10 );
138
 
139
  // Template - Head, foot, errors and messages
140
  add_action( 'bbp_loaded', 'bbp_login_notices' );
196
  add_action( 'bbp_merged_topic', 'bbp_merge_topic_count', 1, 3 );
197
  add_action( 'bbp_post_split_topic', 'bbp_split_topic_count', 1, 3 );
198
 
199
+ // Move Reply
200
+ add_action( 'bbp_post_move_reply', 'bbp_move_reply_count', 1, 3 );
201
+
202
  // Before Delete/Trash/Untrash Topic
203
  add_action( 'wp_trash_post', 'bbp_trash_topic' );
204
  add_action( 'trash_post', 'bbp_trash_topic' );
215
  add_action( 'bbp_delete_topic', 'bbp_remove_topic_from_all_favorites' );
216
 
217
  // Subscriptions
218
+ add_action( 'bbp_trash_topic', 'bbp_remove_topic_from_all_subscriptions' );
219
+ add_action( 'bbp_delete_topic', 'bbp_remove_topic_from_all_subscriptions' );
220
+ add_action( 'bbp_new_reply', 'bbp_notify_subscribers', 11, 5 );
221
 
222
  // Sticky
223
  add_action( 'bbp_trash_topic', 'bbp_unstick_topic' );
259
  /**
260
  * bbPress needs to redirect the user around in a few different circumstances:
261
  *
262
+ * 1. POST and GET requests
263
  * 2. Accessing private or hidden content (forums/topics/replies)
264
  * 3. Editing forums, topics, replies, users, and tags
265
+ * 4. bbPress specific AJAX requests
266
  */
267
+ add_action( 'bbp_template_redirect', 'bbp_forum_enforce_blocked', 1 );
268
+ add_action( 'bbp_template_redirect', 'bbp_forum_enforce_hidden', 1 );
269
+ add_action( 'bbp_template_redirect', 'bbp_forum_enforce_private', 1 );
270
+ add_action( 'bbp_template_redirect', 'bbp_post_request', 10 );
271
+ add_action( 'bbp_template_redirect', 'bbp_get_request', 10 );
272
+ add_action( 'bbp_template_redirect', 'bbp_check_user_edit', 10 );
273
+ add_action( 'bbp_template_redirect', 'bbp_check_forum_edit', 10 );
274
+ add_action( 'bbp_template_redirect', 'bbp_check_topic_edit', 10 );
275
+ add_action( 'bbp_template_redirect', 'bbp_check_reply_edit', 10 );
276
+ add_action( 'bbp_template_redirect', 'bbp_check_topic_tag_edit', 10 );
277
+
278
+ // Theme-side POST requests
279
+ add_action( 'bbp_post_request', 'bbp_do_ajax', 1 );
280
+ add_action( 'bbp_post_request', 'bbp_edit_topic_tag_handler', 1 );
281
+ add_action( 'bbp_post_request', 'bbp_edit_user_handler', 1 );
282
+ add_action( 'bbp_post_request', 'bbp_edit_forum_handler', 1 );
283
+ add_action( 'bbp_post_request', 'bbp_edit_reply_handler', 1 );
284
+ add_action( 'bbp_post_request', 'bbp_edit_topic_handler', 1 );
285
+ add_action( 'bbp_post_request', 'bbp_merge_topic_handler', 1 );
286
+ add_action( 'bbp_post_request', 'bbp_split_topic_handler', 1 );
287
+ add_action( 'bbp_post_request', 'bbp_move_reply_handler', 1 );
288
+ add_action( 'bbp_post_request', 'bbp_new_forum_handler', 10 );
289
+ add_action( 'bbp_post_request', 'bbp_new_reply_handler', 10 );
290
+ add_action( 'bbp_post_request', 'bbp_new_topic_handler', 10 );
291
+
292
+ // Theme-side GET requests
293
+ add_action( 'bbp_get_request', 'bbp_toggle_topic_handler', 1 );
294
+ add_action( 'bbp_get_request', 'bbp_toggle_reply_handler', 1 );
295
+ add_action( 'bbp_get_request', 'bbp_favorites_handler', 1 );
296
+ add_action( 'bbp_get_request', 'bbp_subscriptions_handler', 1 );
297
 
298
  // Maybe convert the users password
299
  add_action( 'bbp_login_form_login', 'bbp_user_maybe_convert_pass' );
includes/core/capabilities.php CHANGED
@@ -332,7 +332,7 @@ function bbp_add_forums_roles() {
332
 
333
  foreach( bbp_get_dynamic_roles() as $role_id => $details ) {
334
  $wp_roles->roles[$role_id] = $details;
335
- $wp_roles->role_objects[$role_id] = new WP_Role( $details['name'], $details['capabilities'] );
336
  $wp_roles->role_names[$role_id] = $details['name'];
337
  }
338
  }
@@ -363,6 +363,9 @@ function bbp_filter_user_roles_option() {
363
  * Because dynamic multiple roles is a new concept in WordPress, we work around
364
  * it here for now, knowing that improvements will come to WordPress core later.
365
  *
 
 
 
366
  * @see switch_to_blog()
367
  * @see restore_current_blog()
368
  * @see WP_Roles::_init()
332
 
333
  foreach( bbp_get_dynamic_roles() as $role_id => $details ) {
334
  $wp_roles->roles[$role_id] = $details;
335
+ $wp_roles->role_objects[$role_id] = new WP_Role( $role_id, $details['capabilities'] );
336
  $wp_roles->role_names[$role_id] = $details['name'];
337
  }
338
  }
363
  * Because dynamic multiple roles is a new concept in WordPress, we work around
364
  * it here for now, knowing that improvements will come to WordPress core later.
365
  *
366
+ * Also note that if using the $wp_user_roles global non-database approach,
367
+ * bbPress does not have an intercept point to add its dynamic roles.
368
+ *
369
  * @see switch_to_blog()
370
  * @see restore_current_blog()
371
  * @see WP_Roles::_init()
includes/core/filters.php CHANGED
@@ -86,24 +86,24 @@ add_filter( 'bbp_get_reply_permalink', 'bbp_add_view_all' );
86
  add_filter( 'bbp_get_forum_permalink', 'bbp_add_view_all' );
87
 
88
  // wp_filter_kses on new/edit topic/reply title
89
- add_filter( 'bbp_new_reply_pre_title', 'wp_filter_kses' );
90
- add_filter( 'bbp_new_topic_pre_title', 'wp_filter_kses' );
91
- add_filter( 'bbp_edit_reply_pre_title', 'wp_filter_kses' );
92
- add_filter( 'bbp_edit_topic_pre_title', 'wp_filter_kses' );
93
 
94
  // balanceTags, wp_filter_kses and wp_rel_nofollow on new/edit topic/reply text
95
- add_filter( 'bbp_new_reply_pre_content', 'balanceTags' );
96
- add_filter( 'bbp_new_reply_pre_content', 'wp_rel_nofollow' );
97
- add_filter( 'bbp_new_reply_pre_content', 'wp_filter_kses' );
98
- add_filter( 'bbp_new_topic_pre_content', 'balanceTags' );
99
- add_filter( 'bbp_new_topic_pre_content', 'wp_rel_nofollow' );
100
- add_filter( 'bbp_new_topic_pre_content', 'wp_filter_kses' );
101
- add_filter( 'bbp_edit_reply_pre_content', 'balanceTags' );
102
- add_filter( 'bbp_edit_reply_pre_content', 'wp_rel_nofollow' );
103
- add_filter( 'bbp_edit_reply_pre_content', 'wp_filter_kses' );
104
- add_filter( 'bbp_edit_topic_pre_content', 'balanceTags' );
105
- add_filter( 'bbp_edit_topic_pre_content', 'wp_rel_nofollow' );
106
- add_filter( 'bbp_edit_topic_pre_content', 'wp_filter_kses' );
107
 
108
  // No follow and stripslashes on user profile links
109
  add_filter( 'bbp_get_reply_author_link', 'wp_rel_nofollow' );
@@ -120,22 +120,22 @@ add_filter( 'bbp_get_user_profile_edit_link', 'wp_rel_nofollow' );
120
  add_filter( 'bbp_get_user_profile_edit_link', 'stripslashes' );
121
 
122
  // Run filters on reply content
123
- add_filter( 'bbp_get_reply_content', 'capital_P_dangit' );
124
- add_filter( 'bbp_get_reply_content', 'wptexturize', 3 );
125
- add_filter( 'bbp_get_reply_content', 'convert_chars', 5 );
126
- add_filter( 'bbp_get_reply_content', 'make_clickable', 9 );
127
- add_filter( 'bbp_get_reply_content', 'force_balance_tags', 25 );
128
  add_filter( 'bbp_get_reply_content', 'convert_smilies', 20 );
 
129
  add_filter( 'bbp_get_reply_content', 'wpautop', 30 );
130
  add_filter( 'bbp_get_reply_content', 'bbp_mention_filter', 40 );
131
 
132
  // Run filters on topic content
133
- add_filter( 'bbp_get_topic_content', 'capital_P_dangit' );
134
- add_filter( 'bbp_get_topic_content', 'wptexturize', 3 );
135
- add_filter( 'bbp_get_topic_content', 'convert_chars', 5 );
136
- add_filter( 'bbp_get_topic_content', 'make_clickable', 9 );
137
- add_filter( 'bbp_get_topic_content', 'force_balance_tags', 25 );
138
  add_filter( 'bbp_get_topic_content', 'convert_smilies', 20 );
 
139
  add_filter( 'bbp_get_topic_content', 'wpautop', 30 );
140
  add_filter( 'bbp_get_topic_content', 'bbp_mention_filter', 40 );
141
 
@@ -151,15 +151,27 @@ add_filter( 'bbp_get_topic_voice_count', 'bbp_number_format', 10 );
151
  add_filter( 'bbp_get_topic_reply_count', 'bbp_number_format', 10 );
152
  add_filter( 'bbp_get_topic_post_count', 'bbp_number_format', 10 );
153
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  // Run wp_kses_data on topic/reply content in admin section
155
  if ( is_admin() ) {
156
- add_filter( 'bbp_get_reply_content', 'wp_kses_data' );
157
- add_filter( 'bbp_get_topic_content', 'wp_kses_data' );
158
 
159
  // Revisions (only when not in admin)
160
  } else {
161
- add_filter( 'bbp_get_reply_content', 'bbp_reply_content_append_revisions', 1, 2 );
162
- add_filter( 'bbp_get_topic_content', 'bbp_topic_content_append_revisions', 1, 2 );
163
  }
164
 
165
  // Suppress private forum details
@@ -182,6 +194,15 @@ add_filter( 'bbp_get_topicsplit_template', 'bbp_add_template_locations' );
182
  add_filter( 'bbp_get_topicmerge_template', 'bbp_add_template_locations' );
183
  add_filter( 'bbp_get_topictag_template', 'bbp_add_template_locations' );
184
  add_filter( 'bbp_get_topictagedit_template', 'bbp_add_template_locations' );
 
 
 
 
 
 
 
 
 
185
 
186
  /**
187
  * Add filters to anonymous post author data
86
  add_filter( 'bbp_get_forum_permalink', 'bbp_add_view_all' );
87
 
88
  // wp_filter_kses on new/edit topic/reply title
89
+ add_filter( 'bbp_new_reply_pre_title', 'wp_filter_kses' );
90
+ add_filter( 'bbp_new_topic_pre_title', 'wp_filter_kses' );
91
+ add_filter( 'bbp_edit_reply_pre_title', 'wp_filter_kses' );
92
+ add_filter( 'bbp_edit_topic_pre_title', 'wp_filter_kses' );
93
 
94
  // balanceTags, wp_filter_kses and wp_rel_nofollow on new/edit topic/reply text
95
+ add_filter( 'bbp_new_reply_pre_content', 'wp_rel_nofollow' );
96
+ add_filter( 'bbp_new_reply_pre_content', 'bbp_filter_kses' );
97
+ add_filter( 'bbp_new_reply_pre_content', 'balanceTags', 50 );
98
+ add_filter( 'bbp_new_topic_pre_content', 'wp_rel_nofollow' );
99
+ add_filter( 'bbp_new_topic_pre_content', 'bbp_filter_kses' );
100
+ add_filter( 'bbp_new_topic_pre_content', 'balanceTags', 50 );
101
+ add_filter( 'bbp_edit_reply_pre_content', 'wp_rel_nofollow' );
102
+ add_filter( 'bbp_edit_reply_pre_content', 'bbp_filter_kses' );
103
+ add_filter( 'bbp_edit_reply_pre_content', 'balanceTags', 50 );
104
+ add_filter( 'bbp_edit_topic_pre_content', 'wp_rel_nofollow' );
105
+ add_filter( 'bbp_edit_topic_pre_content', 'bbp_filter_kses' );
106
+ add_filter( 'bbp_edit_topic_pre_content', 'balanceTags', 50 );
107
 
108
  // No follow and stripslashes on user profile links
109
  add_filter( 'bbp_get_reply_author_link', 'wp_rel_nofollow' );
120
  add_filter( 'bbp_get_user_profile_edit_link', 'stripslashes' );
121
 
122
  // Run filters on reply content
123
+ add_filter( 'bbp_get_reply_content', 'make_clickable', 4 );
124
+ add_filter( 'bbp_get_reply_content', 'wptexturize', 6 );
125
+ add_filter( 'bbp_get_reply_content', 'convert_chars', 8 );
126
+ add_filter( 'bbp_get_reply_content', 'capital_P_dangit', 10 );
 
127
  add_filter( 'bbp_get_reply_content', 'convert_smilies', 20 );
128
+ add_filter( 'bbp_get_reply_content', 'force_balance_tags', 25 );
129
  add_filter( 'bbp_get_reply_content', 'wpautop', 30 );
130
  add_filter( 'bbp_get_reply_content', 'bbp_mention_filter', 40 );
131
 
132
  // Run filters on topic content
133
+ add_filter( 'bbp_get_topic_content', 'make_clickable', 4 );
134
+ add_filter( 'bbp_get_topic_content', 'wptexturize', 6 );
135
+ add_filter( 'bbp_get_topic_content', 'convert_chars', 8 );
136
+ add_filter( 'bbp_get_topic_content', 'capital_P_dangit', 10 );
 
137
  add_filter( 'bbp_get_topic_content', 'convert_smilies', 20 );
138
+ add_filter( 'bbp_get_topic_content', 'force_balance_tags', 25 );
139
  add_filter( 'bbp_get_topic_content', 'wpautop', 30 );
140
  add_filter( 'bbp_get_topic_content', 'bbp_mention_filter', 40 );
141
 
151
  add_filter( 'bbp_get_topic_reply_count', 'bbp_number_format', 10 );
152
  add_filter( 'bbp_get_topic_post_count', 'bbp_number_format', 10 );
153
 
154
+ // Code filters on input
155
+ add_filter( 'bbp_new_reply_pre_content', 'bbp_code_trick_reverse' );
156
+ add_filter( 'bbp_edit_reply_pre_content', 'bbp_code_trick_reverse' );
157
+ add_filter( 'bbp_new_topic_pre_content', 'bbp_code_trick_reverse' );
158
+ add_filter( 'bbp_edit_topic_pre_content', 'bbp_code_trick_reverse' );
159
+
160
+ // Code filters on output (hooked in early for plugin compatibility)
161
+ add_filter( 'bbp_get_reply_content', 'bbp_code_trick', 4 );
162
+ add_filter( 'bbp_get_reply_content', 'bbp_encode_bad', 6 );
163
+ add_filter( 'bbp_get_topic_content', 'bbp_code_trick', 4 );
164
+ add_filter( 'bbp_get_topic_content', 'bbp_encode_bad', 6 );
165
+
166
  // Run wp_kses_data on topic/reply content in admin section
167
  if ( is_admin() ) {
168
+ add_filter( 'bbp_get_reply_content', 'bbp_kses_data' );
169
+ add_filter( 'bbp_get_topic_content', 'bbp_kses_data' );
170
 
171
  // Revisions (only when not in admin)
172
  } else {
173
+ add_filter( 'bbp_get_reply_content', 'bbp_reply_content_append_revisions', 99, 2 );
174
+ add_filter( 'bbp_get_topic_content', 'bbp_topic_content_append_revisions', 99, 2 );
175
  }
176
 
177
  // Suppress private forum details
194
  add_filter( 'bbp_get_topicmerge_template', 'bbp_add_template_locations' );
195
  add_filter( 'bbp_get_topictag_template', 'bbp_add_template_locations' );
196
  add_filter( 'bbp_get_topictagedit_template', 'bbp_add_template_locations' );
197
+ add_filter( 'bbp_get_replymove_template', 'bbp_add_template_locations' );
198
+
199
+ // Topic and reply author display names
200
+ add_filter( 'bbp_get_topic_author_display_name', 'wptexturize' );
201
+ add_filter( 'bbp_get_topic_author_display_name', 'convert_chars' );
202
+ add_filter( 'bbp_get_topic_author_display_name', 'esc_html' );
203
+ add_filter( 'bbp_get_reply_author_display_name', 'wptexturize' );
204
+ add_filter( 'bbp_get_reply_author_display_name', 'convert_chars' );
205
+ add_filter( 'bbp_get_reply_author_display_name', 'esc_html' );
206
 
207
  /**
208
  * Add filters to anonymous post author data
includes/core/functions.php CHANGED
@@ -281,6 +281,8 @@ function bbp_has_errors() {
281
  return apply_filters( 'bbp_has_errors', $has_errors, bbpress()->errors );
282
  }
283
 
 
 
284
  /**
285
  * Searches through the content to locate usernames, designated by an @ sign.
286
  *
@@ -320,12 +322,12 @@ function bbp_mention_filter( $content = '' ) {
320
  foreach( (array) $usernames as $username ) {
321
 
322
  // Skip if username does not exist or user is not active
323
- $user_id = username_exists( $username );
324
- if ( empty( $user_id ) || bbp_is_user_inactive( $user_id ) )
325
  continue;
326
 
327
  // Replace name in content
328
- $content = preg_replace( '/(@' . $username . '\b)/', "<a href='" . bbp_get_user_profile_url( $user_id ) . "' rel='nofollow' class='bbp-mention-link $username'>@$username</a>", $content );
329
  }
330
 
331
  // Return modified content
@@ -435,7 +437,7 @@ function bbp_get_user_rewrite_id() {
435
  }
436
 
437
  /**
438
- * Return the enique ID for all edit rewrite rules (forum|topic|reply|tag|user)
439
  *
440
  * @since bbPress (r3762)
441
  * @return string
@@ -444,6 +446,17 @@ function bbp_get_edit_rewrite_id() {
444
  return bbpress()->edit_id;
445
  }
446
 
 
 
 
 
 
 
 
 
 
 
 
447
  /**
448
  * Return the unique ID for user topics rewrite rules
449
  *
281
  return apply_filters( 'bbp_has_errors', $has_errors, bbpress()->errors );
282
  }
283
 
284
+ /** Mentions ******************************************************************/
285
+
286
  /**
287
  * Searches through the content to locate usernames, designated by an @ sign.
288
  *
322
  foreach( (array) $usernames as $username ) {
323
 
324
  // Skip if username does not exist or user is not active
325
+ $user = get_user_by( 'slug', $username );
326
+ if ( empty( $user->ID ) || bbp_is_user_inactive( $user->ID ) )
327
  continue;
328
 
329
  // Replace name in content
330
+ $content = preg_replace( '/(@' . $username . '\b)/', "<a href='" . bbp_get_user_profile_url( $user->ID ) . "' rel='nofollow' class='bbp-mention-link {$username}'>@{$username}</a>", $content );
331
  }
332
 
333
  // Return modified content
437
  }
438
 
439
  /**
440
+ * Return the unique ID for all edit rewrite rules (forum|topic|reply|tag|user)
441
  *
442
  * @since bbPress (r3762)
443
  * @return string
446
  return bbpress()->edit_id;
447
  }
448
 
449
+ /**
450
+ * Return the unique ID for all search rewrite rules
451
+ *
452
+ * @since bbPress (r4579)
453
+ *
454
+ * @return string
455
+ */
456
+ function bbp_get_search_rewrite_id() {
457
+ return bbpress()->search_id;
458
+ }
459
+
460
  /**
461
  * Return the unique ID for user topics rewrite rules
462
  *
includes/core/options.php CHANGED
@@ -79,6 +79,7 @@ function bbp_get_default_options() {
79
  /** Other Slugs *******************************************************/
80
 
81
  '_bbp_view_slug' => 'view', // View slug
 
82
 
83
  /** Topics ************************************************************/
84
 
@@ -499,6 +500,17 @@ function bbp_get_view_slug( $default = 'view' ) {
499
  return apply_filters( 'bbp_get_view_slug', bbp_maybe_get_root_slug() . get_option( '_bbp_view_slug', $default ) );
500
  }
501
 
 
 
 
 
 
 
 
 
 
 
 
502
  /** Legacy ********************************************************************/
503
 
504
  /**
79
  /** Other Slugs *******************************************************/
80
 
81
  '_bbp_view_slug' => 'view', // View slug
82
+ '_bbp_search_slug' => 'search', // Search slug
83
 
84
  /** Topics ************************************************************/
85
 
500
  return apply_filters( 'bbp_get_view_slug', bbp_maybe_get_root_slug() . get_option( '_bbp_view_slug', $default ) );
501
  }
502
 
503
+ /**
504
+ * Return the search slug
505
+ *
506
+ * @since bbPress (r4579)
507
+ *
508
+ * @return string
509
+ */
510
+ function bbp_get_search_slug( $default = 'search' ) {
511
+ return apply_filters( 'bbp_get_search_slug', bbp_maybe_get_root_slug() . get_option( '_bbp_search_slug', $default ) );
512
+ }
513
+
514
  /** Legacy ********************************************************************/
515
 
516
  /**
includes/core/sub-actions.php CHANGED
@@ -317,6 +317,46 @@ function bbp_after_setup_theme() {
317
  do_action( 'bbp_after_setup_theme' );
318
  }
319
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
320
  /**
321
  * Filter the plugin locale and domain.
322
  *
@@ -329,8 +369,6 @@ function bbp_plugin_locale( $locale = '', $domain = '' ) {
329
  return apply_filters( 'bbp_plugin_locale', $locale, $domain );
330
  }
331
 
332
- /** Filters *******************************************************************/
333
-
334
  /**
335
  * Piggy back filter for WordPress's 'request' filter
336
  *
317
  do_action( 'bbp_after_setup_theme' );
318
  }
319
 
320
+ /**
321
+ * The main action used for handling theme-side POST requests
322
+ *
323
+ * @since bbPress (r4550)
324
+ * @uses do_action()
325
+ */
326
+ function bbp_post_request() {
327
+
328
+ // Bail if not a POST action
329
+ if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
330
+ return;
331
+
332
+ // Bail if action is not bbp-new-reply
333
+ if ( empty( $_POST['action'] ) )
334
+ return;
335
+
336
+ do_action( 'bbp_post_request', $_POST['action'] );
337
+ }
338
+
339
+ /**
340
+ * The main action used for handling theme-side GET requests
341
+ *
342
+ * @since bbPress (r4550)
343
+ * @uses do_action()
344
+ */
345
+ function bbp_get_request() {
346
+
347
+ // Bail if not a POST action
348
+ if ( 'GET' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
349
+ return;
350
+
351
+ // Bail if action is not bbp-new-reply
352
+ if ( empty( $_GET['action'] ) )
353
+ return;
354
+
355
+ do_action( 'bbp_get_request', $_GET['action'] );
356
+ }
357
+
358
+ /** Filters *******************************************************************/
359
+
360
  /**
361
  * Filter the plugin locale and domain.
362
  *
369
  return apply_filters( 'bbp_plugin_locale', $locale, $domain );
370
  }
371
 
 
 
372
  /**
373
  * Piggy back filter for WordPress's 'request' filter
374
  *
includes/core/template-functions.php CHANGED
@@ -116,7 +116,26 @@ function bbp_register_template_stack( $location_callback = '', $priority = 10 )
116
  return false;
117
 
118
  // Add location callback to template stack
119
- add_filter( 'bbp_template_stack', $location_callback, (int) $priority );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  }
121
 
122
  /**
@@ -257,6 +276,7 @@ function bbp_add_template_locations( $templates = array() ) {
257
  * If it's a reply edit, WP_Query::bbp_is_reply_edit is set to true.
258
  *
259
  * If it's a view page, WP_Query::bbp_is_view is set to true
 
260
  *
261
  * @since bbPress (r2688)
262
  *
@@ -299,7 +319,7 @@ function bbp_parse_query( $posts_query ) {
299
  if ( !empty( $bbp_user ) ) {
300
 
301
  // Not a user_id so try email and slug
302
- if ( !is_numeric( $bbp_user ) ) {
303
 
304
  // Email was passed
305
  if ( is_email( $bbp_user ) ) {
@@ -421,6 +441,20 @@ function bbp_parse_query( $posts_query ) {
421
  // We are in a custom topic view
422
  $posts_query->bbp_is_view = true;
423
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
424
  // Forum/Topic/Reply Edit Page
425
  } elseif ( !empty( $is_edit ) ) {
426
 
116
  return false;
117
 
118
  // Add location callback to template stack
119
+ return add_filter( 'bbp_template_stack', $location_callback, (int) $priority );
120
+ }
121
+
122
+ /**
123
+ * Deregisters a previously registered template stack location.
124
+ *
125
+ * @since bbPress (r4652)
126
+ *
127
+ * @param string $location Callback function that returns the
128
+ * @param int $priority
129
+ * @see bbp_register_template_stack()
130
+ */
131
+ function bbp_deregister_template_stack( $location_callback = '', $priority = 10 ) {
132
+
133
+ // Bail if no location, or function does not exist
134
+ if ( empty( $location_callback ) || ! function_exists( $location_callback ) )
135
+ return false;
136
+
137
+ // Remove location callback to template stack
138
+ return remove_filter( 'bbp_template_stack', $location_callback, (int) $priority );
139
  }
140
 
141
  /**
276
  * If it's a reply edit, WP_Query::bbp_is_reply_edit is set to true.
277
  *
278
  * If it's a view page, WP_Query::bbp_is_view is set to true
279
+ * If it's a search page, WP_Query::bbp_is_search is set to true
280
  *
281
  * @since bbPress (r2688)
282
  *
319
  if ( !empty( $bbp_user ) ) {
320
 
321
  // Not a user_id so try email and slug
322
+ if ( get_option( 'permalink_structure' ) || ! is_numeric( $bbp_user ) ) {
323
 
324
  // Email was passed
325
  if ( is_email( $bbp_user ) ) {
441
  // We are in a custom topic view
442
  $posts_query->bbp_is_view = true;
443
 
444
+ // Search Page
445
+ } elseif ( isset( $posts_query->query_vars[ bbp_get_search_rewrite_id() ] ) ) {
446
+
447
+ // Check if there are search query args set
448
+ $search_terms = bbp_get_search_terms();
449
+ if ( !empty( $search_terms ) )
450
+ $posts_query->bbp_search_terms = $search_terms;
451
+
452
+ // Correct is_home variable
453
+ $posts_query->is_home = false;
454
+
455
+ // We are in a search query
456
+ $posts_query->bbp_is_search = true;
457
+
458
  // Forum/Topic/Reply Edit Page
459
  } elseif ( !empty( $is_edit ) ) {
460
 
includes/core/template-loader.php CHANGED
@@ -30,6 +30,8 @@ if ( !defined( 'ABSPATH' ) ) exit;
30
  * @uses bbp_get_single_user_edit_template() To get user edit template
31
  * @uses bbp_is_single_view() To check if page is single view
32
  * @uses bbp_get_single_view_template() To get view template
 
 
33
  * @uses bbp_is_forum_edit() To check if page is forum edit
34
  * @uses bbp_get_forum_edit_template() To get forum edit template
35
  * @uses bbp_is_topic_merge() To check if page is topic merge
@@ -38,6 +40,8 @@ if ( !defined( 'ABSPATH' ) ) exit;
38
  * @uses bbp_get_topic_split_template() To get topic split template
39
  * @uses bbp_is_topic_edit() To check if page is topic edit
40
  * @uses bbp_get_topic_edit_template() To get topic edit template
 
 
41
  * @uses bbp_is_reply_edit() To check if page is reply edit
42
  * @uses bbp_get_reply_edit_template() To get reply edit template
43
  * @uses bbp_set_theme_compat_template() To set the global theme compat template
@@ -61,6 +65,9 @@ function bbp_template_include_theme_supports( $template = '' ) {
61
  // Single View
62
  elseif ( bbp_is_single_view() && ( $new_template = bbp_get_single_view_template() ) ) :
63
 
 
 
 
64
  // Forum edit
65
  elseif ( bbp_is_forum_edit() && ( $new_template = bbp_get_forum_edit_template() ) ) :
66
 
@@ -85,6 +92,9 @@ function bbp_template_include_theme_supports( $template = '' ) {
85
  // Topic Archive
86
  elseif ( bbp_is_topic_archive() && ( $new_template = bbp_get_topic_archive_template() ) ) :
87
 
 
 
 
88
  // Editing a reply
89
  elseif ( bbp_is_reply_edit() && ( $new_template = bbp_get_reply_edit_template() ) ) :
90
 
@@ -245,6 +255,22 @@ function bbp_get_single_view_template() {
245
  return bbp_get_query_template( 'single_view', $templates );
246
  }
247
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
248
  /**
249
  * Get the single forum template
250
  *
@@ -405,6 +431,22 @@ function bbp_get_reply_edit_template() {
405
  return bbp_get_query_template( 'reply_edit', $templates );
406
  }
407
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
408
  /**
409
  * Get the topic template
410
  *
30
  * @uses bbp_get_single_user_edit_template() To get user edit template
31
  * @uses bbp_is_single_view() To check if page is single view
32
  * @uses bbp_get_single_view_template() To get view template
33
+ * @uses bbp_is_search() To check if page is search
34
+ * @uses bbp_get_search_template() To get search template
35
  * @uses bbp_is_forum_edit() To check if page is forum edit
36
  * @uses bbp_get_forum_edit_template() To get forum edit template
37
  * @uses bbp_is_topic_merge() To check if page is topic merge
40
  * @uses bbp_get_topic_split_template() To get topic split template
41
  * @uses bbp_is_topic_edit() To check if page is topic edit
42
  * @uses bbp_get_topic_edit_template() To get topic edit template
43
+ * @uses bbp_is_reply_move() To check if page is reply move
44
+ * @uses bbp_get_reply_move_template() To get reply move template
45
  * @uses bbp_is_reply_edit() To check if page is reply edit
46
  * @uses bbp_get_reply_edit_template() To get reply edit template
47
  * @uses bbp_set_theme_compat_template() To set the global theme compat template
65
  // Single View
66
  elseif ( bbp_is_single_view() && ( $new_template = bbp_get_single_view_template() ) ) :
67
 
68
+ // Search
69
+ elseif ( bbp_is_search() && ( $new_template = bbp_get_search_template() ) ) :
70
+
71
  // Forum edit
72
  elseif ( bbp_is_forum_edit() && ( $new_template = bbp_get_forum_edit_template() ) ) :
73
 
92
  // Topic Archive
93
  elseif ( bbp_is_topic_archive() && ( $new_template = bbp_get_topic_archive_template() ) ) :
94
 
95
+ // Reply move
96
+ elseif ( bbp_is_reply_move() && ( $new_template = bbp_get_reply_move_template() ) ) :
97
+
98
  // Editing a reply
99
  elseif ( bbp_is_reply_edit() && ( $new_template = bbp_get_reply_edit_template() ) ) :
100
 
255
  return bbp_get_query_template( 'single_view', $templates );
256
  }
257
 
258
+ /**
259
+ * Get the search template
260
+ *
261
+ * @since bbPress (r4579)
262
+ *
263
+ * @uses bbp_get_query_template()
264
+ * @return string Path to template file
265
+ */
266
+ function bbp_get_search_template() {
267
+ $templates = array(
268
+ 'page-forum-search.php', // Single Search
269
+ 'forum-search.php', // Search
270
+ );
271
+ return bbp_get_query_template( 'single_search', $templates );
272
+ }
273
+
274
  /**
275
  * Get the single forum template
276
  *
431
  return bbp_get_query_template( 'reply_edit', $templates );
432
  }
433
 
434
+ /**
435
+ * Get the reply move template
436
+ *
437
+ * @since bbPress (r4521)
438
+ *
439
+ * @uses bbp_get_reply_post_type()
440
+ * @uses bbp_get_query_template()
441
+ * @return string Path to template file
442
+ */
443
+ function bbp_get_reply_move_template() {
444
+ $templates = array(
445
+ 'single-' . bbp_get_reply_post_type() . '-move.php', // Reply move
446
+ );
447
+ return bbp_get_query_template( 'reply_move', $templates );
448
+ }
449
+
450
  /**
451
  * Get the topic template
452
  *
includes/core/theme-compat.php CHANGED
@@ -108,7 +108,7 @@ function bbp_setup_theme_compat( $theme = '' ) {
108
  * Gets the name of the bbPress compatable theme used, in the event the
109
  * currently active WordPress theme does not explicitly support bbPress.
110
  * This can be filtered or set manually. Tricky theme authors can override the
111
- * default and include their own bbPress compatability layers for their themes.
112
  *
113
  * @since bbPress (r3506)
114
  * @uses apply_filters()
@@ -122,7 +122,7 @@ function bbp_get_theme_compat_id() {
122
  * Gets the name of the bbPress compatable theme used, in the event the
123
  * currently active WordPress theme does not explicitly support bbPress.
124
  * This can be filtered or set manually. Tricky theme authors can override the
125
- * default and include their own bbPress compatability layers for their themes.
126
  *
127
  * @since bbPress (r3506)
128
  * @uses apply_filters()
@@ -136,7 +136,7 @@ function bbp_get_theme_compat_name() {
136
  * Gets the version of the bbPress compatable theme used, in the event the
137
  * currently active WordPress theme does not explicitly support bbPress.
138
  * This can be filtered or set manually. Tricky theme authors can override the
139
- * default and include their own bbPress compatability layers for their themes.
140
  *
141
  * @since bbPress (r3506)
142
  * @uses apply_filters()
@@ -150,7 +150,7 @@ function bbp_get_theme_compat_version() {
150
  * Gets the bbPress compatable theme used in the event the currently active
151
  * WordPress theme does not explicitly support bbPress. This can be filtered,
152
  * or set manually. Tricky theme authors can override the default and include
153
- * their own bbPress compatability layers for their themes.
154
  *
155
  * @since bbPress (r3032)
156
  * @uses apply_filters()
@@ -164,7 +164,7 @@ function bbp_get_theme_compat_dir() {
164
  * Gets the bbPress compatable theme used in the event the currently active
165
  * WordPress theme does not explicitly support bbPress. This can be filtered,
166
  * or set manually. Tricky theme authors can override the default and include
167
- * their own bbPress compatability layers for their themes.
168
  *
169
  * @since bbPress (r3032)
170
  * @uses apply_filters()
@@ -435,6 +435,8 @@ function bbp_theme_compat_reset_post( $args = array() ) {
435
  * @uses bbp_get_single_user_edit_template() To get user edit template
436
  * @uses bbp_is_single_view() To check if page is single view
437
  * @uses bbp_get_single_view_template() To get view template
 
 
438
  * @uses bbp_is_forum_edit() To check if page is forum edit
439
  * @uses bbp_get_forum_edit_template() To get forum edit template
440
  * @uses bbp_is_topic_merge() To check if page is topic merge
@@ -443,17 +445,23 @@ function bbp_theme_compat_reset_post( $args = array() ) {
443
  * @uses bbp_get_topic_split_template() To get topic split template
444
  * @uses bbp_is_topic_edit() To check if page is topic edit
445
  * @uses bbp_get_topic_edit_template() To get topic edit template
 
 
446
  * @uses bbp_is_reply_edit() To check if page is reply edit
447
  * @uses bbp_get_reply_edit_template() To get reply edit template
448
  * @uses bbp_set_theme_compat_template() To set the global theme compat template
449
  */
450
  function bbp_template_include_theme_compat( $template = '' ) {
451
 
452
- // Bail if the template already matches a bbPress template. This includes
453
- // archive-* and single-* WordPress post_type matches (allowing
454
- // themes to use the expected format) as well as all bbPress-specific
455
- // template files for users, topics, forums, etc...
456
- if ( !empty( bbpress()->theme_compat->bbpress_template ) )
 
 
 
 
457
  return $template;
458
 
459
  /** Users *************************************************************/
@@ -589,6 +597,22 @@ function bbp_template_include_theme_compat( $template = '' ) {
589
  'comment_status' => 'closed'
590
  ) );
591
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
592
  /** Topic Tags ********************************************************/
593
 
594
  // Topic Tag Edit
@@ -610,6 +634,20 @@ function bbp_template_include_theme_compat( $template = '' ) {
610
  ) );
611
  }
612
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
613
  /**
614
  * If we are relying on bbPress's built in theme compatibility to load
615
  * the proper content, we need to intercept the_content, replace the
@@ -797,7 +835,21 @@ function bbp_replace_the_content( $content = '' ) {
797
 
798
  // Reply Edit
799
  } elseif ( bbp_is_reply_edit() ) {
800
- $new_content = $bbp->shortcodes->display_reply_form();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
801
 
802
  // Single Reply
803
  } elseif ( bbp_is_single_reply() ) {
@@ -808,6 +860,11 @@ function bbp_replace_the_content( $content = '' ) {
808
  } elseif ( bbp_is_single_view() ) {
809
  $new_content = $bbp->shortcodes->display_view( array( 'id' => get_query_var( 'bbp_view' ) ) );
810
 
 
 
 
 
 
811
  /** Topic Tags ********************************************************/
812
 
813
  // Show topics of tag
108
  * Gets the name of the bbPress compatable theme used, in the event the
109
  * currently active WordPress theme does not explicitly support bbPress.
110
  * This can be filtered or set manually. Tricky theme authors can override the
111
+ * default and include their own bbPress compatibility layers for their themes.
112
  *
113
  * @since bbPress (r3506)
114
  * @uses apply_filters()
122
  * Gets the name of the bbPress compatable theme used, in the event the
123
  * currently active WordPress theme does not explicitly support bbPress.
124
  * This can be filtered or set manually. Tricky theme authors can override the
125
+ * default and include their own bbPress compatibility layers for their themes.
126
  *
127
  * @since bbPress (r3506)
128
  * @uses apply_filters()
136
  * Gets the version of the bbPress compatable theme used, in the event the
137
  * currently active WordPress theme does not explicitly support bbPress.
138
  * This can be filtered or set manually. Tricky theme authors can override the
139
+ * default and include their own bbPress compatibility layers for their themes.
140
  *
141
  * @since bbPress (r3506)
142
  * @uses apply_filters()
150
  * Gets the bbPress compatable theme used in the event the currently active
151
  * WordPress theme does not explicitly support bbPress. This can be filtered,
152
  * or set manually. Tricky theme authors can override the default and include
153
+ * their own bbPress compatibility layers for their themes.
154
  *
155
  * @since bbPress (r3032)
156
  * @uses apply_filters()
164
  * Gets the bbPress compatable theme used in the event the currently active
165
  * WordPress theme does not explicitly support bbPress. This can be filtered,
166
  * or set manually. Tricky theme authors can override the default and include
167
+ * their own bbPress compatibility layers for their themes.
168
  *
169
  * @since bbPress (r3032)
170
  * @uses apply_filters()
435
  * @uses bbp_get_single_user_edit_template() To get user edit template
436
  * @uses bbp_is_single_view() To check if page is single view
437
  * @uses bbp_get_single_view_template() To get view template
438
+ * @uses bbp_is_search() To check if page is search
439
+ * @uses bbp_get_search_template() To get search template
440
  * @uses bbp_is_forum_edit() To check if page is forum edit
441
  * @uses bbp_get_forum_edit_template() To get forum edit template
442
  * @uses bbp_is_topic_merge() To check if page is topic merge
445
  * @uses bbp_get_topic_split_template() To get topic split template
446
  * @uses bbp_is_topic_edit() To check if page is topic edit
447
  * @uses bbp_get_topic_edit_template() To get topic edit template
448
+ * @uses bbp_is_reply_move() To check if page is reply move
449
+ * @uses bbp_get_reply_move_template() To get reply move template
450
  * @uses bbp_is_reply_edit() To check if page is reply edit
451
  * @uses bbp_get_reply_edit_template() To get reply edit template
452
  * @uses bbp_set_theme_compat_template() To set the global theme compat template
453
  */
454
  function bbp_template_include_theme_compat( $template = '' ) {
455
 
456
+ /**
457
+ * If BuddyPress is activated at a network level, the action order is
458
+ * reversed, which causes the template integration to fail. If we're looking
459
+ * at a BuddyPress page here, bail to prevent the extra processing.
460
+ *
461
+ * This is a bit more brute-force than is probably necessary, but gets the
462
+ * job done while we work towards something more elegant.
463
+ */
464
+ if ( function_exists( 'is_buddypress' ) && is_buddypress() )
465
  return $template;
466
 
467
  /** Users *************************************************************/
597
  'comment_status' => 'closed'
598
  ) );
599
 
600
+ /** Search ************************************************************/
601
+
602
+ } elseif ( bbp_is_search() ) {
603
+
604
+ // Reset post
605
+ bbp_theme_compat_reset_post( array(
606
+ 'ID' => 0,
607
+ 'post_title' => bbp_get_search_title(),
608
+ 'post_author' => 0,
609
+ 'post_date' => 0,
610
+ 'post_content' => '',
611
+ 'post_type' => '',
612
+ 'post_status' => bbp_get_public_status_id(),
613
+ 'comment_status' => 'closed'
614
+ ) );
615
+
616
  /** Topic Tags ********************************************************/
617
 
618
  // Topic Tag Edit
634
  ) );
635
  }
636
 
637
+ /**
638
+ * Bail if the template already matches a bbPress template. This includes
639
+ * archive-* and single-* WordPress post_type matches (allowing
640
+ * themes to use the expected format) as well as all bbPress-specific
641
+ * template files for users, topics, forums, etc...
642
+ *
643
+ * We do this after the above checks to prevent incorrect 404 body classes
644
+ * and header statuses.
645
+ *
646
+ * @see http://bbpress.trac.wordpress.org/ticket/1478/
647
+ */
648
+ if ( !empty( bbpress()->theme_compat->bbpress_template ) )
649
+ return $template;
650
+
651
  /**
652
  * If we are relying on bbPress's built in theme compatibility to load
653
  * the proper content, we need to intercept the_content, replace the
835
 
836
  // Reply Edit
837
  } elseif ( bbp_is_reply_edit() ) {
838
+
839
+ // Move
840
+ if ( bbp_is_reply_move() ) {
841
+ ob_start();
842
+
843
+ bbp_get_template_part( 'form', 'reply-move' );
844
+
845
+ $new_content = ob_get_contents();
846
+
847
+ ob_end_clean();
848
+
849
+ // Edit
850
+ } else {
851
+ $new_content = $bbp->shortcodes->display_reply_form();
852
+ }
853
 
854
  // Single Reply
855
  } elseif ( bbp_is_single_reply() ) {
860
  } elseif ( bbp_is_single_view() ) {
861
  $new_content = $bbp->shortcodes->display_view( array( 'id' => get_query_var( 'bbp_view' ) ) );
862
 
863
+ /** Search ************************************************************/
864
+
865
+ } elseif ( bbp_is_search() ) {
866
+ $new_content = $bbp->shortcodes->display_search( array( 'search' => get_query_var( 'bbp_search' ) ) );
867
+
868
  /** Topic Tags ********************************************************/
869
 
870
  // Show topics of tag
includes/core/update.php CHANGED
@@ -50,17 +50,19 @@ function bbp_is_update() {
50
  * @return bool True if activating bbPress, false if not
51
  */
52
  function bbp_is_activation( $basename = '' ) {
53
- $bbp = bbpress();
54
-
55
  $action = false;
56
- if ( ! empty( $_REQUEST['action'] ) && ( '-1' != $_REQUEST['action'] ) )
 
57
  $action = $_REQUEST['action'];
58
- elseif ( ! empty( $_REQUEST['action2'] ) && ( '-1' != $_REQUEST['action2'] ) )
59
  $action = $_REQUEST['action2'];
 
60
 
61
  // Bail if not activating
62
- if ( empty( $action ) || !in_array( $action, array( 'activate', 'activate-selected' ) ) )
63
  return false;
 
64
 
65
  // The plugin(s) being activated
66
  if ( $action == 'activate' ) {
@@ -70,12 +72,14 @@ function bbp_is_activation( $basename = '' ) {
70
  }
71
 
72
  // Set basename if empty
73
- if ( empty( $basename ) && !empty( $bbp->basename ) )
74
  $basename = $bbp->basename;
 
75
 
76
  // Bail if no basename
77
- if ( empty( $basename ) )
78
  return false;
 
79
 
80
  // Is bbPress being activated?
81
  return in_array( $basename, $plugins );
@@ -88,17 +92,19 @@ function bbp_is_activation( $basename = '' ) {
88
  * @return bool True if deactivating bbPress, false if not
89
  */
90
  function bbp_is_deactivation( $basename = '' ) {
91
- $bbp = bbpress();
92
-
93
  $action = false;
94
- if ( ! empty( $_REQUEST['action'] ) && ( '-1' != $_REQUEST['action'] ) )
 
95
  $action = $_REQUEST['action'];
96
- elseif ( ! empty( $_REQUEST['action2'] ) && ( '-1' != $_REQUEST['action2'] ) )
97
  $action = $_REQUEST['action2'];
 
98
 
99
  // Bail if not deactivating
100
- if ( empty( $action ) || !in_array( $action, array( 'deactivate', 'deactivate-selected' ) ) )
101
  return false;
 
102
 
103
  // The plugin(s) being deactivated
104
  if ( $action == 'deactivate' ) {
@@ -108,12 +114,14 @@ function bbp_is_deactivation( $basename = '' ) {
108
  }
109
 
110
  // Set basename if empty
111
- if ( empty( $basename ) && !empty( $bbp->basename ) )
112
  $basename = $bbp->basename;
 
113
 
114
  // Bail if no basename
115
- if ( empty( $basename ) )
116
  return false;
 
117
 
118
  // Is bbPress being deactivated?
119
  return in_array( $basename, $plugins );
@@ -127,8 +135,7 @@ function bbp_is_deactivation( $basename = '' ) {
127
  * @uses bbp_get_db_version() To get bbPress's database version
128
  */
129
  function bbp_version_bump() {
130
- $db_version = bbp_get_db_version();
131
- update_option( '_bbp_db_version', $db_version );
132
  }
133
 
134
  /**
@@ -158,7 +165,8 @@ function bbp_setup_updater() {
158
  */
159
  function bbp_create_initial_content( $args = array() ) {
160
 
161
- $defaults = array(
 
162
  'forum_parent' => 0,
163
  'forum_status' => 'publish',
164
  'forum_title' => __( 'General', 'bbpress' ),
@@ -167,24 +175,22 @@ function bbp_create_initial_content( $args = array() ) {
167
  'topic_content' => __( 'I am the first topic in your new forums.', 'bbpress' ),
168
  'reply_title' => __( 'Re: Hello World!', 'bbpress' ),
169
  'reply_content' => __( 'Oh, and this is what a reply looks like.', 'bbpress' ),
170
- );
171
- $r = bbp_parse_args( $args, $defaults, 'create_initial_content' );
172
- extract( $r );
173
 
174
  // Create the initial forum
175
  $forum_id = bbp_insert_forum( array(
176
- 'post_parent' => $forum_parent,
177
- 'post_status' => $forum_status,
178
- 'post_title' => $forum_title,
179
- 'post_content' => $forum_content
180
  ) );
181
 
182
  // Create the initial topic
183
  $topic_id = bbp_insert_topic(
184
  array(
185
  'post_parent' => $forum_id,
186
- 'post_title' => $topic_title,
187
- 'post_content' => $topic_content
188
  ),
189
  array( 'forum_id' => $forum_id )
190
  );
@@ -193,8 +199,8 @@ function bbp_create_initial_content( $args = array() ) {
193
  $reply_id = bbp_insert_reply(
194
  array(
195
  'post_parent' => $topic_id,
196
- 'post_title' => $reply_title,
197
- 'post_content' => $reply_content
198
  ),
199
  array(
200
  'forum_id' => $forum_id,
@@ -246,7 +252,7 @@ function bbp_version_updater() {
246
  /** 2.2 Branch ************************************************************/
247
 
248
  // 2.2
249
- if ( $raw_db_version < 223 ) {
250
 
251
  // Remove the Moderator role from the database
252
  remove_role( bbp_get_moderator_role() );
@@ -254,7 +260,7 @@ function bbp_version_updater() {
254
  // Remove the Participant role from the database
255
  remove_role( bbp_get_participant_role() );
256
 
257
- // Refresh capabilities
258
  bbp_remove_caps();
259
  }
260
 
50
  * @return bool True if activating bbPress, false if not
51
  */
52
  function bbp_is_activation( $basename = '' ) {
53
+ $bbp = bbpress();
 
54
  $action = false;
55
+
56
+ if ( ! empty( $_REQUEST['action'] ) && ( '-1' != $_REQUEST['action'] ) ) {
57
  $action = $_REQUEST['action'];
58
+ } elseif ( ! empty( $_REQUEST['action2'] ) && ( '-1' != $_REQUEST['action2'] ) ) {
59
  $action = $_REQUEST['action2'];
60
+ }
61
 
62
  // Bail if not activating
63
+ if ( empty( $action ) || !in_array( $action, array( 'activate', 'activate-selected' ) ) ) {
64
  return false;
65
+ }
66
 
67
  // The plugin(s) being activated
68
  if ( $action == 'activate' ) {
72
  }
73
 
74
  // Set basename if empty
75
+ if ( empty( $basename ) && !empty( $bbp->basename ) ) {
76
  $basename = $bbp->basename;
77
+ }
78
 
79
  // Bail if no basename
80
+ if ( empty( $basename ) ) {
81
  return false;
82
+ }
83
 
84
  // Is bbPress being activated?
85
  return in_array( $basename, $plugins );
92
  * @return bool True if deactivating bbPress, false if not
93
  */
94
  function bbp_is_deactivation( $basename = '' ) {
95
+ $bbp = bbpress();
 
96
  $action = false;
97
+
98
+ if ( ! empty( $_REQUEST['action'] ) && ( '-1' != $_REQUEST['action'] ) ) {
99
  $action = $_REQUEST['action'];
100
+ } elseif ( ! empty( $_REQUEST['action2'] ) && ( '-1' != $_REQUEST['action2'] ) ) {
101
  $action = $_REQUEST['action2'];
102
+ }
103
 
104
  // Bail if not deactivating
105
+ if ( empty( $action ) || !in_array( $action, array( 'deactivate', 'deactivate-selected' ) ) ) {
106
  return false;
107
+ }
108
 
109
  // The plugin(s) being deactivated
110
  if ( $action == 'deactivate' ) {
114
  }
115
 
116
  // Set basename if empty
117
+ if ( empty( $basename ) && !empty( $bbp->basename ) ) {
118
  $basename = $bbp->basename;
119
+ }
120
 
121
  // Bail if no basename
122
+ if ( empty( $basename ) ) {
123
  return false;
124
+ }
125
 
126
  // Is bbPress being deactivated?
127
  return in_array( $basename, $plugins );
135
  * @uses bbp_get_db_version() To get bbPress's database version
136
  */
137
  function bbp_version_bump() {
138
+ update_option( '_bbp_db_version', bbp_get_db_version() );
 
139
  }
140
 
141
  /**
165
  */
166
  function bbp_create_initial_content( $args = array() ) {
167
 
168
+ // Parse arguments against default values
169
+ $r = bbp_parse_args( $args, array(
170
  'forum_parent' => 0,
171
  'forum_status' => 'publish',
172
  'forum_title' => __( 'General', 'bbpress' ),
175
  'topic_content' => __( 'I am the first topic in your new forums.', 'bbpress' ),
176
  'reply_title' => __( 'Re: Hello World!', 'bbpress' ),
177
  'reply_content' => __( 'Oh, and this is what a reply looks like.', 'bbpress' ),
178
+ ), 'create_initial_content' );
 
 
179
 
180
  // Create the initial forum
181
  $forum_id = bbp_insert_forum( array(
182
+ 'post_parent' => $r['forum_parent'],
183
+ 'post_status' => $r['forum_status'],
184
+ 'post_title' => $r['forum_title'],
185
+ 'post_content' => $r['forum_content']
186
  ) );
187
 
188
  // Create the initial topic
189
  $topic_id = bbp_insert_topic(
190
  array(
191
  'post_parent' => $forum_id,
192
+ 'post_title' => $r['topic_title'],
193
+ 'post_content' => $r['topic_content']
194
  ),
195
  array( 'forum_id' => $forum_id )
196
  );
199
  $reply_id = bbp_insert_reply(
200
  array(
201
  'post_parent' => $topic_id,
202
+ 'post_title' => $r['reply_title'],
203
+ 'post_content' => $r['reply_content']
204
  ),
205
  array(
206
  'forum_id' => $forum_id,
252
  /** 2.2 Branch ************************************************************/
253
 
254
  // 2.2
255
+ if ( $raw_db_version < 220 ) {
256
 
257
  // Remove the Moderator role from the database
258
  remove_role( bbp_get_moderator_role() );
260
  // Remove the Participant role from the database
261
  remove_role( bbp_get_participant_role() );
262
 
263
+ // Remove capabilities
264
  bbp_remove_caps();
265
  }
266
 
includes/extend/buddypress/activity.php CHANGED
@@ -235,8 +235,10 @@ class BBP_BuddyPress_Activity {
235
  * @uses bp_activity_set_action()
236
  */
237
  public function register_activity_actions() {
238
- bp_activity_set_action( $this->component, $this->topic_create, __( 'New topic created', 'bbpress' ) );
239
- bp_activity_set_action( $this->component, $this->reply_create, __( 'New reply created', 'bbpress' ) );
 
 
240
  }
241
 
242
  /**
@@ -500,7 +502,7 @@ class BBP_BuddyPress_Activity {
500
  if ( $activity_id = $this->get_activity_id( $topic_id ) )
501
  return bp_activity_delete( array( 'id' => $activity_id ) );
502
 
503
- return false;
504
  }
505
 
506
  /**
@@ -651,7 +653,7 @@ class BBP_BuddyPress_Activity {
651
  if ( $activity_id = $this->get_activity_id( $reply_id ) )
652
  return bp_activity_delete( array( 'id' => $activity_id ) );
653
 
654
- return false;
655
  }
656
 
657
  /**
@@ -699,4 +701,3 @@ class BBP_BuddyPress_Activity {
699
  }
700
  }
701
  endif;
702
-
235
  * @uses bp_activity_set_action()
236
  */
237
  public function register_activity_actions() {
238
+
239
+ // Sitewide activity stream items
240
+ bp_activity_set_action( $this->component, $this->topic_create, __( 'New forum topic', 'bbpress' ) );
241
+ bp_activity_set_action( $this->component, $this->reply_create, __( 'New forum reply', 'bbpress' ) );
242
  }
243
 
244
  /**
502
  if ( $activity_id = $this->get_activity_id( $topic_id ) )
503
  return bp_activity_delete( array( 'id' => $activity_id ) );
504
 
505
+ return false;
506
  }
507
 
508
  /**
653
  if ( $activity_id = $this->get_activity_id( $reply_id ) )
654
  return bp_activity_delete( array( 'id' => $activity_id ) );
655
 
656
+ return false;
657
  }
658
 
659
  /**
701
  }
702
  }
703
  endif;
 
includes/extend/buddypress/functions.php CHANGED
@@ -453,3 +453,175 @@ function bbp_remove_forum_id_from_all_groups( $forum_id = 0 ) {
453
  bbp_remove_forum_id_from_group( $forum_id, $group_id );
454
  }
455
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
453
  bbp_remove_forum_id_from_group( $forum_id, $group_id );
454
  }
455
  }
456
+
457
+ /**
458
+ * Return true if a forum is a group forum
459
+ *
460
+ * @since bbPress (r4571)
461
+ *
462
+ * @param int $forum_id
463
+ * @uses bbp_get_forum_id() To get the forum id
464
+ * @uses bbp_get_forum_group_ids() To get the forum's group ids
465
+ * @uses apply_filters() Calls 'bbp_forum_is_group_forum' with the forum id
466
+ * @return bool True if it is a group forum, false if not
467
+ */
468
+ function bbp_is_forum_group_forum( $forum_id = 0 ) {
469
+
470
+ // Validate
471
+ $forum_id = bbp_get_forum_id( $forum_id );
472
+
473
+ // Check for group ID's
474
+ $group_ids = bbp_get_forum_group_ids( $forum_id );
475
+
476
+ // Check if the forum has groups
477
+ $retval = (bool) !empty( $group_ids );
478
+
479
+ return (bool) apply_filters( 'bbp_is_forum_group_forum', $retval, $forum_id, $group_ids );
480
+ }
481
+
482
+ /*** Group Member Status ******************************************************/
483
+
484
+ /**
485
+ * Is the current user an admin of the current group
486
+ *
487
+ * @since bbPress (r4632)
488
+ *
489
+ * @uses is_user_logged_in()
490
+ * @uses bp_is_group()
491
+ * @uses bbpress()
492
+ * @uses get_current_user_id()
493
+ * @uses bp_get_current_group_id()
494
+ * @uses groups_is_user_admin()
495
+ * @return bool If current user is an admin of the current group
496
+ */
497
+ function bbp_group_is_admin() {
498
+
499
+ // Bail if user is not logged in or not looking at a group
500
+ if ( ! is_user_logged_in() || ! bp_is_group() )
501
+ return false;
502
+
503
+ $bbp = bbpress();
504
+
505
+ // Set the global if not set
506
+ if ( ! isset( $bbp->current_user->is_group_admin ) )
507
+ $bbp->current_user->is_group_admin = groups_is_user_admin( get_current_user_id(), bp_get_current_group_id() );
508
+
509
+ // Return the value
510
+ return (bool) $bbp->current_user->is_group_admin;
511
+ }
512
+
513
+ /**
514
+ * Is the current user a moderator of the current group
515
+ *
516
+ * @since bbPress (r4632)
517
+ *
518
+ * @uses is_user_logged_in()
519
+ * @uses bp_is_group()
520
+ * @uses bbpress()
521
+ * @uses get_current_user_id()
522
+ * @uses bp_get_current_group_id()
523
+ * @uses groups_is_user_admin()
524
+ * @return bool If current user is a moderator of the current group
525
+ */
526
+ function bbp_group_is_mod() {
527
+
528
+ // Bail if user is not logged in or not looking at a group
529
+ if ( ! is_user_logged_in() || ! bp_is_group() )
530
+ return false;
531
+
532
+ $bbp = bbpress();
533
+
534
+ // Set the global if not set
535
+ if ( ! isset( $bbp->current_user->is_group_mod ) )
536
+ $bbp->current_user->is_group_mod = groups_is_user_mod( get_current_user_id(), bp_get_current_group_id() );
537
+
538
+ // Return the value
539
+ return (bool) $bbp->current_user->is_group_mod;
540
+ }
541
+
542
+ /**
543
+ * Is the current user a member of the current group
544
+ *
545
+ * @since bbPress (r4632)
546
+ *
547
+ * @uses is_user_logged_in()
548
+ * @uses bp_is_group()
549
+ * @uses bbpress()
550
+ * @uses get_current_user_id()
551
+ * @uses bp_get_current_group_id()
552
+ * @uses groups_is_user_admin()
553
+ * @return bool If current user is a member of the current group
554
+ */
555
+ function bbp_group_is_member() {
556
+
557
+ // Bail if user is not logged in or not looking at a group
558
+ if ( ! is_user_logged_in() || ! bp_is_group() )
559
+ return false;
560
+
561
+ $bbp = bbpress();
562
+
563
+ // Set the global if not set
564
+ if ( ! isset( $bbp->current_user->is_group_member ) )
565
+ $bbp->current_user->is_group_member = groups_is_user_member( get_current_user_id(), bp_get_current_group_id() );
566
+
567
+ // Return the value
568
+ return (bool) $bbp->current_user->is_group_member;
569
+ }
570
+
571
+ /**
572
+ * Is the current user banned from the current group
573
+ *
574
+ * @since bbPress (r4632)
575
+ *
576
+ * @uses is_user_logged_in()
577
+ * @uses bp_is_group()
578
+ * @uses bbpress()
579
+ * @uses get_current_user_id()
580
+ * @uses bp_get_current_group_id()
581
+ * @uses groups_is_user_admin()
582
+ * @return bool If current user is banned from the current group
583
+ */
584
+ function bbp_group_is_banned() {
585
+
586
+ // Bail if user is not logged in or not looking at a group
587
+ if ( ! is_user_logged_in() || ! bp_is_group() )
588
+ return false;
589
+
590
+ $bbp = bbpress();
591
+
592
+ // Set the global if not set
593
+ if ( ! isset( $bbp->current_user->is_group_banned ) )
594
+ $bbp->current_user->is_group_banned = groups_is_user_banned( get_current_user_id(), bp_get_current_group_id() );
595
+
596
+ // Return the value
597
+ return (bool) $bbp->current_user->is_group_banned;
598
+ }
599
+
600
+ /**
601
+ * Is the current user the creator of the current group
602
+ *
603
+ * @since bbPress (r4632)
604
+ *
605
+ * @uses is_user_logged_in()
606
+ * @uses bp_is_group()
607
+ * @uses bbpress()
608
+ * @uses get_current_user_id()
609
+ * @uses bp_get_current_group_id()
610
+ * @uses groups_is_user_admin()
611
+ * @return bool If current user the creator of the current group
612
+ */
613
+ function bbp_group_is_creator() {
614
+
615
+ // Bail if user is not logged in or not looking at a group
616
+ if ( ! is_user_logged_in() || ! bp_is_group() )
617
+ return false;
618
+
619
+ $bbp = bbpress();
620
+
621
+ // Set the global if not set
622
+ if ( ! isset( $bbp->current_user->is_group_creator ) )
623
+ $bbp->current_user->is_group_creator = groups_is_user_creator( get_current_user_id(), bp_get_current_group_id() );
624
+
625
+ // Return the value
626
+ return (bool) $bbp->current_user->is_group_creator;
627
+ }
includes/extend/buddypress/group.php CHANGED
@@ -76,10 +76,10 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
76
  private function setup_actions() {
77
 
78
  // Possibly redirect
79
- add_action( 'bbp_template_redirect', array( $this, 'redirect_canonical' ) );
80
 
81
- // Remove topic cap map when view is done
82
- add_action( 'bbp_after_group_forum_display', array( $this, 'remove_topic_meta_cap_map' ) );
83
  }
84
 
85
  /**
@@ -110,15 +110,24 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
110
  add_filter( 'page_link', array( $this, 'page_link' ), 10, 2 );
111
  add_filter( 'post_type_link', array( $this, 'post_type_link' ), 10, 2 );
112
 
113
- // Allow group member to view private/hidden forums
114
- add_filter( 'bbp_map_topic_meta_caps', array( $this, 'map_topic_meta_caps' ), 10, 4 );
115
- add_filter( 'bbp_map_reply_meta_caps', array( $this, 'map_topic_meta_caps' ), 10, 4 );
116
-
117
  // Map group forum activity items to groups
118
  add_filter( 'bbp_before_record_activity_parse_args', array( $this, 'map_activity_to_group' ) );
119
 
120
  // No subforums yet, so suppress them for now
121
  add_filter( 'bbp_get_forum_subforum_count_int', array( $this, 'no_subforums_yet' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  }
123
 
124
  /**
@@ -156,10 +165,10 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
156
  return;
157
 
158
  // Are forums enabled for this group?
159
- $checked = (bool) ( bp_get_new_group_enable_forum() );
160
 
161
  // Tweak the nav item variable based on if group has forum or not
162
- $this->enable_nav_item = $checked;
163
  }
164
 
165
  /**
@@ -173,11 +182,7 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
173
  * @param array $args
174
  * @return array
175
  */
176
- public function map_topic_meta_caps( $caps = array(), $cap = '', $user_id = 0, $args = array() ) {
177
-
178
- // Bail if not viewing a single topic
179
- if ( ! bp_is_single_item() || ! bp_is_groups_component() || ! bp_is_current_action( 'forum' ) || ! bp_is_action_variable( 0, 'topic' ) )
180
- return $caps;
181
 
182
  switch ( $cap ) {
183
 
@@ -187,7 +192,7 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
187
  case 'publish_topics' :
188
  case 'read_hidden_forums' :
189
  case 'read_private_forums' :
190
- if ( bp_group_is_member() || bp_group_is_mod() || bp_group_is_admin() ) {
191
  $caps = array( 'participate' );
192
  }
193
  break;
@@ -199,7 +204,7 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
199
  case 'view_trash' :
200
  case 'edit_others_replies' :
201
  case 'edit_others_topics' :
202
- if ( bp_group_is_mod() || bp_group_is_admin() ) {
203
  $caps = array( 'participate' );
204
  }
205
  break;
@@ -207,7 +212,7 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
207
  // If user is a group admin, allow them to delete topics and replies.
208
  case 'delete_topic' :
209
  case 'delete_reply' :
210
- if ( bp_group_is_admin() ) {
211
  $caps = array( 'participate' );
212
  }
213
  break;
@@ -221,9 +226,8 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
221
  *
222
  * @since bbPress (r4434)
223
  */
224
- public function remove_topic_meta_cap_map() {
225
- remove_filter( 'bbp_map_topic_meta_caps', array( $this, 'map_topic_meta_caps' ), 10, 4 );
226
- remove_filter( 'bbp_map_reply_meta_caps', array( $this, 'map_topic_meta_caps' ), 10, 4 );
227
  }
228
 
229
  /** Edit ******************************************************************/
@@ -297,9 +301,7 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
297
  }
298
 
299
  // Update the group forum setting
300
- $group = new BP_Groups_Group( $group_id );
301
- $group->enable_forum = $edit_forum;
302
- $group->save();
303
 
304
  // Create a new forum
305
  if ( empty( $forum_id ) && ( true === $edit_forum ) ) {
@@ -375,6 +377,7 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
375
  $create_forum = !empty( $_POST['bbp-create-group-forum'] ) ? true : false;
376
  $forum_id = 0;
377
  $forum_ids = bbp_get_group_forum_ids( bp_get_new_group_id() );
 
378
  if ( !empty( $forum_ids ) )
379
  $forum_id = (int) is_array( $forum_ids ) ? $forum_ids[0] : $forum_ids;
380
 
@@ -414,14 +417,24 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
414
  // Update forum active
415
  groups_update_groupmeta( bp_get_new_group_id(), '_bbp_forum_enabled_' . $forum_id, true );
416
 
 
 
 
417
  break;
418
  case false :
419
 
420
  // Forum was created but is now being undone
421
  if ( !empty( $forum_id ) ) {
 
 
422
  wp_delete_post( $forum_id, true );
 
 
423
  groups_delete_groupmeta( bp_get_new_group_id(), 'forum_id' );
424
  groups_delete_groupmeta( bp_get_new_group_id(), '_bbp_forum_enabled_' . $forum_id );
 
 
 
425
  }
426
 
427
  break;
@@ -492,6 +505,35 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
492
  bbp_remove_group_id_from_forum( $forum_id, $group_id );
493
  }
494
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
495
  /** Display Methods *******************************************************/
496
 
497
  /**
@@ -789,8 +831,17 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
789
  $wp_query->bbp_is_reply_edit = true;
790
  $post = $reply;
791
 
792
- bbp_set_query_name( 'bbp_reply_form' );
793
- bbp_get_template_part( 'form', 'reply' );
 
 
 
 
 
 
 
 
 
794
 
795
  endif;
796
 
@@ -901,6 +952,43 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
901
  <?php
902
  }
903
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
904
  /** Permalink Mappers *****************************************************/
905
 
906
  /**
76
  private function setup_actions() {
77
 
78
  // Possibly redirect
79
+ add_action( 'bbp_template_redirect', array( $this, 'redirect_canonical' ) );
80
 
81
+ // Remove group forum cap map when view is done
82
+ add_action( 'bbp_after_group_forum_display', array( $this, 'remove_group_forum_meta_cap_map' ) );
83
  }
84
 
85
  /**
110
  add_filter( 'page_link', array( $this, 'page_link' ), 10, 2 );
111
  add_filter( 'post_type_link', array( $this, 'post_type_link' ), 10, 2 );
112
 
 
 
 
 
113
  // Map group forum activity items to groups
114
  add_filter( 'bbp_before_record_activity_parse_args', array( $this, 'map_activity_to_group' ) );
115
 
116
  // No subforums yet, so suppress them for now
117
  add_filter( 'bbp_get_forum_subforum_count_int', array( $this, 'no_subforums_yet' ) );
118
+
119
+ /** Caps **************************************************************/
120
+
121
+ // Only add these filters if inside a group forum
122
+ if ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'forum' ) ) {
123
+
124
+ // Allow group member to view private/hidden forums
125
+ add_filter( 'bbp_map_meta_caps', array( $this, 'map_group_forum_meta_caps' ), 10, 4 );
126
+
127
+ // Group member permissions to view the topic and reply forms
128
+ add_filter( 'bbp_current_user_can_access_create_topic_form', array( $this, 'form_permissions' ) );
129
+ add_filter( 'bbp_current_user_can_access_create_reply_form', array( $this, 'form_permissions' ) );
130
+ }
131
  }
132
 
133
  /**
165
  return;
166
 
167
  // Are forums enabled for this group?
168
+ $checked = bp_get_new_group_enable_forum() || groups_get_groupmeta( bp_get_new_group_id(), 'forum_id' );
169
 
170
  // Tweak the nav item variable based on if group has forum or not
171
+ $this->enable_nav_item = (bool) $checked;
172
  }
173
 
174
  /**
182
  * @param array $args
183
  * @return array
184
  */
185
+ public function map_group_forum_meta_caps( $caps = array(), $cap = '', $user_id = 0, $args = array() ) {
 
 
 
 
186
 
187
  switch ( $cap ) {
188
 
192
  case 'publish_topics' :
193
  case 'read_hidden_forums' :
194
  case 'read_private_forums' :
195
+ if ( bbp_group_is_member() || bbp_group_is_mod() || bbp_group_is_admin() ) {
196
  $caps = array( 'participate' );
197
  }
198
  break;
204
  case 'view_trash' :
205
  case 'edit_others_replies' :
206
  case 'edit_others_topics' :
207
+ if ( bbp_group_is_mod() || bbp_group_is_admin() ) {
208
  $caps = array( 'participate' );
209
  }
210
  break;
212
  // If user is a group admin, allow them to delete topics and replies.
213
  case 'delete_topic' :
214
  case 'delete_reply' :
215
+ if ( bbp_group_is_admin() ) {
216
  $caps = array( 'participate' );
217
  }
218
  break;
226
  *
227
  * @since bbPress (r4434)
228
  */
229
+ public function remove_group_forum_meta_cap_map() {
230
+ remove_filter( 'bbp_map_meta_caps', array( $this, 'map_group_forum_meta_caps' ), 99, 4 );
 
231
  }
232
 
233
  /** Edit ******************************************************************/
301
  }
302
 
303
  // Update the group forum setting
304
+ $group = $this->toggle_group_forum( $group_id, $edit_forum );
 
 
305
 
306
  // Create a new forum
307
  if ( empty( $forum_id ) && ( true === $edit_forum ) ) {
377
  $create_forum = !empty( $_POST['bbp-create-group-forum'] ) ? true : false;
378
  $forum_id = 0;
379
  $forum_ids = bbp_get_group_forum_ids( bp_get_new_group_id() );
380
+
381
  if ( !empty( $forum_ids ) )
382
  $forum_id = (int) is_array( $forum_ids ) ? $forum_ids[0] : $forum_ids;
383
 
417
  // Update forum active
418
  groups_update_groupmeta( bp_get_new_group_id(), '_bbp_forum_enabled_' . $forum_id, true );
419
 
420
+ // Toggle forum on
421
+ $this->toggle_group_forum( bp_get_new_group_id(), true );
422
+
423
  break;
424
  case false :
425
 
426
  // Forum was created but is now being undone
427
  if ( !empty( $forum_id ) ) {
428
+
429
+ // Delete the forum
430
  wp_delete_post( $forum_id, true );
431
+
432
+ // Delete meta values
433
  groups_delete_groupmeta( bp_get_new_group_id(), 'forum_id' );
434
  groups_delete_groupmeta( bp_get_new_group_id(), '_bbp_forum_enabled_' . $forum_id );
435
+
436
+ // Toggle forum off
437
+ $this->toggle_group_forum( bp_get_new_group_id(), false );
438
  }
439
 
440
  break;
505
  bbp_remove_group_id_from_forum( $forum_id, $group_id );
506
  }
507
 
508
+ /**
509
+ * Toggle the enable_forum group setting on or off
510
+ *
511
+ * @since bbPress (r4612)
512
+ *
513
+ * @param int $group_id The group to toggle
514
+ * @param bool $enabled True for on, false for off
515
+ * @uses groups_get_group() To get the group to toggle
516
+ * @return False if group is not found, otherwise return the group
517
+ */
518
+ public function toggle_group_forum( $group_id = 0, $enabled = false ) {
519
+
520
+ // Get the group
521
+ $group = groups_get_group( array( 'group_id' => $group_id ) );
522
+
523
+ // Bail if group cannot be found
524
+ if ( empty( $group ) )
525
+ return false;
526
+
527
+ // Set forum enabled status
528
+ $group->enable_forum = (int) $enabled;
529
+
530
+ // Save the group
531
+ $group->save();
532
+
533
+ // Return the group
534
+ return $group;
535
+ }
536
+
537
  /** Display Methods *******************************************************/
538
 
539
  /**
831
  $wp_query->bbp_is_reply_edit = true;
832
  $post = $reply;
833
 
834
+ // Move
835
+ if ( !empty( $_GET['action'] ) && ( 'move' == $_GET['action'] ) ) :
836
+ bbp_set_query_name( 'bbp_reply_move' );
837
+ bbp_get_template_part( 'form', 'reply-move' );
838
+
839
+ // Edit
840
+ else :
841
+ bbp_set_query_name( 'bbp_reply_form' );
842
+ bbp_get_template_part( 'form', 'reply' );
843
+
844
+ endif;
845
 
846
  endif;
847
 
952
  <?php
953
  }
954
 
955
+ /**
956
+ * Permissions to view the 'New Topic'/'Reply To' form in a BuddyPress group.
957
+ *
958
+ * @since bbPress (r4608)
959
+ *
960
+ * @param bool $retval Are we allowed to view the reply form?
961
+ * @uses bp_is_group() To determine if we're on a group page
962
+ * @uses bp_loggedin_user_id() To determine if a user is logged in.
963
+ * @uses bp_group_is_member() Is the current user a member of the group?
964
+ * @uses bp_group_is_user_banned() Is the current user banned from the group?
965
+ *
966
+ * @return bool
967
+ */
968
+ public function form_permissions( $retval = false ) {
969
+
970
+ // Bail if not a group
971
+ if ( ! bp_is_group() ) {
972
+ return $retval;
973
+ }
974
+
975
+ // Bail if user is not logged in
976
+ if ( ! is_user_logged_in() ) {
977
+ return $retval;
978
+ }
979
+
980
+ // Non-members cannot see forms
981
+ if ( ! bbp_group_is_member() ) {
982
+ $retval = false;
983
+
984
+ // Banned users cannot see forms
985
+ } elseif ( bbp_group_is_banned() ) {
986
+ $retval = false;
987
+ }
988
+
989
+ return $retval;
990
+ }
991
+
992
  /** Permalink Mappers *****************************************************/
993
 
994
  /**
includes/extend/buddypress/loader.php CHANGED
@@ -45,7 +45,6 @@ class BBP_Forums_Component extends BP_Component {
45
  $this->includes();
46
  $this->setup_globals();
47
  $this->setup_actions();
48
- $this->setup_nav();
49
  $this->fully_loaded();
50
  }
51
 
@@ -103,6 +102,23 @@ class BBP_Forums_Component extends BP_Component {
103
  parent::setup_globals( $globals );
104
  }
105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  /**
107
  * Instantiate classes for BuddyPress integration
108
  *
@@ -124,22 +140,6 @@ class BBP_Forums_Component extends BP_Component {
124
  }
125
  }
126
 
127
- /**
128
- * Setup the actions
129
- *
130
- * @since bbPress (r3395)
131
- * @access private
132
- * @uses add_filter() To add various filters
133
- * @uses add_action() To add various actions
134
- */
135
- public function setup_actions() {
136
-
137
- // Setup the components
138
- add_action( 'bp_init', array( $this, 'setup_components' ) );
139
-
140
- parent::setup_actions();
141
- }
142
-
143
  /**
144
  * Allow the variables, actions, and filters to be modified by third party
145
  * plugins and themes.
45
  $this->includes();
46
  $this->setup_globals();
47
  $this->setup_actions();
 
48
  $this->fully_loaded();
49
  }
50
 
102
  parent::setup_globals( $globals );
103
  }
104
 
105
+ /**
106
+ * Setup the actions
107
+ *
108
+ * @since bbPress (r3395)
109
+ * @access private
110
+ * @uses add_filter() To add various filters
111
+ * @uses add_action() To add various actions
112
+ * @link http://bbpress.trac.wordpress.org/ticket/2176
113
+ */
114
+ public function setup_actions() {
115
+
116
+ // Setup the components
117
+ add_action( 'bp_init', array( $this, 'setup_components' ), 7 );
118
+
119
+ parent::setup_actions();
120
+ }
121
+
122
  /**
123
  * Instantiate classes for BuddyPress integration
124
  *
140
  }
141
  }
142
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  /**
144
  * Allow the variables, actions, and filters to be modified by third party
145
  * plugins and themes.
includes/extend/buddypress/members.php CHANGED
@@ -42,6 +42,9 @@ class BBP_BuddyPress_Members {
42
  */
43
  private function setup_actions() {
44
 
 
 
 
45
  /** Favorites *********************************************************/
46
 
47
  // Move handler to 'bp_actions' - BuddyPress bypasses template_loader
@@ -139,5 +142,32 @@ class BBP_BuddyPress_Members {
139
  $url = trailingslashit( bp_core_get_user_domain( $user_id ) . 'forums/subscriptions' );
140
  return $url;
141
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
  }
143
  endif;
42
  */
43
  private function setup_actions() {
44
 
45
+ // Allow unsubscribe/unfavorite links to work
46
+ add_action( 'bp_template_redirect', array( $this, 'set_member_forum_query_vars' ) );
47
+
48
  /** Favorites *********************************************************/
49
 
50
  // Move handler to 'bp_actions' - BuddyPress bypasses template_loader
142
  $url = trailingslashit( bp_core_get_user_domain( $user_id ) . 'forums/subscriptions' );
143
  return $url;
144
  }
145
+
146
+ /**
147
+ * Set favorites and subscriptions query variables if viewing member profile
148
+ * pages.
149
+ *
150
+ * @since bbPress (r4615)
151
+ *
152
+ * @global WP_Query $wp_query
153
+ * @return If not viewing your own profile
154
+ */
155
+ public function set_member_forum_query_vars() {
156
+
157
+ // Special handling for forum component
158
+ if ( ! bp_is_my_profile() )
159
+ return;
160
+
161
+ global $wp_query;
162
+
163
+ // 'favorites' action
164
+ if ( bbp_is_favorites_active() && bp_is_current_action( 'favorites' ) ) {
165
+ $wp_query->bbp_is_single_user_favs = true;
166
+
167
+ // 'subscriptions' action
168
+ } elseif ( bbp_is_subscriptions_active() && bp_is_current_action( 'subscriptions' ) ) {
169
+ $wp_query->bbp_is_single_user_subs = true;
170
+ }
171
+ }
172
  }
173
  endif;
includes/forums/capabilities.php CHANGED
@@ -176,7 +176,7 @@ function bbp_map_forum_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
176
  /** Admin *************************************************************/
177
 
178
  case 'bbp_forums_admin' :
179
- $caps = array( 'manage_options' );
180
  break;
181
  }
182
 
176
  /** Admin *************************************************************/
177
 
178
  case 'bbp_forums_admin' :
179
+ $caps = array( 'keep_gate' );
180
  break;
181
  }
182
 
includes/forums/functions.php CHANGED
@@ -77,6 +77,7 @@ function bbp_insert_forum( $forum_data = array(), $forum_meta = array() ) {
77
  /**
78
  * Handles the front end forum submission
79
  *
 
80
  * @uses bbPress:errors::add() To log various error messages
81
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
82
  * @uses bbp_is_anonymous() To check if an anonymous post is being made
@@ -106,14 +107,10 @@ function bbp_insert_forum( $forum_data = array(), $forum_meta = array() ) {
106
  * @uses bbPress::errors::get_error_messages() To get the {@link WP_Error} error
107
  * messages
108
  */
109
- function bbp_new_forum_handler() {
110
-
111
- // Bail if not a POST action
112
- if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
113
- return;
114
 
115
  // Bail if action is not bbp-new-forum
116
- if ( empty( $_POST['action'] ) || ( 'bbp-new-forum' !== $_POST['action'] ) )
117
  return;
118
 
119
  // Nonce check
@@ -299,7 +296,7 @@ function bbp_new_forum_handler() {
299
  /** Redirect **********************************************************/
300
 
301
  // Redirect to
302
- $redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
303
 
304
  // Get the forum URL
305
  $redirect_url = bbp_get_forum_permalink( $forum_id, $redirect_to );
@@ -338,6 +335,7 @@ function bbp_new_forum_handler() {
338
  /**
339
  * Handles the front end edit forum submission
340
  *
 
341
  * @uses bbPress:errors::add() To log various error messages
342
  * @uses bbp_get_forum() To get the forum
343
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
@@ -367,14 +365,10 @@ function bbp_new_forum_handler() {
367
  * @uses bbPress::errors::get_error_messages() To get the {@link WP_Error} error
368
  * messages
369
  */
370
- function bbp_edit_forum_handler() {
371
-
372
- // Bail if not a POST action
373
- if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
374
- return;
375
 
376
  // Bail if action is not bbp-edit-forum
377
- if ( empty( $_POST['action'] ) || ( 'bbp-edit-forum' !== $_POST['action'] ) )
378
  return;
379
 
380
  // Define local variable(s)
@@ -554,7 +548,7 @@ function bbp_edit_forum_handler() {
554
  /** Redirect **********************************************************/
555
 
556
  // Redirect to
557
- $redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
558
 
559
  // View all?
560
  $view_all = bbp_get_view_all();
@@ -663,25 +657,6 @@ function bbp_save_forum_extras( $forum_id = 0 ) {
663
  }
664
  }
665
 
666
- /** Walk **********************************************************************/
667
-
668
- /**
669
- * Walk the forum tree
670
- *
671
- * @param object $forums Forums
672
- * @param int $depth Depth
673
- * @param int $current Current forum
674
- * @param array $r Parsed arguments, supported by the walker. If you want to
675
- * use your own walker, pass the 'walker' arg with the walker.
676
- * The walker defaults to {@link BBP_Walker_Forum}
677
- * @return object Walked forum tree
678
- */
679
- function bbp_walk_forum( $forums, $depth, $current, $r ) {
680
- $walker = empty( $r['walker'] ) ? new BBP_Walker_Forum : $r['walker'];
681
- $args = array( $forums, $depth, $r, $current );
682
- return call_user_func_array( array( &$walker, 'walk' ), $args );
683
- }
684
-
685
  /** Forum Actions *************************************************************/
686
 
687
  /**
@@ -954,8 +929,8 @@ function bbp_bump_forum_topic_count( $forum_id = 0, $difference = 1, $update_anc
954
 
955
  // Get some counts
956
  $forum_id = bbp_get_forum_id( $forum_id );
957
- $topic_count = bbp_get_forum_topic_count( $forum_id, false, false );
958
- $total_topic_count = bbp_get_forum_topic_count( $forum_id, true, false );
959
 
960
  // Update this forum id
961
  update_post_meta( $forum_id, '_bbp_topic_count', (int) $topic_count + (int) $difference );
@@ -973,8 +948,8 @@ function bbp_bump_forum_topic_count( $forum_id = 0, $difference = 1, $update_anc
973
  foreach ( (array) $ancestors as $parent_forum_id ) {
974
 
975
  // Get forum counts
976
- $parent_topic_count = bbp_get_forum_topic_count( $parent_forum_id, false, false );
977
- $parent_total_topic_count = bbp_get_forum_topic_count( $parent_forum_id, true, false );
978
 
979
  // Update counts
980
  update_post_meta( $parent_forum_id, '_bbp_topic_count', (int) $parent_topic_count + (int) $difference );
@@ -1003,7 +978,7 @@ function bbp_bump_forum_topic_count_hidden( $forum_id = 0, $difference = 1 ) {
1003
 
1004
  // Get some counts
1005
  $forum_id = bbp_get_forum_id( $forum_id );
1006
- $topic_count = bbp_get_forum_topic_count_hidden( $forum_id, false );
1007
  $new_count = (int) $topic_count + (int) $difference;
1008
 
1009
  // Update this forum id
@@ -1030,8 +1005,8 @@ function bbp_bump_forum_reply_count( $forum_id = 0, $difference = 1, $update_anc
1030
 
1031
  // Get some counts
1032
  $forum_id = bbp_get_forum_id( $forum_id );
1033
- $topic_count = bbp_get_forum_reply_count( $forum_id, false );
1034
- $total_reply_count = bbp_get_forum_reply_count( $forum_id, true );
1035
 
1036
  // Update this forum id
1037
  update_post_meta( $forum_id, '_bbp_reply_count', (int) $topic_count + (int) $difference );
@@ -1049,8 +1024,8 @@ function bbp_bump_forum_reply_count( $forum_id = 0, $difference = 1, $update_anc
1049
  foreach ( (array) $ancestors as $parent_forum_id ) {
1050
 
1051
  // Get forum counts
1052
- $parent_topic_count = bbp_get_forum_reply_count( $parent_forum_id, false );
1053
- $parent_total_reply_count = bbp_get_forum_reply_count( $parent_forum_id, true );
1054
 
1055
  // Update counts
1056
  update_post_meta( $parent_forum_id, '_bbp_reply_count', (int) $parent_topic_count + (int) $difference );
@@ -1431,10 +1406,11 @@ function bbp_update_forum_reply_count( $forum_id = 0 ) {
1431
 
1432
  // Don't count replies if the forum is a category
1433
  $topic_ids = bbp_forum_query_topic_ids( $forum_id );
1434
- if ( !empty( $topic_ids ) )
1435
  $reply_count = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM {$wpdb->posts} WHERE post_parent IN ( " . join( ',', $topic_ids ) . " ) AND post_status = '%s' AND post_type = '%s';", bbp_get_public_status_id(), bbp_get_reply_post_type() ) );
1436
- else
1437
  $reply_count = 0;
 
1438
 
1439
  // Calculate total replies in this forum
1440
  $total_replies = (int) $reply_count + $children_reply_count;
@@ -1472,7 +1448,9 @@ function bbp_update_forum_reply_count( $forum_id = 0 ) {
1472
  * @uses bbp_update_forum_topic_count_hidden() To update the hidden topic count
1473
  */
1474
  function bbp_update_forum( $args = '' ) {
1475
- $defaults = array(
 
 
1476
  'forum_id' => 0,
1477
  'post_parent' => 0,
1478
  'last_topic_id' => 0,
@@ -1480,36 +1458,35 @@ function bbp_update_forum( $args = '' ) {
1480
  'last_active_id' => 0,
1481
  'last_active_time' => 0,
1482
  'last_active_status' => bbp_get_public_status_id()
1483
- );
1484
- $r = bbp_parse_args( $args, $defaults, 'update_forum' );
1485
- extract( $r );
1486
 
1487
  // Last topic and reply ID's
1488
- bbp_update_forum_last_topic_id( $forum_id, $last_topic_id );
1489
- bbp_update_forum_last_reply_id( $forum_id, $last_reply_id );
1490
 
1491
  // Active dance
1492
- $last_active_id = bbp_update_forum_last_active_id( $forum_id, $last_active_id );
1493
 
1494
  // If no active time was passed, get it from the last_active_id
1495
- if ( empty( $last_active_time ) )
1496
- $last_active_time = get_post_field( 'post_date', $last_active_id );
 
1497
 
1498
- if ( bbp_get_public_status_id() == $last_active_status ) {
1499
- bbp_update_forum_last_active_time( $forum_id, $last_active_time );
1500
  }
1501
 
1502
  // Counts
1503
- bbp_update_forum_subforum_count ( $forum_id );
1504
- bbp_update_forum_reply_count ( $forum_id );
1505
- bbp_update_forum_topic_count ( $forum_id );
1506
- bbp_update_forum_topic_count_hidden( $forum_id );
1507
 
1508
  // Update the parent forum if one was passed
1509
- if ( !empty( $post_parent ) && is_numeric( $post_parent ) ) {
1510
  bbp_update_forum( array(
1511
- 'forum_id' => $post_parent,
1512
- 'post_parent' => get_post_field( 'post_parent', $post_parent )
1513
  ) );
1514
  }
1515
  }
@@ -1748,7 +1725,7 @@ function bbp_forum_query_topic_ids( $forum_id ) {
1748
  * ids and forum id
1749
  */
1750
  function bbp_forum_query_subforum_ids( $forum_id ) {
1751
- $subforum_ids = bbp_get_public_child_ids( $forum_id, bbp_get_forum_post_type() );
1752
  //usort( $subforum_ids, '_bbp_forum_query_usort_subforum_ids' );
1753
 
1754
  return apply_filters( 'bbp_get_forum_subforum_ids', $subforum_ids, $forum_id );
@@ -1960,16 +1937,21 @@ function bbp_delete_forum_topics( $forum_id = 0 ) {
1960
  if ( empty( $forum_id ) )
1961
  return;
1962
 
1963
- // Forum is being permanently deleted, so its topics gotta go too
1964
- if ( $topics = new WP_Query( array(
 
1965
  'suppress_filters' => true,
1966
  'post_type' => bbp_get_topic_post_type(),
1967
  'post_parent' => $forum_id,
1968
- 'post_status' => 'any',
1969
  'posts_per_page' => -1,
1970
  'nopaging' => true,
1971
  'fields' => 'id=>parent'
1972
- ) ) ) {
 
 
 
 
1973
  foreach ( $topics->posts as $topic ) {
1974
  wp_delete_post( $topic->ID, true );
1975
  }
@@ -1977,6 +1959,9 @@ function bbp_delete_forum_topics( $forum_id = 0 ) {
1977
  // Reset the $post global
1978
  wp_reset_postdata();
1979
  }
 
 
 
1980
  }
1981
 
1982
  /**
@@ -2009,8 +1994,8 @@ function bbp_trash_forum_topics( $forum_id = 0 ) {
2009
  bbp_get_pending_status_id()
2010
  ) );
2011
 
2012
- // Forum is being trashed, so its topics are trashed too
2013
- if ( $topics = new WP_Query( array(
2014
  'suppress_filters' => true,
2015
  'post_type' => bbp_get_topic_post_type(),
2016
  'post_parent' => $forum_id,
@@ -2018,7 +2003,11 @@ function bbp_trash_forum_topics( $forum_id = 0 ) {
2018
  'posts_per_page' => -1,
2019
  'nopaging' => true,
2020
  'fields' => 'id=>parent'
2021
- ) ) ) {
 
 
 
 
2022
 
2023
  // Prevent debug notices
2024
  $pre_trashed_topics = array();
@@ -2037,6 +2026,9 @@ function bbp_trash_forum_topics( $forum_id = 0 ) {
2037
  // Reset the $post global
2038
  wp_reset_postdata();
2039
  }
 
 
 
2040
  }
2041
 
2042
  /**
77
  /**
78
  * Handles the front end forum submission
79
  *
80
+ * @param string $action The requested action to compare this function to
81
  * @uses bbPress:errors::add() To log various error messages
82
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
83
  * @uses bbp_is_anonymous() To check if an anonymous post is being made
107
  * @uses bbPress::errors::get_error_messages() To get the {@link WP_Error} error
108
  * messages
109
  */
110
+ function bbp_new_forum_handler( $action = '' ) {
 
 
 
 
111
 
112
  // Bail if action is not bbp-new-forum
113
+ if ( 'bbp-new-forum' !== $action )
114
  return;
115
 
116
  // Nonce check
296
  /** Redirect **********************************************************/
297
 
298
  // Redirect to
299
+ $redirect_to = bbp_get_redirect_to();
300
 
301
  // Get the forum URL
302
  $redirect_url = bbp_get_forum_permalink( $forum_id, $redirect_to );
335
  /**
336
  * Handles the front end edit forum submission
337
  *
338
+ * @param string $action The requested action to compare this function to
339
  * @uses bbPress:errors::add() To log various error messages
340
  * @uses bbp_get_forum() To get the forum
341
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
365
  * @uses bbPress::errors::get_error_messages() To get the {@link WP_Error} error
366
  * messages
367
  */
368
+ function bbp_edit_forum_handler( $action = '' ) {
 
 
 
 
369
 
370
  // Bail if action is not bbp-edit-forum
371
+ if ( 'bbp-edit-forum' !== $action )
372
  return;
373
 
374
  // Define local variable(s)
548
  /** Redirect **********************************************************/
549
 
550
  // Redirect to
551
+ $redirect_to = bbp_get_redirect_to();
552
 
553
  // View all?
554
  $view_all = bbp_get_view_all();
657
  }
658
  }
659
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
660
  /** Forum Actions *************************************************************/
661
 
662
  /**
929
 
930
  // Get some counts
931
  $forum_id = bbp_get_forum_id( $forum_id );
932
+ $topic_count = bbp_get_forum_topic_count( $forum_id, false, true );
933
+ $total_topic_count = bbp_get_forum_topic_count( $forum_id, true, true );
934
 
935
  // Update this forum id
936
  update_post_meta( $forum_id, '_bbp_topic_count', (int) $topic_count + (int) $difference );
948
  foreach ( (array) $ancestors as $parent_forum_id ) {
949
 
950
  // Get forum counts
951
+ $parent_topic_count = bbp_get_forum_topic_count( $parent_forum_id, false, true );
952
+ $parent_total_topic_count = bbp_get_forum_topic_count( $parent_forum_id, true, true );
953
 
954
  // Update counts
955
  update_post_meta( $parent_forum_id, '_bbp_topic_count', (int) $parent_topic_count + (int) $difference );
978
 
979
  // Get some counts
980
  $forum_id = bbp_get_forum_id( $forum_id );
981
+ $topic_count = bbp_get_forum_topic_count_hidden( $forum_id, true );
982
  $new_count = (int) $topic_count + (int) $difference;
983
 
984
  // Update this forum id
1005
 
1006
  // Get some counts
1007
  $forum_id = bbp_get_forum_id( $forum_id );
1008
+ $topic_count = bbp_get_forum_reply_count( $forum_id, false, true );
1009
+ $total_reply_count = bbp_get_forum_reply_count( $forum_id, true, true );
1010
 
1011
  // Update this forum id
1012
  update_post_meta( $forum_id, '_bbp_reply_count', (int) $topic_count + (int) $difference );
1024
  foreach ( (array) $ancestors as $parent_forum_id ) {
1025
 
1026
  // Get forum counts
1027
+ $parent_topic_count = bbp_get_forum_reply_count( $parent_forum_id, false, true );
1028
+ $parent_total_reply_count = bbp_get_forum_reply_count( $parent_forum_id, true, true );
1029
 
1030
  // Update counts
1031
  update_post_meta( $parent_forum_id, '_bbp_reply_count', (int) $parent_topic_count + (int) $difference );
1406
 
1407
  // Don't count replies if the forum is a category
1408
  $topic_ids = bbp_forum_query_topic_ids( $forum_id );
1409
+ if ( !empty( $topic_ids ) ) {
1410
  $reply_count = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM {$wpdb->posts} WHERE post_parent IN ( " . join( ',', $topic_ids ) . " ) AND post_status = '%s' AND post_type = '%s';", bbp_get_public_status_id(), bbp_get_reply_post_type() ) );
1411
+ } else {
1412
  $reply_count = 0;
1413
+ }
1414
 
1415
  // Calculate total replies in this forum
1416
  $total_replies = (int) $reply_count + $children_reply_count;
1448
  * @uses bbp_update_forum_topic_count_hidden() To update the hidden topic count
1449
  */
1450
  function bbp_update_forum( $args = '' ) {
1451
+
1452
+ // Parse arguments against default values
1453
+ $r = bbp_parse_args( $args, array(
1454
  'forum_id' => 0,
1455
  'post_parent' => 0,
1456
  'last_topic_id' => 0,
1458
  'last_active_id' => 0,
1459
  'last_active_time' => 0,
1460
  'last_active_status' => bbp_get_public_status_id()
1461
+ ), 'update_forum' );
 
 
1462
 
1463
  // Last topic and reply ID's
1464
+ bbp_update_forum_last_topic_id( $r['forum_id'], $r['last_topic_id'] );
1465
+ bbp_update_forum_last_reply_id( $r['forum_id'], $r['last_reply_id'] );
1466
 
1467
  // Active dance
1468
+ $r['last_active_id'] = bbp_update_forum_last_active_id( $r['forum_id'], $r['last_active_id'] );
1469
 
1470
  // If no active time was passed, get it from the last_active_id
1471
+ if ( empty( $r['last_active_time'] ) ) {
1472
+ $r['last_active_time'] = get_post_field( 'post_date', $r['last_active_id'] );
1473
+ }
1474
 
1475
+ if ( bbp_get_public_status_id() == $r['last_active_status'] ) {
1476
+ bbp_update_forum_last_active_time( $r['forum_id'], $r['last_active_time'] );
1477
  }
1478
 
1479
  // Counts
1480
+ bbp_update_forum_subforum_count ( $r['forum_id'] );
1481
+ bbp_update_forum_reply_count ( $r['forum_id'] );
1482
+ bbp_update_forum_topic_count ( $r['forum_id'] );
1483
+ bbp_update_forum_topic_count_hidden( $r['forum_id'] );
1484
 
1485
  // Update the parent forum if one was passed
1486
+ if ( !empty( $r['post_parent'] ) && is_numeric( $r['post_parent'] ) ) {
1487
  bbp_update_forum( array(
1488
+ 'forum_id' => $r['post_parent'],
1489
+ 'post_parent' => get_post_field( 'post_parent', $r['post_parent'] )
1490
  ) );
1491
  }
1492
  }
1725
  * ids and forum id
1726
  */
1727
  function bbp_forum_query_subforum_ids( $forum_id ) {
1728
+ $subforum_ids = bbp_get_all_child_ids( $forum_id, bbp_get_forum_post_type() );
1729
  //usort( $subforum_ids, '_bbp_forum_query_usort_subforum_ids' );
1730
 
1731
  return apply_filters( 'bbp_get_forum_subforum_ids', $subforum_ids, $forum_id );
1937
  if ( empty( $forum_id ) )
1938
  return;
1939
 
1940
+ // Forum is being permanently deleted, so its content has go too
1941
+ // Note that we get all post statuses here
1942
+ $topics = new WP_Query( array(
1943
  'suppress_filters' => true,
1944
  'post_type' => bbp_get_topic_post_type(),
1945
  'post_parent' => $forum_id,
1946
+ 'post_status' => array_keys( get_post_stati() ),
1947
  'posts_per_page' => -1,
1948
  'nopaging' => true,
1949
  'fields' => 'id=>parent'
1950
+ ) );
1951
+
1952
+ // Loop through and delete child topics. Topic replies will get deleted by
1953
+ // the bbp_delete_topic() action.
1954
+ if ( !empty( $topics->posts ) ) {
1955
  foreach ( $topics->posts as $topic ) {
1956
  wp_delete_post( $topic->ID, true );
1957
  }
1959
  // Reset the $post global
1960
  wp_reset_postdata();
1961
  }
1962
+
1963
+ // Cleanup
1964
+ unset( $topics );
1965
  }
1966
 
1967
  /**
1994
  bbp_get_pending_status_id()
1995
  ) );
1996
 
1997
+ // Forum is being trashed, so its topics and replies are trashed too
1998
+ $topics = new WP_Query( array(
1999
  'suppress_filters' => true,
2000
  'post_type' => bbp_get_topic_post_type(),
2001
  'post_parent' => $forum_id,
2003
  'posts_per_page' => -1,
2004
  'nopaging' => true,
2005
  'fields' => 'id=>parent'
2006
+ ) );
2007
+
2008
+ // Loop through and trash child topics. Topic replies will get trashed by
2009
+ // the bbp_trash_topic() action.
2010
+ if ( !empty( $topics->posts ) ) {
2011
 
2012
  // Prevent debug notices
2013
  $pre_trashed_topics = array();
2026
  // Reset the $post global
2027
  wp_reset_postdata();
2028
  }
2029
+
2030
+ // Cleanup
2031
+ unset( $topics );
2032
  }
2033
 
2034
  /**
includes/forums/template-tags.php CHANGED
@@ -56,7 +56,6 @@ function bbp_forum_post_type() {
56
  * @return object Multidimensional array of forum information
57
  */
58
  function bbp_has_forums( $args = '' ) {
59
- $bbp = bbpress();
60
 
61
  // Setup possible post__not_in array
62
  $post_stati[] = bbp_get_public_status_id();
@@ -69,18 +68,18 @@ function bbp_has_forums( $args = '' ) {
69
  if ( current_user_can( 'read_hidden_forums' ) )
70
  $post_stati[] = bbp_get_hidden_status_id();
71
 
72
- // The default forum query for most circumstances
73
- $defaults = array (
74
  'post_type' => bbp_get_forum_post_type(),
75
  'post_parent' => bbp_is_forum_archive() ? 0 : bbp_get_forum_id() ,
76
  'post_status' => implode( ',', $post_stati ),
77
  'posts_per_page' => get_option( '_bbp_forums_per_page', 50 ),
78
  'orderby' => 'menu_order',
79
  'order' => 'ASC'
80
- );
81
- $bbp_f = bbp_parse_args( $args, $defaults, 'has_forums' );
82
 
83
  // Run the query
 
84
  $bbp->forum_query = new WP_Query( $bbp_f );
85
 
86
  return apply_filters( 'bbp_has_forums', $bbp->forum_query->have_posts(), $bbp->forum_query );
@@ -141,6 +140,7 @@ function bbp_forum_id( $forum_id = 0 ) {
141
  * @uses bbPress::forum_query::in_the_loop To check if we're in the loop
142
  * @uses bbPress::forum_query::post::ID To get the forum id
143
  * @uses WP_Query::post::ID To get the forum id
 
144
  * @uses bbp_is_single_forum() To check if it's a forum page
145
  * @uses bbp_is_single_topic() To check if it's a topic page
146
  * @uses bbp_get_topic_forum_id() To get the topic forum id
@@ -155,28 +155,33 @@ function bbp_forum_id( $forum_id = 0 ) {
155
  $bbp = bbpress();
156
 
157
  // Easy empty checking
158
- if ( !empty( $forum_id ) && is_numeric( $forum_id ) )
159
  $bbp_forum_id = $forum_id;
160
 
161
  // Currently inside a forum loop
162
- elseif ( !empty( $bbp->forum_query->in_the_loop ) && isset( $bbp->forum_query->post->ID ) )
163
  $bbp_forum_id = $bbp->forum_query->post->ID;
164
 
 
 
 
 
165
  // Currently viewing a forum
166
- elseif ( bbp_is_single_forum() && !empty( $bbp->current_forum_id ) )
167
  $bbp_forum_id = $bbp->current_forum_id;
168
 
169
  // Currently viewing a forum
170
- elseif ( bbp_is_single_forum() && isset( $wp_query->post->ID ) )
171
  $bbp_forum_id = $wp_query->post->ID;
172
 
173
  // Currently viewing a topic
174
- elseif ( bbp_is_single_topic() )
175
  $bbp_forum_id = bbp_get_topic_forum_id();
176
 
177
  // Fallback
178
- else
179
  $bbp_forum_id = 0;
 
180
 
181
  return (int) apply_filters( 'bbp_get_forum_id', (int) $bbp_forum_id, $forum_id );
182
  }
@@ -450,9 +455,11 @@ function bbp_forum_last_active_time( $forum_id = 0 ) {
450
  * @return string Forum last update date/time (freshness)
451
  */
452
  function bbp_get_forum_last_active_time( $forum_id = 0 ) {
453
- $forum_id = bbp_get_forum_id( $forum_id );
454
 
 
 
455
  $last_active = get_post_meta( $forum_id, '_bbp_last_active_time', true );
 
456
  if ( empty( $last_active ) ) {
457
  $reply_id = bbp_get_forum_last_reply_id( $forum_id );
458
  if ( !empty( $reply_id ) ) {
@@ -465,9 +472,9 @@ function bbp_forum_last_active_time( $forum_id = 0 ) {
465
  }
466
  }
467
 
468
- $last_active = !empty( $last_active ) ? bbp_get_time_since( bbp_convert_date( $last_active ) ) : '';
469
 
470
- return apply_filters( 'bbp_get_forum_last_active', $last_active, $forum_id );
471
  }
472
 
473
  /**
@@ -510,6 +517,7 @@ function bbp_forum_freshness_link( $forum_id = 0) {
510
  function bbp_get_forum_freshness_link( $forum_id = 0 ) {
511
  $forum_id = bbp_get_forum_id( $forum_id );
512
  $active_id = bbp_get_forum_last_active_id( $forum_id );
 
513
 
514
  if ( empty( $active_id ) )
515
  $active_id = bbp_get_forum_last_reply_id( $forum_id );
@@ -532,7 +540,7 @@ function bbp_forum_freshness_link( $forum_id = 0) {
532
  else
533
  $anchor = __( 'No Topics', 'bbpress' );
534
 
535
- return apply_filters( 'bbp_get_forum_freshness_link', $anchor, $forum_id );
536
  }
537
 
538
  /**
@@ -632,21 +640,26 @@ function bbp_forum_get_subforums( $args = '' ) {
632
  }
633
  }
634
 
635
- $defaults = array(
636
- 'post_parent' => 0,
637
- 'post_type' => bbp_get_forum_post_type(),
638
- 'post_status' => implode( ',', $post_stati ),
639
- 'posts_per_page' => get_option( '_bbp_forums_per_page', 50 ),
640
- 'orderby' => 'menu_order',
641
- 'order' => 'ASC'
642
- );
643
- $r = bbp_parse_args( $args, $defaults, 'forum_get_subforums' );
 
 
644
  $r['post_parent'] = bbp_get_forum_id( $r['post_parent'] );
645
 
 
 
 
646
  // No forum passed
647
- $sub_forums = !empty( $r['post_parent'] ) ? get_posts( $r ) : '';
648
 
649
- return apply_filters( 'bbp_forum_get_sub_forums', (array) $sub_forums, $args );
650
  }
651
 
652
  /**
@@ -675,8 +688,8 @@ function bbp_list_forums( $args = '' ) {
675
  $i = 0;
676
  $count = array();
677
 
678
- // Defaults and arguments
679
- $defaults = array (
680
  'before' => '<ul class="bbp-forums-list">',
681
  'after' => '</ul>',
682
  'link_before' => '<li class="bbp-forum">',
@@ -688,16 +701,10 @@ function bbp_list_forums( $args = '' ) {
688
  'forum_id' => '',
689
  'show_topic_count' => true,
690
  'show_reply_count' => true,
691
- );
692
- $r = bbp_parse_args( $args, $defaults, 'list_forums' );
693
- extract( $r, EXTR_SKIP );
694
-
695
- // Bail if there are no subforums
696
- if ( !bbp_get_forum_subforum_count( $forum_id, false ) )
697
- return;
698
 
699
  // Loop through forums and create a list
700
- $sub_forums = bbp_forum_get_subforums( $forum_id );
701
  if ( !empty( $sub_forums ) ) {
702
 
703
  // Total count (for separator)
@@ -707,31 +714,31 @@ function bbp_list_forums( $args = '' ) {
707
 
708
  // Get forum details
709
  $count = array();
710
- $show_sep = $total_subs > $i ? $separator : '';
711
  $permalink = bbp_get_forum_permalink( $sub_forum->ID );
712
  $title = bbp_get_forum_title( $sub_forum->ID );
713
 
714
  // Show topic count
715
- if ( !empty( $show_topic_count ) && !bbp_is_forum_category( $sub_forum->ID ) ) {
716
  $count['topic'] = bbp_get_forum_topic_count( $sub_forum->ID );
717
  }
718
 
719
  // Show reply count
720
- if ( !empty( $show_reply_count ) && !bbp_is_forum_category( $sub_forum->ID ) ) {
721
  $count['reply'] = bbp_get_forum_reply_count( $sub_forum->ID );
722
  }
723
 
724
  // Counts to show
725
  if ( !empty( $count ) ) {
726
- $counts = $count_before . implode( $count_sep, $count ) . $count_after;
727
  }
728
 
729
  // Build this sub forums link
730
- $output .= $link_before . '<a href="' . $permalink . '" class="bbp-forum-link">' . $title . $counts . '</a>' . $show_sep . $link_after;
731
  }
732
 
733
  // Output the list
734
- echo apply_filters( 'bbp_list_forums', $before . $output . $after, $args );
735
  }
736
  }
737
 
@@ -1820,19 +1827,17 @@ function bbp_single_forum_description( $args = '' ) {
1820
  */
1821
  function bbp_get_single_forum_description( $args = '' ) {
1822
 
1823
- // Default arguments
1824
- $defaults = array (
1825
  'forum_id' => 0,
1826
  'before' => '<div class="bbp-template-notice info"><p class="bbp-forum-description">',
1827
  'after' => '</p></div>',
1828
  'size' => 14,
1829
  'feed' => true
1830
- );
1831
- $r = bbp_parse_args( $args, $defaults, 'get_single_forum_description' );
1832
- extract( $r );
1833
 
1834
  // Validate forum_id
1835
- $forum_id = bbp_get_forum_id( $forum_id );
1836
 
1837
  // Unhook the 'view all' query var adder
1838
  remove_filter( 'bbp_get_forum_permalink', 'bbp_add_view_all' );
@@ -1853,7 +1858,7 @@ function bbp_single_forum_description( $args = '' ) {
1853
  if ( !empty( $last_active ) ) {
1854
  $topic_text = bbp_get_forum_topics_link( $forum_id );
1855
  $time_since = bbp_get_forum_freshness_link( $forum_id );
1856
- $last_updated_by = bbp_get_author_link( array( 'post_id' => $last_active, 'size' => $size ) );
1857
 
1858
  // Forum has no last active data
1859
  } else {
@@ -1908,13 +1913,13 @@ function bbp_single_forum_description( $args = '' ) {
1908
  }
1909
 
1910
  // Add feeds
1911
- //$feed_links = ( !empty( $feed ) ) ? bbp_get_forum_topics_feed_link ( $forum_id ) . bbp_get_forum_replies_feed_link( $forum_id ) : '';
1912
 
1913
  // Add the 'view all' filter back
1914
  add_filter( 'bbp_get_forum_permalink', 'bbp_add_view_all' );
1915
 
1916
  // Combine the elements together
1917
- $retstr = $before . $retstr . $after;
1918
 
1919
  // Return filtered result
1920
  return apply_filters( 'bbp_get_single_forum_description', $retstr, $args );
@@ -1944,16 +1949,17 @@ function bbp_form_forum_title() {
1944
  function bbp_get_form_forum_title() {
1945
 
1946
  // Get _POST data
1947
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_title'] ) )
1948
  $forum_title = $_POST['bbp_forum_title'];
1949
 
1950
  // Get edit data
1951
- elseif ( bbp_is_forum_edit() )
1952
  $forum_title = bbp_get_global_post_field( 'post_title', 'raw' );
1953
 
1954
  // No data
1955
- else
1956
  $forum_title = '';
 
1957
 
1958
  return apply_filters( 'bbp_get_form_forum_title', esc_attr( $forum_title ) );
1959
  }
@@ -1980,16 +1986,17 @@ function bbp_form_forum_content() {
1980
  function bbp_get_form_forum_content() {
1981
 
1982
  // Get _POST data
1983
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_content'] ) )
1984
  $forum_content = $_POST['bbp_forum_content'];
1985
 
1986
  // Get edit data
1987
- elseif ( bbp_is_forum_edit() )
1988
  $forum_content = bbp_get_global_post_field( 'post_content', 'raw' );
1989
 
1990
  // No data
1991
- else
1992
  $forum_content = '';
 
1993
 
1994
  return apply_filters( 'bbp_get_form_forum_content', esc_textarea( $forum_content ) );
1995
  }
@@ -2017,16 +2024,17 @@ function bbp_form_forum_parent() {
2017
  function bbp_get_form_forum_parent() {
2018
 
2019
  // Get _POST data
2020
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_id'] ) )
2021
  $forum_parent = $_POST['bbp_forum_id'];
2022
 
2023
  // Get edit data
2024
- elseif ( bbp_is_forum_edit() )
2025
  $forum_parent = bbp_get_forum_parent_id();
2026
 
2027
  // No data
2028
- else
2029
  $forum_parent = 0;
 
2030
 
2031
  return apply_filters( 'bbp_get_form_forum_parent', esc_attr( $forum_parent ) );
2032
  }
@@ -2054,16 +2062,17 @@ function bbp_form_forum_type() {
2054
  function bbp_get_form_forum_type() {
2055
 
2056
  // Get _POST data
2057
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_type'] ) )
2058
  $forum_type = $_POST['bbp_forum_type'];
2059
 
2060
  // Get edit data
2061
- elseif ( bbp_is_forum_edit() )
2062
  $forum_type = bbp_get_forum_type();
2063
 
2064
  // No data
2065
- else
2066
  $forum_type = 'forum';
 
2067
 
2068
  return apply_filters( 'bbp_get_form_forum_type', esc_attr( $forum_type ) );
2069
  }
@@ -2091,16 +2100,17 @@ function bbp_form_forum_visibility() {
2091
  function bbp_get_form_forum_visibility() {
2092
 
2093
  // Get _POST data
2094
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_visibility'] ) )
2095
  $forum_visibility = $_POST['bbp_forum_visibility'];
2096
 
2097
  // Get edit data
2098
- elseif ( bbp_is_forum_edit() )
2099
  $forum_visibility = bbp_get_forum_visibility();
2100
 
2101
  // No data
2102
- else
2103
  $forum_visibility = bbpress()->public_status_id;
 
2104
 
2105
  return apply_filters( 'bbp_get_form_forum_visibility', esc_attr( $forum_visibility ) );
2106
  }
56
  * @return object Multidimensional array of forum information
57
  */
58
  function bbp_has_forums( $args = '' ) {
 
59
 
60
  // Setup possible post__not_in array
61
  $post_stati[] = bbp_get_public_status_id();
68
  if ( current_user_can( 'read_hidden_forums' ) )
69
  $post_stati[] = bbp_get_hidden_status_id();
70
 
71
+ // Parse arguments with default forum query for most circumstances
72
+ $bbp_f = bbp_parse_args( $args, array(
73
  'post_type' => bbp_get_forum_post_type(),
74
  'post_parent' => bbp_is_forum_archive() ? 0 : bbp_get_forum_id() ,
75
  'post_status' => implode( ',', $post_stati ),
76
  'posts_per_page' => get_option( '_bbp_forums_per_page', 50 ),
77
  'orderby' => 'menu_order',
78
  'order' => 'ASC'
79
+ ), 'has_forums' );
 
80
 
81
  // Run the query
82
+ $bbp = bbpress();
83
  $bbp->forum_query = new WP_Query( $bbp_f );
84
 
85
  return apply_filters( 'bbp_has_forums', $bbp->forum_query->have_posts(), $bbp->forum_query );
140
  * @uses bbPress::forum_query::in_the_loop To check if we're in the loop
141
  * @uses bbPress::forum_query::post::ID To get the forum id
142
  * @uses WP_Query::post::ID To get the forum id
143
+ * @uses bbp_is_forum() To check if the search result is a forum
144
  * @uses bbp_is_single_forum() To check if it's a forum page
145
  * @uses bbp_is_single_topic() To check if it's a topic page
146
  * @uses bbp_get_topic_forum_id() To get the topic forum id
155
  $bbp = bbpress();
156
 
157
  // Easy empty checking
158
+ if ( !empty( $forum_id ) && is_numeric( $forum_id ) ) {
159
  $bbp_forum_id = $forum_id;
160
 
161
  // Currently inside a forum loop
162
+ } elseif ( !empty( $bbp->forum_query->in_the_loop ) && isset( $bbp->forum_query->post->ID ) ) {
163
  $bbp_forum_id = $bbp->forum_query->post->ID;
164
 
165
+ // Currently inside a search loop
166
+ } elseif ( !empty( $bbp->search_query->in_the_loop ) && isset( $bbp->search_query->post->ID ) && bbp_is_forum( $bbp->search_query->post->ID ) ) {
167
+ $bbp_forum_id = $bbp->search_query->post->ID;
168
+
169
  // Currently viewing a forum
170
+ } elseif ( bbp_is_single_forum() && !empty( $bbp->current_forum_id ) ) {
171
  $bbp_forum_id = $bbp->current_forum_id;
172
 
173
  // Currently viewing a forum
174
+ } elseif ( bbp_is_single_forum() && isset( $wp_query->post->ID ) ) {
175
  $bbp_forum_id = $wp_query->post->ID;
176
 
177
  // Currently viewing a topic
178
+ } elseif ( bbp_is_single_topic() ) {
179
  $bbp_forum_id = bbp_get_topic_forum_id();
180
 
181
  // Fallback
182
+ } else {
183
  $bbp_forum_id = 0;
184
+ }
185
 
186
  return (int) apply_filters( 'bbp_get_forum_id', (int) $bbp_forum_id, $forum_id );
187
  }
455
  * @return string Forum last update date/time (freshness)
456
  */
457
  function bbp_get_forum_last_active_time( $forum_id = 0 ) {
 
458
 
459
+ // Verify forum and get last active meta
460
+ $forum_id = bbp_get_forum_id( $forum_id );
461
  $last_active = get_post_meta( $forum_id, '_bbp_last_active_time', true );
462
+
463
  if ( empty( $last_active ) ) {
464
  $reply_id = bbp_get_forum_last_reply_id( $forum_id );
465
  if ( !empty( $reply_id ) ) {
472
  }
473
  }
474
 
475
+ $active_time = !empty( $last_active ) ? bbp_get_time_since( bbp_convert_date( $last_active ) ) : '';
476
 
477
+ return apply_filters( 'bbp_get_forum_last_active', $active_time, $forum_id );
478
  }
479
 
480
  /**
517
  function bbp_get_forum_freshness_link( $forum_id = 0 ) {
518
  $forum_id = bbp_get_forum_id( $forum_id );
519
  $active_id = bbp_get_forum_last_active_id( $forum_id );
520
+ $link_url = $title = '';
521
 
522
  if ( empty( $active_id ) )
523
  $active_id = bbp_get_forum_last_reply_id( $forum_id );
540
  else
541
  $anchor = __( 'No Topics', 'bbpress' );
542
 
543
+ return apply_filters( 'bbp_get_forum_freshness_link', $anchor, $forum_id, $time_since, $link_url, $title, $active_id );
544
  }
545
 
546
  /**
640
  }
641
  }
642
 
643
+ // Parse arguments against default values
644
+ $r = bbp_parse_args( $args, array(
645
+ 'post_parent' => 0,
646
+ 'post_type' => bbp_get_forum_post_type(),
647
+ 'post_status' => implode( ',', $post_stati ),
648
+ 'posts_per_page' => get_option( '_bbp_forums_per_page', 50 ),
649
+ 'orderby' => 'menu_order',
650
+ 'order' => 'ASC',
651
+ 'ignore_sticky_posts' => true,
652
+ 'no_found_rows' => true
653
+ ), 'forum_get_subforums' );
654
  $r['post_parent'] = bbp_get_forum_id( $r['post_parent'] );
655
 
656
+ // Create a new query for the subforums
657
+ $get_posts = new WP_Query();
658
+
659
  // No forum passed
660
+ $sub_forums = !empty( $r['post_parent'] ) ? $get_posts->query( $r ) : array();
661
 
662
+ return (array) apply_filters( 'bbp_forum_get_subforums', $sub_forums, $args );
663
  }
664
 
665
  /**
688
  $i = 0;
689
  $count = array();
690
 
691
+ // Parse arguments against default values
692
+ $r = bbp_parse_args( $args, array(
693
  'before' => '<ul class="bbp-forums-list">',
694
  'after' => '</ul>',
695
  'link_before' => '<li class="bbp-forum">',
701
  'forum_id' => '',
702
  'show_topic_count' => true,
703
  'show_reply_count' => true,
704
+ ), 'list_forums' );
 
 
 
 
 
 
705
 
706
  // Loop through forums and create a list
707
+ $sub_forums = bbp_forum_get_subforums( $r['forum_id'] );
708
  if ( !empty( $sub_forums ) ) {
709
 
710
  // Total count (for separator)
714
 
715
  // Get forum details
716
  $count = array();
717
+ $show_sep = $total_subs > $i ? $r['separator'] : '';
718
  $permalink = bbp_get_forum_permalink( $sub_forum->ID );
719
  $title = bbp_get_forum_title( $sub_forum->ID );
720
 
721
  // Show topic count
722
+ if ( !empty( $r['show_topic_count'] ) && !bbp_is_forum_category( $sub_forum->ID ) ) {
723
  $count['topic'] = bbp_get_forum_topic_count( $sub_forum->ID );
724
  }
725
 
726
  // Show reply count
727
+ if ( !empty( $r['show_reply_count'] ) && !bbp_is_forum_category( $sub_forum->ID ) ) {
728
  $count['reply'] = bbp_get_forum_reply_count( $sub_forum->ID );
729
  }
730
 
731
  // Counts to show
732
  if ( !empty( $count ) ) {
733
+ $counts = $r['count_before'] . implode( $r['count_sep'], $count ) . $r['count_after'];
734
  }
735
 
736
  // Build this sub forums link
737
+ $output .= $r['link_before'] . '<a href="' . $permalink . '" class="bbp-forum-link">' . $title . $counts . '</a>' . $show_sep . $r['link_after'];
738
  }
739
 
740
  // Output the list
741
+ echo apply_filters( 'bbp_list_forums', $r['before'] . $output . $r['after'], $r );
742
  }
743
  }
744
 
1827
  */
1828
  function bbp_get_single_forum_description( $args = '' ) {
1829
 
1830
+ // Parse arguments against default values
1831
+ $r = bbp_parse_args( $args, array(
1832
  'forum_id' => 0,
1833
  'before' => '<div class="bbp-template-notice info"><p class="bbp-forum-description">',
1834
  'after' => '</p></div>',
1835
  'size' => 14,
1836
  'feed' => true
1837
+ ), 'get_single_forum_description' );
 
 
1838
 
1839
  // Validate forum_id
1840
+ $forum_id = bbp_get_forum_id( $r['forum_id'] );
1841
 
1842
  // Unhook the 'view all' query var adder
1843
  remove_filter( 'bbp_get_forum_permalink', 'bbp_add_view_all' );
1858
  if ( !empty( $last_active ) ) {
1859
  $topic_text = bbp_get_forum_topics_link( $forum_id );
1860
  $time_since = bbp_get_forum_freshness_link( $forum_id );
1861
+ $last_updated_by = bbp_get_author_link( array( 'post_id' => $last_active, 'size' => $r['size'] ) );
1862
 
1863
  // Forum has no last active data
1864
  } else {
1913
  }
1914
 
1915
  // Add feeds
1916
+ //$feed_links = ( !empty( $r['feed'] ) ) ? bbp_get_forum_topics_feed_link ( $forum_id ) . bbp_get_forum_replies_feed_link( $forum_id ) : '';
1917
 
1918
  // Add the 'view all' filter back
1919
  add_filter( 'bbp_get_forum_permalink', 'bbp_add_view_all' );
1920
 
1921
  // Combine the elements together
1922
+ $retstr = $r['before'] . $retstr . $r['after'];
1923
 
1924
  // Return filtered result
1925
  return apply_filters( 'bbp_get_single_forum_description', $retstr, $args );
1949
  function bbp_get_form_forum_title() {
1950
 
1951
  // Get _POST data
1952
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_title'] ) ) {
1953
  $forum_title = $_POST['bbp_forum_title'];
1954
 
1955
  // Get edit data
1956
+ } elseif ( bbp_is_forum_edit() ) {
1957
  $forum_title = bbp_get_global_post_field( 'post_title', 'raw' );
1958
 
1959
  // No data
1960
+ } else {
1961
  $forum_title = '';
1962
+ }
1963
 
1964
  return apply_filters( 'bbp_get_form_forum_title', esc_attr( $forum_title ) );
1965
  }
1986
  function bbp_get_form_forum_content() {
1987
 
1988
  // Get _POST data
1989
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_content'] ) ) {
1990
  $forum_content = $_POST['bbp_forum_content'];
1991
 
1992
  // Get edit data
1993
+ } elseif ( bbp_is_forum_edit() ) {
1994
  $forum_content = bbp_get_global_post_field( 'post_content', 'raw' );
1995
 
1996
  // No data
1997
+ } else {
1998
  $forum_content = '';
1999
+ }
2000
 
2001
  return apply_filters( 'bbp_get_form_forum_content', esc_textarea( $forum_content ) );
2002
  }
2024
  function bbp_get_form_forum_parent() {
2025
 
2026
  // Get _POST data
2027
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_id'] ) ) {
2028
  $forum_parent = $_POST['bbp_forum_id'];
2029
 
2030
  // Get edit data
2031
+ } elseif ( bbp_is_forum_edit() ) {
2032
  $forum_parent = bbp_get_forum_parent_id();
2033
 
2034
  // No data
2035
+ } else {
2036
  $forum_parent = 0;
2037
+ }
2038
 
2039
  return apply_filters( 'bbp_get_form_forum_parent', esc_attr( $forum_parent ) );
2040
  }
2062
  function bbp_get_form_forum_type() {
2063
 
2064
  // Get _POST data
2065
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_type'] ) ) {
2066
  $forum_type = $_POST['bbp_forum_type'];
2067
 
2068
  // Get edit data
2069
+ } elseif ( bbp_is_forum_edit() ) {
2070
  $forum_type = bbp_get_forum_type();
2071
 
2072
  // No data
2073
+ } else {
2074
  $forum_type = 'forum';
2075
+ }
2076
 
2077
  return apply_filters( 'bbp_get_form_forum_type', esc_attr( $forum_type ) );
2078
  }
2100
  function bbp_get_form_forum_visibility() {
2101
 
2102
  // Get _POST data
2103
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_visibility'] ) ) {
2104
  $forum_visibility = $_POST['bbp_forum_visibility'];
2105
 
2106
  // Get edit data
2107
+ } elseif ( bbp_is_forum_edit() ) {
2108
  $forum_visibility = bbp_get_forum_visibility();
2109
 
2110
  // No data
2111
+ } else {
2112
  $forum_visibility = bbpress()->public_status_id;
2113
+ }
2114
 
2115
  return apply_filters( 'bbp_get_form_forum_visibility', esc_attr( $forum_visibility ) );
2116
  }
includes/replies/functions.php CHANGED
@@ -77,6 +77,7 @@ function bbp_insert_reply( $reply_data = array(), $reply_meta = array() ) {
77
  *
78
  * @since bbPress (r2574)
79
  *
 
80
  * @uses bbp_add_error() To add an error message
81
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
82
  * @uses bbp_is_anonymous() To check if an anonymous post is being made
@@ -102,14 +103,10 @@ function bbp_insert_reply( $reply_data = array(), $reply_meta = array() ) {
102
  * @uses bbPress::errors::get_error_message() To get the {@link WP_Error} error
103
  * message
104
  */
105
- function bbp_new_reply_handler() {
106
-
107
- // Bail if not a POST action
108
- if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
109
- return;
110
 
111
  // Bail if action is not bbp-new-reply
112
- if ( empty( $_POST['action'] ) || ( 'bbp-new-reply' !== $_POST['action'] ) )
113
  return;
114
 
115
  // Nonce check
@@ -294,22 +291,39 @@ function bbp_new_reply_handler() {
294
  // Trash the reply
295
  wp_trash_post( $reply_id );
296
 
297
- // Get pre_trashed_replies for topic
298
- $pre_trashed_replies = get_post_meta( $topic_id, '_bbp_pre_trashed_replies', true );
299
 
300
- // Add this reply to the end of the existing replies
301
- $pre_trashed_replies[] = $reply_id;
302
 
303
- // Update the pre_trashed_reply post meta
304
- update_post_meta( $topic_id, '_bbp_pre_trashed_replies', $pre_trashed_replies );
305
- }
 
 
 
306
 
307
  /** Spam Check ********************************************************/
308
 
309
  // If reply or topic are spam, officially spam this reply
310
- if ( bbp_is_topic_spam( $topic_id ) || ( $reply_data['post_status'] == bbp_get_spam_status_id() ) )
311
  add_post_meta( $reply_id, '_bbp_spam_meta_status', bbp_get_public_status_id() );
312
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
313
  /** Update counts, etc... *********************************************/
314
 
315
  do_action( 'bbp_new_reply', $reply_id, $topic_id, $forum_id, $anonymous_data, $reply_author );
@@ -321,7 +335,7 @@ function bbp_new_reply_handler() {
321
  /** Redirect **********************************************************/
322
 
323
  // Redirect to
324
- $redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
325
 
326
  // Get the reply URL
327
  $reply_url = bbp_get_reply_url( $reply_id, $redirect_to );
@@ -348,6 +362,7 @@ function bbp_new_reply_handler() {
348
  /**
349
  * Handles the front end edit reply submission
350
  *
 
351
  * @uses bbp_add_error() To add an error message
352
  * @uses bbp_get_reply() To get the reply
353
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
@@ -375,14 +390,10 @@ function bbp_new_reply_handler() {
375
  * @uses bbPress::errors::get_error_message() To get the {@link WP_Error} error
376
  * message
377
  */
378
- function bbp_edit_reply_handler() {
379
-
380
- // Bail if not a POST action
381
- if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
382
- return;
383
 
384
  // Bail if action is not bbp-edit-reply
385
- if ( empty( $_POST['action'] ) || ( 'bbp-edit-reply' !== $_POST['action'] ) )
386
  return;
387
 
388
  // Define local variable(s)
@@ -559,7 +570,7 @@ function bbp_edit_reply_handler() {
559
 
560
  // Toggle revisions back on
561
  if ( true === $revisions_removed ) {
562
- $revisions_removed = true;
563
  add_post_type_support( bbp_get_reply_post_type(), 'revisions' );
564
  }
565
 
@@ -584,7 +595,7 @@ function bbp_edit_reply_handler() {
584
 
585
  // Update revision log
586
  if ( !empty( $_POST['bbp_log_reply_edit'] ) && ( 1 == $_POST['bbp_log_reply_edit'] ) ) {
587
- $revision_id = wp_is_post_revision( $reply_id );
588
  if ( !empty( $revision_id ) ) {
589
  bbp_update_reply_revision_log( array(
590
  'reply_id' => $reply_id,
@@ -609,7 +620,7 @@ function bbp_edit_reply_handler() {
609
  /** Redirect **********************************************************/
610
 
611
  // Redirect to
612
- $redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
613
 
614
  // Get the reply URL
615
  $reply_url = bbp_get_reply_url( $reply_id, $redirect_to );
@@ -639,8 +650,7 @@ function bbp_edit_reply_handler() {
639
  * @param int $reply_id Optional. Reply id
640
  * @param int $topic_id Optional. Topic id
641
  * @param int $forum_id Optional. Forum id
642
- * @param bool|array $anonymous_data Optional. If it is an array, it is
643
- * extracted and anonymous user info is saved
644
  * @param int $author_id Author id
645
  * @param bool $is_edit Optional. Is the post being edited? Defaults to false.
646
  * @uses bbp_get_reply_id() To get the reply id
@@ -689,13 +699,12 @@ function bbp_update_reply( $reply_id = 0, $topic_id = 0, $forum_id = 0, $anonymo
689
  // Check bbp_filter_anonymous_post_data() for sanitization.
690
  if ( !empty( $anonymous_data ) && is_array( $anonymous_data ) ) {
691
 
692
- // Always set at least these three values to empty
693
- $defaults = array(
694
  'bbp_anonymous_name' => '',
695
  'bbp_anonymous_email' => '',
696
  'bbp_anonymous_website' => '',
697
- );
698
- $r = bbp_parse_args( $anonymous_data, $defaults, 'update_reply' );
699
 
700
  // Update all anonymous metas
701
  foreach( $r as $anon_key => $anon_value ) {
@@ -986,30 +995,321 @@ function bbp_update_reply_topic_id( $reply_id = 0, $topic_id = 0 ) {
986
  * @return mixed False on failure, true on success
987
  */
988
  function bbp_update_reply_revision_log( $args = '' ) {
989
- $defaults = array (
 
 
990
  'reason' => '',
991
  'reply_id' => 0,
992
  'author_id' => 0,
993
  'revision_id' => 0
994
- );
995
-
996
- $r = bbp_parse_args( $args, $defaults, 'update_reply_revision_log' );
997
- extract( $r );
998
 
999
  // Populate the variables
1000
- $reason = bbp_format_revision_reason( $reason );
1001
- $reply_id = bbp_get_reply_id( $reply_id );
1002
- $author_id = bbp_get_user_id ( $author_id, false, true );
1003
- $revision_id = (int) $revision_id;
1004
 
1005
  // Get the logs and append the new one to those
1006
- $revision_log = bbp_get_reply_raw_revision_log( $reply_id );
1007
- $revision_log[$revision_id] = array( 'author' => $author_id, 'reason' => $reason );
1008
 
1009
  // Finally, update
1010
- update_post_meta( $reply_id, '_bbp_revision_log', $revision_log );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1011
 
1012
- return apply_filters( 'bbp_update_reply_revision_log', $revision_log, $reply_id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1013
  }
1014
 
1015
  /** Reply Actions *************************************************************/
@@ -1020,6 +1320,7 @@ function bbp_update_reply_revision_log( $args = '' ) {
1020
  *
1021
  * @since bbPress (r2740)
1022
  *
 
1023
  * @uses bbp_get_reply() To get the reply
1024
  * @uses current_user_can() To check if the user is capable of editing or
1025
  * deleting the reply
@@ -1038,14 +1339,10 @@ function bbp_update_reply_revision_log( $args = '' ) {
1038
  * @uses wp_safe_redirect() To redirect to the reply
1039
  * @uses bbPress::errors:add() To log the error messages
1040
  */
1041
- function bbp_toggle_reply_handler() {
1042
-
1043
- // Bail if not a GET action
1044
- if ( 'GET' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
1045
- return;
1046
 
1047
  // Bail if required GET actions aren't passed
1048
- if ( empty( $_GET['reply_id'] ) || empty( $_GET['action'] ) )
1049
  return;
1050
 
1051
  // Setup possible get actions
@@ -1055,12 +1352,11 @@ function bbp_toggle_reply_handler() {
1055
  );
1056
 
1057
  // Bail if actions aren't meant for this function
1058
- if ( !in_array( $_GET['action'], $possible_actions ) )
1059
  return;
1060
 
1061
  $failure = ''; // Empty failure string
1062
  $view_all = false; // Assume not viewing all
1063
- $action = $_GET['action']; // What action is taking place?
1064
  $reply_id = (int) $_GET['reply_id']; // What's the reply id?
1065
  $success = false; // Flag
1066
  $post_data = array( 'ID' => $reply_id ); // Prelim array
@@ -1137,7 +1433,7 @@ function bbp_toggle_reply_handler() {
1137
  /** Redirect **********************************************************/
1138
 
1139
  // Redirect to
1140
- $redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
1141
 
1142
  // Get the reply URL
1143
  $reply_url = bbp_get_reply_url( $reply_id, $redirect_to );
@@ -1534,7 +1830,7 @@ function bbp_display_replies_feed_rss2( $replies_query = array() ) {
1534
  <description><?php //?></description>
1535
  <pubDate><?php echo mysql2date( 'D, d M Y H:i:s O', current_time( 'mysql' ), false ); ?></pubDate>
1536
  <generator>http://bbpress.org/?v=<?php bbp_version(); ?></generator>
1537
- <language><?php echo get_option( 'rss_language' ); ?></language>
1538
 
1539
  <?php do_action( 'bbp_feed_head' ); ?>
1540
 
77
  *
78
  * @since bbPress (r2574)
79
  *
80
+ * @param string $action The requested action to compare this function to
81
  * @uses bbp_add_error() To add an error message
82
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
83
  * @uses bbp_is_anonymous() To check if an anonymous post is being made
103
  * @uses bbPress::errors::get_error_message() To get the {@link WP_Error} error
104
  * message
105
  */
106
+ function bbp_new_reply_handler( $action = '' ) {
 
 
 
 
107
 
108
  // Bail if action is not bbp-new-reply
109
+ if ( 'bbp-new-reply' !== $action )
110
  return;
111
 
112
  // Nonce check
291
  // Trash the reply
292
  wp_trash_post( $reply_id );
293
 
294
+ // Only add to pre-trashed array if topic is trashed
295
+ if ( bbp_is_topic_trash( $topic_id ) ) {
296
 
297
+ // Get pre_trashed_replies for topic
298
+ $pre_trashed_replies = get_post_meta( $topic_id, '_bbp_pre_trashed_replies', true );
299
 
300
+ // Add this reply to the end of the existing replies
301
+ $pre_trashed_replies[] = $reply_id;
302
+
303
+ // Update the pre_trashed_reply post meta
304
+ update_post_meta( $topic_id, '_bbp_pre_trashed_replies', $pre_trashed_replies );
305
+ }
306
 
307
  /** Spam Check ********************************************************/
308
 
309
  // If reply or topic are spam, officially spam this reply
310
+ } elseif ( bbp_is_topic_spam( $topic_id ) || ( $reply_data['post_status'] == bbp_get_spam_status_id() ) ) {
311
  add_post_meta( $reply_id, '_bbp_spam_meta_status', bbp_get_public_status_id() );
312
 
313
+ // Only add to pre-spammed array if topic is spam
314
+ if ( bbp_is_topic_spam( $topic_id ) ) {
315
+
316
+ // Get pre_spammed_replies for topic
317
+ $pre_spammed_replies = get_post_meta( $topic_id, '_bbp_pre_spammed_replies', true );
318
+
319
+ // Add this reply to the end of the existing replies
320
+ $pre_spammed_replies[] = $reply_id;
321
+
322
+ // Update the pre_spammed_replies post meta
323
+ update_post_meta( $topic_id, '_bbp_pre_spammed_replies', $pre_spammed_replies );
324
+ }
325
+ }
326
+
327
  /** Update counts, etc... *********************************************/
328
 
329
  do_action( 'bbp_new_reply', $reply_id, $topic_id, $forum_id, $anonymous_data, $reply_author );
335
  /** Redirect **********************************************************/
336
 
337
  // Redirect to
338
+ $redirect_to = bbp_get_redirect_to();
339
 
340
  // Get the reply URL
341
  $reply_url = bbp_get_reply_url( $reply_id, $redirect_to );
362
  /**
363
  * Handles the front end edit reply submission
364
  *
365
+ * @param string $action The requested action to compare this function to
366
  * @uses bbp_add_error() To add an error message
367
  * @uses bbp_get_reply() To get the reply
368
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
390
  * @uses bbPress::errors::get_error_message() To get the {@link WP_Error} error
391
  * message
392
  */
393
+ function bbp_edit_reply_handler( $action = '' ) {
 
 
 
 
394
 
395
  // Bail if action is not bbp-edit-reply
396
+ if ( 'bbp-edit-reply' !== $action )
397
  return;
398
 
399
  // Define local variable(s)
570
 
571
  // Toggle revisions back on
572
  if ( true === $revisions_removed ) {
573
+ $revisions_removed = false;
574
  add_post_type_support( bbp_get_reply_post_type(), 'revisions' );
575
  }
576
 
595
 
596
  // Update revision log
597
  if ( !empty( $_POST['bbp_log_reply_edit'] ) && ( 1 == $_POST['bbp_log_reply_edit'] ) ) {
598
+ $revision_id = wp_save_post_revision( $reply_id );
599
  if ( !empty( $revision_id ) ) {
600
  bbp_update_reply_revision_log( array(
601
  'reply_id' => $reply_id,
620
  /** Redirect **********************************************************/
621
 
622
  // Redirect to
623
+ $redirect_to = bbp_get_redirect_to();
624
 
625
  // Get the reply URL
626
  $reply_url = bbp_get_reply_url( $reply_id, $redirect_to );
650
  * @param int $reply_id Optional. Reply id
651
  * @param int $topic_id Optional. Topic id
652
  * @param int $forum_id Optional. Forum id
653
+ * @param bool|array $anonymous_data Optional logged-out user data.
 
654
  * @param int $author_id Author id
655
  * @param bool $is_edit Optional. Is the post being edited? Defaults to false.
656
  * @uses bbp_get_reply_id() To get the reply id
699
  // Check bbp_filter_anonymous_post_data() for sanitization.
700
  if ( !empty( $anonymous_data ) && is_array( $anonymous_data ) ) {
701
 
702
+ // Parse arguments against default values
703
+ $r = bbp_parse_args( $anonymous_data, array(
704
  'bbp_anonymous_name' => '',
705
  'bbp_anonymous_email' => '',
706
  'bbp_anonymous_website' => '',
707
+ ), 'update_reply' );
 
708
 
709
  // Update all anonymous metas
710
  foreach( $r as $anon_key => $anon_value ) {
995
  * @return mixed False on failure, true on success
996
  */
997
  function bbp_update_reply_revision_log( $args = '' ) {
998
+
999
+ // Parse arguments against default values
1000
+ $r = bbp_parse_args( $args, array(
1001
  'reason' => '',
1002
  'reply_id' => 0,
1003
  'author_id' => 0,
1004
  'revision_id' => 0
1005
+ ), 'update_reply_revision_log' );
 
 
 
1006
 
1007
  // Populate the variables
1008
+ $r['reason'] = bbp_format_revision_reason( $r['reason'] );
1009
+ $r['reply_id'] = bbp_get_reply_id( $r['reply_id'] );
1010
+ $r['author_id'] = bbp_get_user_id ( $r['author_id'], false, true );
1011
+ $r['revision_id'] = (int) $r['revision_id'];
1012
 
1013
  // Get the logs and append the new one to those
1014
+ $revision_log = bbp_get_reply_raw_revision_log( $r['reply_id'] );
1015
+ $revision_log[ $r['revision_id'] ] = array( 'author' => $r['author_id'], 'reason' => $r['reason'] );
1016
 
1017
  // Finally, update
1018
+ update_post_meta( $r['reply_id'], '_bbp_revision_log', $revision_log );
1019
+
1020
+ return apply_filters( 'bbp_update_reply_revision_log', $revision_log, $r['reply_id'] );
1021
+ }
1022
+
1023
+ /**
1024
+ * Move reply handler
1025
+ *
1026
+ * Handles the front end move reply submission
1027
+ *
1028
+ * @since bbPress (r4521)
1029
+ *
1030
+ * @param string $action The requested action to compare this function to
1031
+ * @uses bbPress:errors::add() To log various error messages
1032
+ * @uses bbp_get_reply() To get the reply
1033
+ * @uses bbp_get_topic() To get the topics
1034
+ * @uses bbp_verify_nonce_request() To verify the nonce and check the request
1035
+ * @uses current_user_can() To check if the current user can edit the reply and topics
1036
+ * @uses bbp_get_topic_post_type() To get the topic post type
1037
+ * @uses is_wp_error() To check if the value retrieved is a {@link WP_Error}
1038
+ * @uses do_action() Calls 'bbp_pre_move_reply' with the from reply id, source
1039
+ * and destination topic ids
1040
+ * @uses bbp_get_reply_post_type() To get the reply post type
1041
+ * @uses wpdb::prepare() To prepare our sql query
1042
+ * @uses wpdb::get_results() To execute the sql query and get results
1043
+ * @uses wp_update_post() To update the replies
1044
+ * @uses bbp_update_reply_topic_id() To update the reply topic id
1045
+ * @uses bbp_get_topic_forum_id() To get the topic forum id
1046
+ * @uses bbp_update_reply_forum_id() To update the reply forum id
1047
+ * @uses do_action() Calls 'bbp_split_topic_reply' with the reply id and
1048
+ * destination topic id
1049
+ * @uses bbp_update_topic_last_reply_id() To update the topic last reply id
1050
+ * @uses bbp_update_topic_last_active_time() To update the topic last active meta
1051
+ * @uses do_action() Calls 'bbp_post_split_topic' with the destination and
1052
+ * source topic ids and source topic's forum id
1053
+ * @uses bbp_get_topic_permalink() To get the topic permalink
1054
+ * @uses wp_safe_redirect() To redirect to the topic link
1055
+ */
1056
+ function bbp_move_reply_handler( $action = '' ) {
1057
+
1058
+ // Bail if action is not 'bbp-move-reply'
1059
+ if ( 'bbp-move-reply' !== $action )
1060
+ return;
1061
+
1062
+ // Prevent debug notices
1063
+ $move_reply_id = $destination_topic_id = 0;
1064
+ $destination_topic_title = '';
1065
+ $destination_topic = $move_reply = $source_topic = '';
1066
+
1067
+ /** Move Reply ***********************************************************/
1068
+
1069
+ if ( empty( $_POST['bbp_reply_id'] ) ) {
1070
+ bbp_add_error( 'bbp_move_reply_reply_id', __( '<strong>ERROR</strong>: Reply ID to move not found!', 'bbpress' ) );
1071
+ } else {
1072
+ $move_reply_id = (int) $_POST['bbp_reply_id'];
1073
+ }
1074
+
1075
+ $move_reply = bbp_get_reply( $move_reply_id );
1076
+
1077
+ // Reply exists
1078
+ if ( empty( $move_reply ) )
1079
+ bbp_add_error( 'bbp_mover_reply_r_not_found', __( '<strong>ERROR</strong>: The reply you want to move was not found.', 'bbpress' ) );
1080
+
1081
+ /** Topic to Move From ***************************************************/
1082
+
1083
+ // Get the reply's current topic
1084
+ $source_topic = bbp_get_topic( $move_reply->post_parent );
1085
+
1086
+ // No topic
1087
+ if ( empty( $source_topic ) ) {
1088
+ bbp_add_error( 'bbp_move_reply_source_not_found', __( '<strong>ERROR</strong>: The topic you want to move from was not found.', 'bbpress' ) );
1089
+ }
1090
+
1091
+ // Nonce check failed
1092
+ if ( ! bbp_verify_nonce_request( 'bbp-move-reply_' . $move_reply->ID ) ) {
1093
+ bbp_add_error( 'bbp_move_reply_nonce', __( '<strong>ERROR</strong>: Are you sure you wanted to do that?', 'bbpress' ) );
1094
+ return;
1095
+ }
1096
+
1097
+ // Use cannot edit topic
1098
+ if ( !current_user_can( 'edit_topic', $source_topic->ID ) ) {
1099
+ bbp_add_error( 'bbp_move_reply_source_permission', __( '<strong>ERROR</strong>: You do not have the permissions to edit the source topic.', 'bbpress' ) );
1100
+ }
1101
+
1102
+ // How to move
1103
+ if ( !empty( $_POST['bbp_reply_move_option'] ) ) {
1104
+ $move_option = (string) trim( $_POST['bbp_reply_move_option'] );
1105
+ }
1106
+
1107
+ // Invalid move option
1108
+ if ( empty( $move_option ) || !in_array( $move_option, array( 'existing', 'topic' ) ) ) {
1109
+ bbp_add_error( 'bbp_move_reply_option', __( '<strong>ERROR</strong>: You need to choose a valid move option.', 'bbpress' ) );
1110
 
1111
+ // Valid move option
1112
+ } else {
1113
+
1114
+ // What kind of move
1115
+ switch ( $move_option ) {
1116
+
1117
+ // Into an existing topic
1118
+ case 'existing' :
1119
+
1120
+ // Get destination topic id
1121
+ if ( empty( $_POST['bbp_destination_topic'] ) ) {
1122
+ bbp_add_error( 'bbp_move_reply_destination_id', __( '<strong>ERROR</strong>: Destination topic ID not found!', 'bbpress' ) );
1123
+ } else {
1124
+ $destination_topic_id = (int) $_POST['bbp_destination_topic'];
1125
+ }
1126
+
1127
+ // Get the destination topic
1128
+ $destination_topic = bbp_get_topic( $destination_topic_id );
1129
+
1130
+ // No destination topic
1131
+ if ( empty( $destination_topic ) ) {
1132
+ bbp_add_error( 'bbp_move_reply_destination_not_found', __( '<strong>ERROR</strong>: The topic you want to move to was not found!', 'bbpress' ) );
1133
+ }
1134
+
1135
+ // User cannot edit the destination topic
1136
+ if ( !current_user_can( 'edit_topic', $destination_topic->ID ) ) {
1137
+ bbp_add_error( 'bbp_move_reply_destination_permission', __( '<strong>ERROR</strong>: You do not have the permissions to edit the destination topic!', 'bbpress' ) );
1138
+ }
1139
+
1140
+ // Reply position
1141
+ $reply_position = bbp_get_topic_reply_count( $destination_topic->ID ) + 1;
1142
+
1143
+ // New reply data
1144
+ $postarr = array(
1145
+ 'ID' => $move_reply->ID,
1146
+ 'post_title' => sprintf( __( 'Reply To: %s', 'bbpress' ), $destination_topic->post_title ),
1147
+ 'post_name' => false, // will be automatically generated
1148
+ 'post_parent' => $destination_topic->ID,
1149
+ 'post_position' => $reply_position,
1150
+ 'guid' => ''
1151
+ );
1152
+
1153
+ // Update the reply
1154
+ wp_update_post( $postarr );
1155
+
1156
+ // Adjust reply meta values
1157
+ bbp_update_reply_topic_id( $move_reply->ID, $destination_topic->ID );
1158
+ bbp_update_reply_forum_id( $move_reply->ID, bbp_get_topic_forum_id( $destination_topic->ID ) );
1159
+
1160
+ break;
1161
+
1162
+ // Move reply to a new topic
1163
+ case 'topic' :
1164
+ default :
1165
+
1166
+ // User needs to be able to publish topics
1167
+ if ( current_user_can( 'publish_topics' ) ) {
1168
+
1169
+ // Use the new title that was passed
1170
+ if ( !empty( $_POST['bbp_reply_move_destination_title'] ) ) {
1171
+ $destination_topic_title = esc_attr( strip_tags( $_POST['bbp_reply_move_destination_title'] ) );
1172
+
1173
+ // Use the source topic title
1174
+ } else {
1175
+ $destination_topic_title = $source_topic->post_title;
1176
+ }
1177
+
1178
+ // Setup the updated topic parameters
1179
+ $postarr = array(
1180
+ 'ID' => $move_reply->ID,
1181
+ 'post_title' => $destination_topic_title,
1182
+ 'post_name' => false,
1183
+ 'post_type' => bbp_get_topic_post_type(),
1184
+ 'post_parent' => $source_topic->post_parent,
1185
+ 'guid' => ''
1186
+ );
1187
+
1188
+ // Update the topic
1189
+ $destination_topic_id = wp_update_post( $postarr );
1190
+ $destination_topic = bbp_get_topic( $destination_topic_id );
1191
+
1192
+ // Make sure the new topic knows its a topic
1193
+ bbp_update_topic_topic_id( $move_reply->ID );
1194
+
1195
+ // Shouldn't happen
1196
+ if ( false == $destination_topic_id || is_wp_error( $destination_topic_id ) || empty( $destination_topic ) ) {
1197
+ bbp_add_error( 'bbp_move_reply_destination_reply', __( '<strong>ERROR</strong>: There was a problem converting the reply into the topic. Please try again.', 'bbpress' ) );
1198
+ }
1199
+
1200
+ // User cannot publish posts
1201
+ } else {
1202
+ bbp_add_error( 'bbp_move_reply_destination_permission', __( '<strong>ERROR</strong>: You do not have the permissions to create new topics. The reply could not be converted into a topic.', 'bbpress' ) );
1203
+ }
1204
+
1205
+ break;
1206
+ }
1207
+ }
1208
+
1209
+ // Bail if there are errors
1210
+ if ( bbp_has_errors() ) {
1211
+ return;
1212
+ }
1213
+
1214
+ /** No Errors - Clean Up **************************************************/
1215
+
1216
+ // Update counts, etc...
1217
+ do_action( 'bbp_pre_move_reply', $move_reply->ID, $source_topic->ID, $destination_topic->ID );
1218
+
1219
+ /** Date Check ************************************************************/
1220
+
1221
+ // Check if the destination topic is older than the move reply
1222
+ if ( strtotime( $move_reply->post_date ) < strtotime( $destination_topic->post_date ) ) {
1223
+
1224
+ // Set destination topic post_date to 1 second before from reply
1225
+ $destination_post_date = date( 'Y-m-d H:i:s', strtotime( $move_reply->post_date ) - 1 );
1226
+
1227
+ $postarr = array(
1228
+ 'ID' => $destination_topic_id,
1229
+ 'post_date' => $destination_post_date,
1230
+ 'post_date_gmt' => get_gmt_from_date( $destination_post_date )
1231
+ );
1232
+
1233
+ // Update destination topic
1234
+ wp_update_post( $postarr );
1235
+ }
1236
+
1237
+ // Set the last reply ID and freshness to the move_reply
1238
+ $last_reply_id = $move_reply->ID;
1239
+ $freshness = $move_reply->post_date;
1240
+
1241
+ // It is a new topic and we need to set some default metas to make
1242
+ // the topic display in bbp_has_topics() list
1243
+ if ( 'topic' == $move_option ) {
1244
+ bbp_update_topic_last_reply_id ( $destination_topic->ID, $last_reply_id );
1245
+ bbp_update_topic_last_active_id ( $destination_topic->ID, $last_reply_id );
1246
+ bbp_update_topic_last_active_time( $destination_topic->ID, $freshness );
1247
+
1248
+ // Otherwise update the existing destination topic
1249
+ } else {
1250
+ bbp_update_topic_last_reply_id ( $destination_topic->ID );
1251
+ bbp_update_topic_last_active_id ( $destination_topic->ID );
1252
+ bbp_update_topic_last_active_time( $destination_topic->ID );
1253
+ }
1254
+
1255
+ // Update source topic ID last active
1256
+ bbp_update_topic_last_reply_id ( $source_topic->ID );
1257
+ bbp_update_topic_last_active_id ( $source_topic->ID );
1258
+ bbp_update_topic_last_active_time( $source_topic->ID );
1259
+
1260
+ /** Successful Move ******************************************************/
1261
+
1262
+ // Update counts, etc...
1263
+ do_action( 'bbp_post_move_reply', $move_reply->ID, $source_topic->ID, $destination_topic->ID );
1264
+
1265
+ // Redirect back to the topic
1266
+ wp_safe_redirect( bbp_get_topic_permalink( $destination_topic->ID ) );
1267
+
1268
+ // For good measure
1269
+ exit();
1270
+ }
1271
+
1272
+ /**
1273
+ * Fix counts on reply move
1274
+ *
1275
+ * When a reply is moved, update the counts of source and destination topic
1276
+ * and their forums.
1277
+ *
1278
+ * @since bbPress (r4521)
1279
+ *
1280
+ * @param int $move_reply_id Move reply id
1281
+ * @param int $source_topic_id Source topic id
1282
+ * @param int $destination_topic_id Destination topic id
1283
+ * @uses bbp_update_forum_topic_count() To update the forum topic counts
1284
+ * @uses bbp_update_forum_reply_count() To update the forum reply counts
1285
+ * @uses bbp_update_topic_reply_count() To update the topic reply counts
1286
+ * @uses bbp_update_topic_voice_count() To update the topic voice counts
1287
+ * @uses bbp_update_topic_reply_count_hidden() To update the topic hidden reply
1288
+ * count
1289
+ * @uses do_action() Calls 'bbp_move_reply_count' with the move reply id,
1290
+ * source topic id & destination topic id
1291
+ */
1292
+ function bbp_move_reply_count( $move_reply_id, $source_topic_id, $destination_topic_id ) {
1293
+
1294
+ // Forum topic counts
1295
+ bbp_update_forum_topic_count( bbp_get_topic_forum_id( $destination_topic_id ) );
1296
+
1297
+ // Forum reply counts
1298
+ bbp_update_forum_reply_count( bbp_get_topic_forum_id( $destination_topic_id ) );
1299
+
1300
+ // Topic reply counts
1301
+ bbp_update_topic_reply_count( $source_topic_id );
1302
+ bbp_update_topic_reply_count( $destination_topic_id );
1303
+
1304
+ // Topic hidden reply counts
1305
+ bbp_update_topic_reply_count_hidden( $source_topic_id );
1306
+ bbp_update_topic_reply_count_hidden( $destination_topic_id );
1307
+
1308
+ // Topic voice counts
1309
+ bbp_update_topic_voice_count( $source_topic_id );
1310
+ bbp_update_topic_voice_count( $destination_topic_id );
1311
+
1312
+ do_action( 'bbp_move_reply_count', $move_reply_id, $source_topic_id, $destination_topic_id );
1313
  }
1314
 
1315
  /** Reply Actions *************************************************************/
1320
  *
1321
  * @since bbPress (r2740)
1322
  *
1323
+ * @param string $action The requested action to compare this function to
1324
  * @uses bbp_get_reply() To get the reply
1325
  * @uses current_user_can() To check if the user is capable of editing or
1326
  * deleting the reply
1339
  * @uses wp_safe_redirect() To redirect to the reply
1340
  * @uses bbPress::errors:add() To log the error messages
1341
  */
1342
+ function bbp_toggle_reply_handler( $action = '' ) {
 
 
 
 
1343
 
1344
  // Bail if required GET actions aren't passed
1345
+ if ( empty( $_GET['reply_id'] ) )
1346
  return;
1347
 
1348
  // Setup possible get actions
1352
  );
1353
 
1354
  // Bail if actions aren't meant for this function
1355
+ if ( !in_array( $action, $possible_actions ) )
1356
  return;
1357
 
1358
  $failure = ''; // Empty failure string
1359
  $view_all = false; // Assume not viewing all
 
1360
  $reply_id = (int) $_GET['reply_id']; // What's the reply id?
1361
  $success = false; // Flag
1362
  $post_data = array( 'ID' => $reply_id ); // Prelim array
1433
  /** Redirect **********************************************************/
1434
 
1435
  // Redirect to
1436
+ $redirect_to = bbp_get_redirect_to();
1437
 
1438
  // Get the reply URL
1439
  $reply_url = bbp_get_reply_url( $reply_id, $redirect_to );
1830
  <description><?php //?></description>
1831
  <pubDate><?php echo mysql2date( 'D, d M Y H:i:s O', current_time( 'mysql' ), false ); ?></pubDate>
1832
  <generator>http://bbpress.org/?v=<?php bbp_version(); ?></generator>
1833
+ <language><?php bloginfo_rss( 'language' ); ?></language>
1834
 
1835
  <?php do_action( 'bbp_feed_head' ); ?>
1836
 
includes/replies/template-tags.php CHANGED
@@ -66,23 +66,17 @@ function bbp_reply_post_type() {
66
  function bbp_has_replies( $args = '' ) {
67
  global $wp_rewrite;
68
 
69
- // What are the default allowed statuses (based on user caps)
70
- if ( bbp_get_view_all( 'edit_others_replies' ) ) {
71
- $post_statuses = array( bbp_get_public_status_id(), bbp_get_closed_status_id(), bbp_get_spam_status_id(), bbp_get_trash_status_id() );
72
- } else {
73
- $post_statuses = array( bbp_get_public_status_id(), bbp_get_closed_status_id() );
74
- }
75
 
 
76
  $default_reply_search = !empty( $_REQUEST['rs'] ) ? $_REQUEST['rs'] : false;
77
  $default_post_parent = ( bbp_is_single_topic() ) ? bbp_get_topic_id() : 'any';
78
  $default_post_type = ( bbp_is_single_topic() && bbp_show_lead_topic() ) ? bbp_get_reply_post_type() : array( bbp_get_topic_post_type(), bbp_get_reply_post_type() );
79
- $default_post_status = join( ',', $post_statuses );
80
 
81
  // Default query args
82
  $default = array(
83
  'post_type' => $default_post_type, // Only replies
84
  'post_parent' => $default_post_parent, // Of this topic
85
- 'post_status' => $default_post_status, // Of this status
86
  'posts_per_page' => bbp_get_replies_per_page(), // This many
87
  'paged' => bbp_get_paged(), // On this page
88
  'orderby' => 'date', // Sorted by date
@@ -90,21 +84,44 @@ function bbp_has_replies( $args = '' ) {
90
  's' => $default_reply_search, // Maybe search
91
  );
92
 
93
- // Set up topic variables
94
- $bbp_r = bbp_parse_args( $args, $default, 'has_replies' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
 
96
- // Extract the query variables
97
- extract( $bbp_r );
 
 
98
 
99
  // Get bbPress
100
  $bbp = bbpress();
101
 
102
  // Call the query
103
- $bbp->reply_query = new WP_Query( $bbp_r );
104
 
105
  // Add pagination values to query object
106
- $bbp->reply_query->posts_per_page = $posts_per_page;
107
- $bbp->reply_query->paged = $paged;
108
 
109
  // Never home, regardless of what parse_query says
110
  $bbp->reply_query->is_home = false;
@@ -145,10 +162,10 @@ function bbp_has_replies( $args = '' ) {
145
  apply_filters( 'bbp_replies_pagination', array(
146
  'base' => $base,
147
  'format' => '',
148
- 'total' => ceil( (int) $bbp->reply_query->found_posts / (int) $posts_per_page ),
149
  'current' => (int) $bbp->reply_query->paged,
150
- 'prev_text' => '&larr;',
151
- 'next_text' => '&rarr;',
152
  'mid_size' => 1,
153
  'add_args' => ( bbp_get_view_all() ) ? array( 'view' => 'all' ) : false
154
  ) )
@@ -217,7 +234,8 @@ function bbp_reply_id( $reply_id = 0 ) {
217
  *
218
  * @param $reply_id Optional. Used to check emptiness
219
  * @uses bbPress::reply_query::post::ID To get the reply id
220
- * @uses bbp_is_reply() To check if it's a reply page
 
221
  * @uses bbp_is_reply_edit() To check if it's a reply edit page
222
  * @uses get_post_field() To get the post's post type
223
  * @uses WP_Query::post::ID To get the reply id
@@ -239,6 +257,10 @@ function bbp_reply_id( $reply_id = 0 ) {
239
  } elseif ( !empty( $bbp->reply_query->in_the_loop ) && isset( $bbp->reply_query->post->ID ) ) {
240
  $bbp_reply_id = $bbp->reply_query->post->ID;
241
 
 
 
 
 
242
  // Currently viewing a forum
243
  } elseif ( ( bbp_is_single_reply() || bbp_is_reply_edit() ) && !empty( $bbp->current_reply_id ) ) {
244
  $bbp_reply_id = $bbp->current_reply_id;
@@ -525,7 +547,7 @@ function bbp_reply_post_date( $reply_id = 0, $humanize = false, $gmt = false ) {
525
  * @param bool $gmt Optional. Use GMT
526
  * @uses bbp_get_reply_id() To get the reply id
527
  * @uses get_post_time() to get the reply post time
528
- * @uses bbp_time_since() to maybe humanize the reply post time
529
  * @return string
530
  */
531
  function bbp_get_reply_post_date( $reply_id = 0, $humanize = false, $gmt = false ) {
@@ -533,10 +555,10 @@ function bbp_reply_post_date( $reply_id = 0, $humanize = false, $gmt = false ) {
533
 
534
  // 4 days, 4 hours ago
535
  if ( !empty( $humanize ) ) {
536
- $gmt = !empty( $gmt ) ? 'G' : 'U';
537
- $date = get_post_time( $gmt, $reply_id );
538
  $time = false; // For filter below
539
- $result = bbp_time_since( $date );
540
 
541
  // August 4, 2012 at 2:37 pm
542
  } else {
@@ -838,10 +860,11 @@ function bbp_reply_author( $reply_id = 0 ) {
838
  function bbp_get_reply_author( $reply_id = 0 ) {
839
  $reply_id = bbp_get_reply_id( $reply_id );
840
 
841
- if ( !bbp_is_reply_anonymous( $reply_id ) )
842
  $author = get_the_author_meta( 'display_name', bbp_get_reply_author_id( $reply_id ) );
843
- else
844
  $author = get_post_meta( $reply_id, '_bbp_anonymous_name', true );
 
845
 
846
  return apply_filters( 'bbp_get_reply_author', $author, $reply_id );
847
  }
@@ -929,7 +952,11 @@ function bbp_reply_author_display_name( $reply_id = 0 ) {
929
  if ( empty( $author_name ) )
930
  $author_name = __( 'Anonymous', 'bbpress' );
931
 
932
- return apply_filters( 'bbp_get_reply_author_display_name', esc_attr( $author_name ), $reply_id );
 
 
 
 
933
  }
934
 
935
  /**
@@ -1009,58 +1036,72 @@ function bbp_reply_author_link( $args = '' ) {
1009
  * @return string Author link of reply
1010
  */
1011
  function bbp_get_reply_author_link( $args = '' ) {
1012
- $defaults = array (
 
 
1013
  'post_id' => 0,
1014
  'link_title' => '',
1015
  'type' => 'both',
1016
  'size' => 80,
1017
  'sep' => '&nbsp;',
1018
  'show_role' => false
1019
- );
1020
- $r = bbp_parse_args( $args, $defaults, 'get_reply_author_link' );
1021
- extract( $r );
1022
 
1023
  // Used as reply_id
1024
- if ( is_numeric( $args ) )
1025
  $reply_id = bbp_get_reply_id( $args );
1026
- else
1027
- $reply_id = bbp_get_reply_id( $post_id );
 
1028
 
 
1029
  if ( !empty( $reply_id ) ) {
1030
- if ( empty( $link_title ) ) {
 
 
1031
  $link_title = sprintf( !bbp_is_reply_anonymous( $reply_id ) ? __( 'View %s\'s profile', 'bbpress' ) : __( 'Visit %s\'s website', 'bbpress' ), bbp_get_reply_author_display_name( $reply_id ) );
 
 
 
 
1032
  }
1033
 
1034
- $link_title = !empty( $link_title ) ? ' title="' . $link_title . '"' : '';
1035
- $author_url = bbp_get_reply_author_url( $reply_id );
1036
- $anonymous = bbp_is_reply_anonymous( $reply_id );
 
1037
 
1038
  // Get avatar
1039
- if ( 'avatar' == $type || 'both' == $type ) {
1040
- $author_links['avatar'] = bbp_get_reply_author_avatar( $reply_id, $size );
1041
  }
1042
 
1043
  // Get display name
1044
- if ( 'name' == $type || 'both' == $type ) {
1045
  $author_links['name'] = bbp_get_reply_author_display_name( $reply_id );
1046
  }
1047
 
 
 
 
1048
  // Add links if not anonymous
1049
  if ( empty( $anonymous ) && bbp_user_has_profile( bbp_get_reply_author_id( $reply_id ) ) ) {
 
 
1050
  foreach ( $author_links as $link => $link_text ) {
1051
  $link_class = ' class="bbp-author-' . $link . '"';
1052
  $author_link[] = sprintf( '<a href="%1$s"%2$s%3$s>%4$s</a>', $author_url, $link_title, $link_class, $link_text );
1053
  }
1054
 
1055
- if ( true === $show_role ) {
1056
  $author_link[] = bbp_get_reply_author_role( array( 'reply_id' => $reply_id ) );
1057
  }
1058
 
1059
- $author_link = join( $sep, $author_link );
1060
 
1061
  // No links if anonymous
1062
  } else {
1063
- $author_link = join( $sep, $author_links );
1064
  }
1065
 
1066
  // No replies so link is empty
@@ -1068,7 +1109,7 @@ function bbp_reply_author_link( $args = '' ) {
1068
  $author_link = '';
1069
  }
1070
 
1071
- return apply_filters( 'bbp_get_reply_author_link', $author_link, $args );
1072
  }
1073
 
1074
  /**
@@ -1192,18 +1233,18 @@ function bbp_reply_author_role( $args = array() ) {
1192
  * @return string Reply author role
1193
  */
1194
  function bbp_get_reply_author_role( $args = array() ) {
1195
- $defaults = array(
 
 
1196
  'reply_id' => 0,
1197
  'class' => 'bbp-author-role',
1198
  'before' => '',
1199
  'after' => ''
1200
- );
1201
- $args = bbp_parse_args( $args, $defaults, 'get_reply_author_role' );
1202
- extract( $args, EXTR_SKIP );
1203
 
1204
- $reply_id = bbp_get_reply_id( $reply_id );
1205
  $role = bbp_get_user_display_role( bbp_get_reply_author_id( $reply_id ) );
1206
- $author_role = sprintf( '%1$s<div class="%2$s">%3$s</div>%4$s', $before, $class, $role, $after );
1207
 
1208
  return apply_filters( 'bbp_get_reply_author_role', $author_role, $args );
1209
  }
@@ -1408,13 +1449,14 @@ function bbp_reply_admin_links( $args = '' ) {
1408
  * - after: HTML after the links. Defaults to '</span>'
1409
  * - sep: Separator. Defaults to ' | '
1410
  * - links: Array of the links to display. By default, edit, trash,
1411
- * spam and topic split links are displayed
1412
  * @uses bbp_is_topic() To check if it's the topic page
1413
  * @uses bbp_is_reply() To check if it's the reply page
1414
  * @uses bbp_get_reply_id() To get the reply id
1415
  * @uses bbp_get_reply_edit_link() To get the reply edit link
1416
  * @uses bbp_get_reply_trash_link() To get the reply trash link
1417
  * @uses bbp_get_reply_spam_link() To get the reply spam link
 
1418
  * @uses bbp_get_topic_split_link() To get the topic split link
1419
  * @uses current_user_can() To check if the current user can edit or
1420
  * delete the reply
@@ -1424,14 +1466,14 @@ function bbp_reply_admin_links( $args = '' ) {
1424
  */
1425
  function bbp_get_reply_admin_links( $args = '' ) {
1426
 
1427
- $defaults = array (
 
1428
  'id' => 0,
1429
  'before' => '<span class="bbp-admin-links">',
1430
  'after' => '</span>',
1431
  'sep' => ' | ',
1432
  'links' => array()
1433
- );
1434
- $r = bbp_parse_args( $args, $defaults, 'get_reply_admin_links' );
1435
 
1436
  $r['id'] = bbp_get_reply_id( (int) $r['id'] );
1437
 
@@ -1453,12 +1495,13 @@ function bbp_reply_admin_links( $args = '' ) {
1453
 
1454
  // If no links were passed, default to the standard
1455
  if ( empty( $r['links'] ) ) {
1456
- $r['links'] = array (
1457
  'edit' => bbp_get_reply_edit_link ( $r ),
 
1458
  'split' => bbp_get_topic_split_link( $r ),
1459
  'trash' => bbp_get_reply_trash_link( $r ),
1460
  'spam' => bbp_get_reply_spam_link ( $r ),
1461
- );
1462
  }
1463
 
1464
  // Check caps for trashing the topic
@@ -1470,7 +1513,7 @@ function bbp_reply_admin_links( $args = '' ) {
1470
  if ( in_array( $reply_status, array( bbp_get_spam_status_id(), bbp_get_trash_status_id() ) ) ) {
1471
 
1472
  // Spam link shouldn't be visible on trashed topics
1473
- if ( $reply_status == bbp_get_trash_status_id() ) {
1474
  unset( $r['links']['spam'] );
1475
 
1476
  // Trash link shouldn't be visible on spam topics
@@ -1483,7 +1526,7 @@ function bbp_reply_admin_links( $args = '' ) {
1483
  $links = implode( $r['sep'], array_filter( $r['links'] ) );
1484
  $retval = $r['before'] . $links . $r['after'];
1485
 
1486
- return apply_filters( 'bbp_get_reply_admin_links', $retval, $args );
1487
  }
1488
 
1489
  /**
@@ -1518,35 +1561,36 @@ function bbp_reply_edit_link( $args = '' ) {
1518
  * @return string Reply edit link
1519
  */
1520
  function bbp_get_reply_edit_link( $args = '' ) {
1521
- $defaults = array (
 
 
1522
  'id' => 0,
1523
  'link_before' => '',
1524
  'link_after' => '',
1525
  'edit_text' => __( 'Edit', 'bbpress' )
1526
- );
1527
- $r = bbp_parse_args( $args, $defaults, 'get_reply_edit_link' );
1528
- extract( $r );
1529
 
1530
- $reply = bbp_get_reply( bbp_get_reply_id( (int) $id ) );
1531
 
1532
  // Bypass check if user has caps
1533
  if ( !current_user_can( 'edit_others_replies' ) ) {
1534
 
1535
  // User cannot edit or it is past the lock time
1536
- if ( empty( $reply ) || !current_user_can( 'edit_reply', $reply->ID ) || bbp_past_edit_lock( $reply->post_date_gmt ) )
1537
  return;
 
1538
  }
1539
 
1540
  // Get uri
1541
- $uri = bbp_get_reply_edit_url( $id );
1542
 
1543
  // Bail if no uri
1544
  if ( empty( $uri ) )
1545
  return;
1546
 
1547
- $retval = $link_before . '<a href="' . $uri . '">' . $edit_text . '</a>' . $link_after;
1548
 
1549
- return apply_filters( 'bbp_get_reply_edit_link', $retval, $args );
1550
  }
1551
 
1552
  /**
@@ -1640,7 +1684,9 @@ function bbp_reply_trash_link( $args = '' ) {
1640
  * @return string Reply trash link
1641
  */
1642
  function bbp_get_reply_trash_link( $args = '' ) {
1643
- $defaults = array (
 
 
1644
  'id' => 0,
1645
  'link_before' => '',
1646
  'link_after' => '',
@@ -1648,31 +1694,29 @@ function bbp_reply_trash_link( $args = '' ) {
1648
  'trash_text' => __( 'Trash', 'bbpress' ),
1649
  'restore_text' => __( 'Restore', 'bbpress' ),
1650
  'delete_text' => __( 'Delete', 'bbpress' )
1651
- );
1652
- $r = bbp_parse_args( $args, $defaults, 'get_reply_trash_link' );
1653
- extract( $r );
1654
 
1655
  $actions = array();
1656
- $reply = bbp_get_reply( bbp_get_reply_id( (int) $id ) );
1657
 
1658
  if ( empty( $reply ) || !current_user_can( 'delete_reply', $reply->ID ) ) {
1659
  return;
1660
  }
1661
 
1662
  if ( bbp_is_reply_trash( $reply->ID ) ) {
1663
- $actions['untrash'] = '<a title="' . esc_attr__( 'Restore this item from the Trash', 'bbpress' ) . '" href="' . esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'bbp_toggle_reply_trash', 'sub_action' => 'untrash', 'reply_id' => $reply->ID ) ), 'untrash-' . $reply->post_type . '_' . $reply->ID ) ) . '">' . esc_html( $restore_text ) . '</a>';
1664
  } elseif ( EMPTY_TRASH_DAYS ) {
1665
- $actions['trash'] = '<a title="' . esc_attr__( 'Move this item to the Trash', 'bbpress' ) . '" href="' . esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'bbp_toggle_reply_trash', 'sub_action' => 'trash', 'reply_id' => $reply->ID ) ), 'trash-' . $reply->post_type . '_' . $reply->ID ) ) . '">' . esc_html( $trash_text ) . '</a>';
1666
  }
1667
 
1668
  if ( bbp_is_reply_trash( $reply->ID ) || !EMPTY_TRASH_DAYS ) {
1669
- $actions['delete'] = '<a title="' . esc_attr__( 'Delete this item permanently', 'bbpress' ) . '" href="' . esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'bbp_toggle_reply_trash', 'sub_action' => 'delete', 'reply_id' => $reply->ID ) ), 'delete-' . $reply->post_type . '_' . $reply->ID ) ) . '" onclick="return confirm(\'' . esc_js( __( 'Are you sure you want to delete that permanently?', 'bbpress' ) ) . '\' );">' . esc_html( $delete_text ) . '</a>';
1670
  }
1671
 
1672
  // Process the admin links
1673
- $retval = $link_before . implode( $sep, $actions ) . $link_after;
1674
 
1675
- return apply_filters( 'bbp_get_reply_trash_link', $retval, $args );
1676
  }
1677
 
1678
  /**
@@ -1712,33 +1756,100 @@ function bbp_reply_spam_link( $args = '' ) {
1712
  * @return string Reply spam link
1713
  */
1714
  function bbp_get_reply_spam_link( $args = '' ) {
1715
- $defaults = array (
 
 
1716
  'id' => 0,
1717
  'link_before' => '',
1718
  'link_after' => '',
1719
  'spam_text' => __( 'Spam', 'bbpress' ),
1720
  'unspam_text' => __( 'Unspam', 'bbpress' )
1721
- );
1722
- $r = bbp_parse_args( $args, $defaults, 'get_reply_spam_link' );
1723
- extract( $r );
1724
 
1725
- $reply = bbp_get_reply( bbp_get_reply_id( (int) $id ) );
1726
 
1727
  if ( empty( $reply ) || !current_user_can( 'moderate', $reply->ID ) )
1728
  return;
1729
 
1730
- $display = bbp_is_reply_spam( $reply->ID ) ? $unspam_text : $spam_text;
1731
  $uri = add_query_arg( array( 'action' => 'bbp_toggle_reply_spam', 'reply_id' => $reply->ID ) );
1732
  $uri = esc_url( wp_nonce_url( $uri, 'spam-reply_' . $reply->ID ) );
1733
- $retval = $link_before . '<a href="' . $uri . '">' . $display . '</a>' . $link_after;
1734
 
1735
- return apply_filters( 'bbp_get_reply_spam_link', $retval, $args );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1736
  }
1737
 
1738
  /**
1739
  * Split topic link
1740
  *
1741
- * Output the split link of the topic (but is bundled with each topic)
1742
  *
1743
  * @since bbPress (r2756)
1744
  *
@@ -1773,20 +1884,20 @@ function bbp_topic_split_link( $args = '' ) {
1773
  * @uses esc_url() To escape the url
1774
  * @uses apply_filters() Calls 'bbp_get_topic_split_link' with the topic
1775
  * split link and args
1776
- * @return string Reply spam link
1777
  */
1778
  function bbp_get_topic_split_link( $args = '' ) {
1779
- $defaults = array (
 
 
1780
  'id' => 0,
1781
  'link_before' => '',
1782
  'link_after' => '',
1783
  'split_text' => __( 'Split', 'bbpress' ),
1784
  'split_title' => __( 'Split the topic from this reply', 'bbpress' )
1785
- );
1786
- $r = bbp_parse_args( $args, $defaults, 'get_topic_split_link' );
1787
- extract( $r );
1788
 
1789
- $reply_id = bbp_get_reply_id( $id );
1790
  $topic_id = bbp_get_reply_topic_id( $reply_id );
1791
 
1792
  if ( empty( $reply_id ) || !current_user_can( 'moderate', $topic_id ) )
@@ -1801,9 +1912,9 @@ function bbp_topic_split_link( $args = '' ) {
1801
  bbp_get_topic_edit_url( $topic_id )
1802
  ) );
1803
 
1804
- $retval = $link_before . '<a href="' . $uri . '" title="' . esc_attr( $split_title ) . '">' . $split_text . '</a>' . $link_after;
1805
 
1806
- return apply_filters( 'bbp_get_topic_split_link', $retval, $args );
1807
  }
1808
 
1809
  /**
@@ -1964,16 +2075,17 @@ function bbp_form_reply_content() {
1964
  function bbp_get_form_reply_content() {
1965
 
1966
  // Get _POST data
1967
- if ( 'POST' == strtoupper( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_reply_content'] ) )
1968
  $reply_content = $_POST['bbp_reply_content'];
1969
 
1970
  // Get edit data
1971
- elseif ( bbp_is_reply_edit() )
1972
  $reply_content = bbp_get_global_post_field( 'post_content', 'raw' );
1973
 
1974
  // No data
1975
- else
1976
  $reply_content = '';
 
1977
 
1978
  return apply_filters( 'bbp_get_form_reply_content', esc_textarea( $reply_content ) );
1979
  }
@@ -2000,12 +2112,13 @@ function bbp_form_reply_log_edit() {
2000
  function bbp_get_form_reply_log_edit() {
2001
 
2002
  // Get _POST data
2003
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_log_reply_edit'] ) )
2004
  $reply_revision = $_POST['bbp_log_reply_edit'];
2005
 
2006
  // No data
2007
- else
2008
  $reply_revision = 1;
 
2009
 
2010
  return apply_filters( 'bbp_get_form_reply_log_edit', checked( $reply_revision, true, false ) );
2011
  }
@@ -2032,12 +2145,13 @@ function bbp_form_reply_edit_reason() {
2032
  function bbp_get_form_reply_edit_reason() {
2033
 
2034
  // Get _POST data
2035
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_reply_edit_reason'] ) )
2036
  $reply_edit_reason = $_POST['bbp_reply_edit_reason'];
2037
 
2038
  // No data
2039
- else
2040
  $reply_edit_reason = '';
 
2041
 
2042
  return apply_filters( 'bbp_get_form_reply_edit_reason', esc_attr( $reply_edit_reason ) );
2043
  }
66
  function bbp_has_replies( $args = '' ) {
67
  global $wp_rewrite;
68
 
69
+ /** Defaults **************************************************************/
 
 
 
 
 
70
 
71
+ // Other defaults
72
  $default_reply_search = !empty( $_REQUEST['rs'] ) ? $_REQUEST['rs'] : false;
73
  $default_post_parent = ( bbp_is_single_topic() ) ? bbp_get_topic_id() : 'any';
74
  $default_post_type = ( bbp_is_single_topic() && bbp_show_lead_topic() ) ? bbp_get_reply_post_type() : array( bbp_get_topic_post_type(), bbp_get_reply_post_type() );
 
75
 
76
  // Default query args
77
  $default = array(
78
  'post_type' => $default_post_type, // Only replies
79
  'post_parent' => $default_post_parent, // Of this topic
 
80
  'posts_per_page' => bbp_get_replies_per_page(), // This many
81
  'paged' => bbp_get_paged(), // On this page
82
  'orderby' => 'date', // Sorted by date
84
  's' => $default_reply_search, // Maybe search
85
  );
86
 
87
+ // What are the default allowed statuses (based on user caps)
88
+ if ( bbp_get_view_all() ) {
89
+
90
+ // Default view=all statuses
91
+ $post_statuses = array(
92
+ bbp_get_public_status_id(),
93
+ bbp_get_closed_status_id(),
94
+ bbp_get_spam_status_id(),
95
+ bbp_get_trash_status_id()
96
+ );
97
+
98
+ // Add support for private status
99
+ if ( current_user_can( 'read_private_replies' ) ) {
100
+ $post_statuses[] = bbp_get_private_status_id();
101
+ }
102
+
103
+ // Join post statuses together
104
+ $default['post_status'] = join( ',', $post_statuses );
105
+
106
+ // Lean on the 'perm' query var value of 'readable' to provide statuses
107
+ } else {
108
+ $default['perm'] = 'readable';
109
+ }
110
 
111
+ /** Setup *****************************************************************/
112
+
113
+ // Parse arguments against default values
114
+ $r = bbp_parse_args( $args, $default, 'has_replies' );
115
 
116
  // Get bbPress
117
  $bbp = bbpress();
118
 
119
  // Call the query
120
+ $bbp->reply_query = new WP_Query( $r );
121
 
122
  // Add pagination values to query object
123
+ $bbp->reply_query->posts_per_page = $r['posts_per_page'];
124
+ $bbp->reply_query->paged = $r['paged'];
125
 
126
  // Never home, regardless of what parse_query says
127
  $bbp->reply_query->is_home = false;
162
  apply_filters( 'bbp_replies_pagination', array(
163
  'base' => $base,
164
  'format' => '',
165
+ 'total' => ceil( (int) $bbp->reply_query->found_posts / (int) $r['posts_per_page'] ),
166
  'current' => (int) $bbp->reply_query->paged,
167
+ 'prev_text' => is_rtl() ? '&rarr;' : '&larr;',
168
+ 'next_text' => is_rtl() ? '&larr;' : '&rarr;',
169
  'mid_size' => 1,
170
  'add_args' => ( bbp_get_view_all() ) ? array( 'view' => 'all' ) : false
171
  ) )
234
  *
235
  * @param $reply_id Optional. Used to check emptiness
236
  * @uses bbPress::reply_query::post::ID To get the reply id
237
+ * @uses bbp_is_reply() To check if the search result is a reply
238
+ * @uses bbp_is_single_reply() To check if it's a reply page
239
  * @uses bbp_is_reply_edit() To check if it's a reply edit page
240
  * @uses get_post_field() To get the post's post type
241
  * @uses WP_Query::post::ID To get the reply id
257
  } elseif ( !empty( $bbp->reply_query->in_the_loop ) && isset( $bbp->reply_query->post->ID ) ) {
258
  $bbp_reply_id = $bbp->reply_query->post->ID;
259
 
260
+ // Currently inside a search loop
261
+ } elseif ( !empty( $bbp->search_query->in_the_loop ) && isset( $bbp->search_query->post->ID ) && bbp_is_reply( $bbp->search_query->post->ID ) ) {
262
+ $bbp_reply_id = $bbp->search_query->post->ID;
263
+
264
  // Currently viewing a forum
265
  } elseif ( ( bbp_is_single_reply() || bbp_is_reply_edit() ) && !empty( $bbp->current_reply_id ) ) {
266
  $bbp_reply_id = $bbp->current_reply_id;
547
  * @param bool $gmt Optional. Use GMT
548
  * @uses bbp_get_reply_id() To get the reply id
549
  * @uses get_post_time() to get the reply post time
550
+ * @uses bbp_get_time_since() to maybe humanize the reply post time
551
  * @return string
552
  */
553
  function bbp_get_reply_post_date( $reply_id = 0, $humanize = false, $gmt = false ) {
555
 
556
  // 4 days, 4 hours ago
557
  if ( !empty( $humanize ) ) {
558
+ $gmt_s = !empty( $gmt ) ? 'G' : 'U';
559
+ $date = get_post_time( $gmt_s, $gmt, $reply_id );
560
  $time = false; // For filter below
561
+ $result = bbp_get_time_since( $date );
562
 
563
  // August 4, 2012 at 2:37 pm
564
  } else {
860
  function bbp_get_reply_author( $reply_id = 0 ) {
861
  $reply_id = bbp_get_reply_id( $reply_id );
862
 
863
+ if ( !bbp_is_reply_anonymous( $reply_id ) ) {
864
  $author = get_the_author_meta( 'display_name', bbp_get_reply_author_id( $reply_id ) );
865
+ } else {
866
  $author = get_post_meta( $reply_id, '_bbp_anonymous_name', true );
867
+ }
868
 
869
  return apply_filters( 'bbp_get_reply_author', $author, $reply_id );
870
  }
952
  if ( empty( $author_name ) )
953
  $author_name = __( 'Anonymous', 'bbpress' );
954
 
955
+ // Encode possible UTF8 display names
956
+ if ( seems_utf8( $author_name ) === false )
957
+ $author_name = utf8_encode( $author_name );
958
+
959
+ return apply_filters( 'bbp_get_reply_author_display_name', $author_name, $reply_id );
960
  }
961
 
962
  /**
1036
  * @return string Author link of reply
1037
  */
1038
  function bbp_get_reply_author_link( $args = '' ) {
1039
+
1040
+ // Parse arguments against default values
1041
+ $r = bbp_parse_args( $args, array(
1042
  'post_id' => 0,
1043
  'link_title' => '',
1044
  'type' => 'both',
1045
  'size' => 80,
1046
  'sep' => '&nbsp;',
1047
  'show_role' => false
1048
+ ), 'get_reply_author_link' );
 
 
1049
 
1050
  // Used as reply_id
1051
+ if ( is_numeric( $args ) ) {
1052
  $reply_id = bbp_get_reply_id( $args );
1053
+ } else {
1054
+ $reply_id = bbp_get_reply_id( $r['post_id'] );
1055
+ }
1056
 
1057
+ // Reply ID is good
1058
  if ( !empty( $reply_id ) ) {
1059
+
1060
+ // Tweak link title if empty
1061
+ if ( empty( $$r['link_title'] ) ) {
1062
  $link_title = sprintf( !bbp_is_reply_anonymous( $reply_id ) ? __( 'View %s\'s profile', 'bbpress' ) : __( 'Visit %s\'s website', 'bbpress' ), bbp_get_reply_author_display_name( $reply_id ) );
1063
+
1064
+ // Use what was passed if not
1065
+ } else {
1066
+ $link_title = $r['link_title'];
1067
  }
1068
 
1069
+ $link_title = !empty( $link_title ) ? ' title="' . $link_title . '"' : '';
1070
+ $author_url = bbp_get_reply_author_url( $reply_id );
1071
+ $anonymous = bbp_is_reply_anonymous( $reply_id );
1072
+ $author_links = array();
1073
 
1074
  // Get avatar
1075
+ if ( 'avatar' == $r['type'] || 'both' == $r['type'] ) {
1076
+ $author_links['avatar'] = bbp_get_reply_author_avatar( $reply_id, $r['size'] );
1077
  }
1078
 
1079
  // Get display name
1080
+ if ( 'name' == $r['type'] || 'both' == $r['type'] ) {
1081
  $author_links['name'] = bbp_get_reply_author_display_name( $reply_id );
1082
  }
1083
 
1084
+ // Link class
1085
+ $link_class = ' class="bbp-author-' . $r['type'] . '"';
1086
+
1087
  // Add links if not anonymous
1088
  if ( empty( $anonymous ) && bbp_user_has_profile( bbp_get_reply_author_id( $reply_id ) ) ) {
1089
+
1090
+ // Assemble the links
1091
  foreach ( $author_links as $link => $link_text ) {
1092
  $link_class = ' class="bbp-author-' . $link . '"';
1093
  $author_link[] = sprintf( '<a href="%1$s"%2$s%3$s>%4$s</a>', $author_url, $link_title, $link_class, $link_text );
1094
  }
1095
 
1096
+ if ( true === $r['show_role'] ) {
1097
  $author_link[] = bbp_get_reply_author_role( array( 'reply_id' => $reply_id ) );
1098
  }
1099
 
1100
+ $author_link = join( $r['sep'], $author_link );
1101
 
1102
  // No links if anonymous
1103
  } else {
1104
+ $author_link = join( $r['sep'], $author_links );
1105
  }
1106
 
1107
  // No replies so link is empty
1109
  $author_link = '';
1110
  }
1111
 
1112
+ return apply_filters( 'bbp_get_reply_author_link', $author_link, $r );
1113
  }
1114
 
1115
  /**
1233
  * @return string Reply author role
1234
  */
1235
  function bbp_get_reply_author_role( $args = array() ) {
1236
+
1237
+ // Parse arguments against default values
1238
+ $r = bbp_parse_args( $args, array(
1239
  'reply_id' => 0,
1240
  'class' => 'bbp-author-role',
1241
  'before' => '',
1242
  'after' => ''
1243
+ ), 'get_reply_author_role' );
 
 
1244
 
1245
+ $reply_id = bbp_get_reply_id( $r['reply_id'] );
1246
  $role = bbp_get_user_display_role( bbp_get_reply_author_id( $reply_id ) );
1247
+ $author_role = sprintf( '%1$s<div class="%2$s">%3$s</div>%4$s', $r['before'], $r['class'], $role, $r['after'] );
1248
 
1249
  return apply_filters( 'bbp_get_reply_author_role', $author_role, $args );
1250
  }
1449
  * - after: HTML after the links. Defaults to '</span>'
1450
  * - sep: Separator. Defaults to ' | '
1451
  * - links: Array of the links to display. By default, edit, trash,
1452
+ * spam, reply move, and topic split links are displayed
1453
  * @uses bbp_is_topic() To check if it's the topic page
1454
  * @uses bbp_is_reply() To check if it's the reply page
1455
  * @uses bbp_get_reply_id() To get the reply id
1456
  * @uses bbp_get_reply_edit_link() To get the reply edit link
1457
  * @uses bbp_get_reply_trash_link() To get the reply trash link
1458
  * @uses bbp_get_reply_spam_link() To get the reply spam link
1459
+ * @uses bbp_get_reply_move_link() To get the reply move link
1460
  * @uses bbp_get_topic_split_link() To get the topic split link
1461
  * @uses current_user_can() To check if the current user can edit or
1462
  * delete the reply
1466
  */
1467
  function bbp_get_reply_admin_links( $args = '' ) {
1468
 
1469
+ // Parse arguments against default values
1470
+ $r = bbp_parse_args( $args, array(
1471
  'id' => 0,
1472
  'before' => '<span class="bbp-admin-links">',
1473
  'after' => '</span>',
1474
  'sep' => ' | ',
1475
  'links' => array()
1476
+ ), 'get_reply_admin_links' );
 
1477
 
1478
  $r['id'] = bbp_get_reply_id( (int) $r['id'] );
1479
 
1495
 
1496
  // If no links were passed, default to the standard
1497
  if ( empty( $r['links'] ) ) {
1498
+ $r['links'] = apply_filters( 'bbp_reply_admin_links', array(
1499
  'edit' => bbp_get_reply_edit_link ( $r ),
1500
+ 'move' => bbp_get_reply_move_link ( $r ),
1501
  'split' => bbp_get_topic_split_link( $r ),
1502
  'trash' => bbp_get_reply_trash_link( $r ),
1503
  'spam' => bbp_get_reply_spam_link ( $r ),
1504
+ ), $r['id'] );
1505
  }
1506
 
1507
  // Check caps for trashing the topic
1513
  if ( in_array( $reply_status, array( bbp_get_spam_status_id(), bbp_get_trash_status_id() ) ) ) {
1514
 
1515
  // Spam link shouldn't be visible on trashed topics
1516
+ if ( bbp_get_trash_status_id() == $reply_status ) {
1517
  unset( $r['links']['spam'] );
1518
 
1519
  // Trash link shouldn't be visible on spam topics
1526
  $links = implode( $r['sep'], array_filter( $r['links'] ) );
1527
  $retval = $r['before'] . $links . $r['after'];
1528
 
1529
+ return apply_filters( 'bbp_get_reply_admin_links', $retval, $r );
1530
  }
1531
 
1532
  /**
1561
  * @return string Reply edit link
1562
  */
1563
  function bbp_get_reply_edit_link( $args = '' ) {
1564
+
1565
+ // Parse arguments against default values
1566
+ $r = bbp_parse_args( $args, array(
1567
  'id' => 0,
1568
  'link_before' => '',
1569
  'link_after' => '',
1570
  'edit_text' => __( 'Edit', 'bbpress' )
1571
+ ), 'get_reply_edit_link' );
 
 
1572
 
1573
+ $reply = bbp_get_reply( bbp_get_reply_id( (int) $r['id'] ) );
1574
 
1575
  // Bypass check if user has caps
1576
  if ( !current_user_can( 'edit_others_replies' ) ) {
1577
 
1578
  // User cannot edit or it is past the lock time
1579
+ if ( empty( $reply ) || !current_user_can( 'edit_reply', $reply->ID ) || bbp_past_edit_lock( $reply->post_date_gmt ) ) {
1580
  return;
1581
+ }
1582
  }
1583
 
1584
  // Get uri
1585
+ $uri = bbp_get_reply_edit_url( $r['id'] );
1586
 
1587
  // Bail if no uri
1588
  if ( empty( $uri ) )
1589
  return;
1590
 
1591
+ $retval = $r['link_before'] . '<a href="' . $uri . '">' . $r['edit_text'] . '</a>' . $r['link_after'];
1592
 
1593
+ return apply_filters( 'bbp_get_reply_edit_link', $retval, $r );
1594
  }
1595
 
1596
  /**
1684
  * @return string Reply trash link
1685
  */
1686
  function bbp_get_reply_trash_link( $args = '' ) {
1687
+
1688
+ // Parse arguments against default values
1689
+ $r = bbp_parse_args( $args, array(
1690
  'id' => 0,
1691
  'link_before' => '',
1692
  'link_after' => '',
1694
  'trash_text' => __( 'Trash', 'bbpress' ),
1695
  'restore_text' => __( 'Restore', 'bbpress' ),
1696
  'delete_text' => __( 'Delete', 'bbpress' )
1697
+ ), 'get_reply_trash_link' );
 
 
1698
 
1699
  $actions = array();
1700
+ $reply = bbp_get_reply( bbp_get_reply_id( (int) $r['id'] ) );
1701
 
1702
  if ( empty( $reply ) || !current_user_can( 'delete_reply', $reply->ID ) ) {
1703
  return;
1704
  }
1705
 
1706
  if ( bbp_is_reply_trash( $reply->ID ) ) {
1707
+ $actions['untrash'] = '<a title="' . esc_attr__( 'Restore this item from the Trash', 'bbpress' ) . '" href="' . esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'bbp_toggle_reply_trash', 'sub_action' => 'untrash', 'reply_id' => $reply->ID ) ), 'untrash-' . $reply->post_type . '_' . $reply->ID ) ) . '">' . esc_html( $r['restore_text'] ) . '</a>';
1708
  } elseif ( EMPTY_TRASH_DAYS ) {
1709
+ $actions['trash'] = '<a title="' . esc_attr__( 'Move this item to the Trash', 'bbpress' ) . '" href="' . esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'bbp_toggle_reply_trash', 'sub_action' => 'trash', 'reply_id' => $reply->ID ) ), 'trash-' . $reply->post_type . '_' . $reply->ID ) ) . '">' . esc_html( $r['trash_text'] ) . '</a>';
1710
  }
1711
 
1712
  if ( bbp_is_reply_trash( $reply->ID ) || !EMPTY_TRASH_DAYS ) {
1713
+ $actions['delete'] = '<a title="' . esc_attr__( 'Delete this item permanently', 'bbpress' ) . '" href="' . esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'bbp_toggle_reply_trash', 'sub_action' => 'delete', 'reply_id' => $reply->ID ) ), 'delete-' . $reply->post_type . '_' . $reply->ID ) ) . '" onclick="return confirm(\'' . esc_js( __( 'Are you sure you want to delete that permanently?', 'bbpress' ) ) . '\' );">' . esc_html( $r['delete_text'] ) . '</a>';
1714
  }
1715
 
1716
  // Process the admin links
1717
+ $retval = $r['link_before'] . implode( $r['sep'], $actions ) . $r['link_after'];
1718
 
1719
+ return apply_filters( 'bbp_get_reply_trash_link', $retval, $r );
1720
  }
1721
 
1722
  /**
1756
  * @return string Reply spam link
1757
  */
1758
  function bbp_get_reply_spam_link( $args = '' ) {
1759
+
1760
+ // Parse arguments against default values
1761
+ $r = bbp_parse_args( $args, array(
1762
  'id' => 0,
1763
  'link_before' => '',
1764
  'link_after' => '',
1765
  'spam_text' => __( 'Spam', 'bbpress' ),
1766
  'unspam_text' => __( 'Unspam', 'bbpress' )
1767
+ ), 'get_reply_spam_link' );
 
 
1768
 
1769
+ $reply = bbp_get_reply( bbp_get_reply_id( (int) $r['id'] ) );
1770
 
1771
  if ( empty( $reply ) || !current_user_can( 'moderate', $reply->ID ) )
1772
  return;
1773
 
1774
+ $display = bbp_is_reply_spam( $reply->ID ) ? $r['unspam_text'] : $r['spam_text'];
1775
  $uri = add_query_arg( array( 'action' => 'bbp_toggle_reply_spam', 'reply_id' => $reply->ID ) );
1776
  $uri = esc_url( wp_nonce_url( $uri, 'spam-reply_' . $reply->ID ) );
1777
+ $retval = $r['link_before'] . '<a href="' . $uri . '">' . $display . '</a>' . $r['link_after'];
1778
 
1779
+ return apply_filters( 'bbp_get_reply_spam_link', $retval, $r );
1780
+ }
1781
+
1782
+ /**
1783
+ * Move reply link
1784
+ *
1785
+ * Output the move link of the reply
1786
+ *
1787
+ * @since bbPress (r4521)
1788
+ *
1789
+ * @param mixed $args See {@link bbp_get_reply_move_link()}
1790
+ * @uses bbp_get_reply_move_link() To get the reply move link
1791
+ */
1792
+ function bbp_reply_move_link( $args = '' ) {
1793
+ echo bbp_get_reply_move_link( $args );
1794
+ }
1795
+
1796
+ /**
1797
+ * Get move reply link
1798
+ *
1799
+ * Return the move link of the reply
1800
+ *
1801
+ * @since bbPress (r4521)
1802
+ *
1803
+ * @param mixed $args This function supports these arguments:
1804
+ * - id: Reply id
1805
+ * - link_before: HTML before the link
1806
+ * - link_after: HTML after the link
1807
+ * - move_text: Move text
1808
+ * - move_title: Move title attribute
1809
+ * @uses bbp_get_reply_id() To get the reply id
1810
+ * @uses bbp_get_reply() To get the reply
1811
+ * @uses current_user_can() To check if the current user can edit the
1812
+ * topic
1813
+ * @uses bbp_get_reply_topic_id() To get the reply topic id
1814
+ * @uses bbp_get_reply_edit_url() To get the reply edit url
1815
+ * @uses add_query_arg() To add custom args to the url
1816
+ * @uses wp_nonce_url() To nonce the url
1817
+ * @uses esc_url() To escape the url
1818
+ * @uses apply_filters() Calls 'bbp_get_reply_move_link' with the reply
1819
+ * move link and args
1820
+ * @return string Reply move link
1821
+ */
1822
+ function bbp_get_reply_move_link( $args = '' ) {
1823
+
1824
+ // Parse arguments against default values
1825
+ $r = bbp_parse_args( $args, array(
1826
+ 'id' => 0,
1827
+ 'link_before' => '',
1828
+ 'link_after' => '',
1829
+ 'split_text' => __( 'Move', 'bbpress' ),
1830
+ 'split_title' => __( 'Move this reply', 'bbpress' )
1831
+ ), 'get_reply_move_link' );
1832
+
1833
+ $reply_id = bbp_get_reply_id( $r['id'] );
1834
+ $topic_id = bbp_get_reply_topic_id( $reply_id );
1835
+
1836
+ if ( empty( $reply_id ) || !current_user_can( 'moderate', $topic_id ) )
1837
+ return;
1838
+
1839
+ $uri = esc_url( add_query_arg( array(
1840
+ 'action' => 'move',
1841
+ 'reply_id' => $reply_id
1842
+ ), bbp_get_reply_edit_url( $reply_id ) ) );
1843
+
1844
+ $retval = $r['link_before'] . '<a href="' . $uri . '" title="' . esc_attr( $r['split_title'] ) . '">' . esc_html( $r['split_text'] ) . '</a>' . $r['link_after'];
1845
+
1846
+ return apply_filters( 'bbp_get_reply_move_link', $retval, $r );
1847
  }
1848
 
1849
  /**
1850
  * Split topic link
1851
  *
1852
+ * Output the split link of the topic (but is bundled with each reply)
1853
  *
1854
  * @since bbPress (r2756)
1855
  *
1884
  * @uses esc_url() To escape the url
1885
  * @uses apply_filters() Calls 'bbp_get_topic_split_link' with the topic
1886
  * split link and args
1887
+ * @return string Topic split link
1888
  */
1889
  function bbp_get_topic_split_link( $args = '' ) {
1890
+
1891
+ // Parse arguments against default values
1892
+ $r = bbp_parse_args( $args, array(
1893
  'id' => 0,
1894
  'link_before' => '',
1895
  'link_after' => '',
1896
  'split_text' => __( 'Split', 'bbpress' ),
1897
  'split_title' => __( 'Split the topic from this reply', 'bbpress' )
1898
+ ), 'get_topic_split_link' );
 
 
1899
 
1900
+ $reply_id = bbp_get_reply_id( $r['id'] );
1901
  $topic_id = bbp_get_reply_topic_id( $reply_id );
1902
 
1903
  if ( empty( $reply_id ) || !current_user_can( 'moderate', $topic_id ) )
1912
  bbp_get_topic_edit_url( $topic_id )
1913
  ) );
1914
 
1915
+ $retval = $r['link_before'] . '<a href="' . $uri . '" title="' . esc_attr( $r['split_title'] ) . '">' . esc_html( $r['split_text'] ) . '</a>' . $r['link_after'];
1916
 
1917
+ return apply_filters( 'bbp_get_topic_split_link', $retval, $r );
1918
  }
1919
 
1920
  /**
2075
  function bbp_get_form_reply_content() {
2076
 
2077
  // Get _POST data
2078
+ if ( 'POST' == strtoupper( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_reply_content'] ) ) {
2079
  $reply_content = $_POST['bbp_reply_content'];
2080
 
2081
  // Get edit data
2082
+ } elseif ( bbp_is_reply_edit() ) {
2083
  $reply_content = bbp_get_global_post_field( 'post_content', 'raw' );
2084
 
2085
  // No data
2086
+ } else {
2087
  $reply_content = '';
2088
+ }
2089
 
2090
  return apply_filters( 'bbp_get_form_reply_content', esc_textarea( $reply_content ) );
2091
  }
2112
  function bbp_get_form_reply_log_edit() {
2113
 
2114
  // Get _POST data
2115
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_log_reply_edit'] ) ) {
2116
  $reply_revision = $_POST['bbp_log_reply_edit'];
2117
 
2118
  // No data
2119
+ } else {
2120
  $reply_revision = 1;
2121
+ }
2122
 
2123
  return apply_filters( 'bbp_get_form_reply_log_edit', checked( $reply_revision, true, false ) );
2124
  }
2145
  function bbp_get_form_reply_edit_reason() {
2146
 
2147
  // Get _POST data
2148
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_reply_edit_reason'] ) ) {
2149
  $reply_edit_reason = $_POST['bbp_reply_edit_reason'];
2150
 
2151
  // No data
2152
+ } else {
2153
  $reply_edit_reason = '';
2154
+ }
2155
 
2156
  return apply_filters( 'bbp_get_form_reply_edit_reason', esc_attr( $reply_edit_reason ) );
2157
  }
includes/search/functions.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * bbPress Search Functions
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Functions
8
+ */
9
+
10
+ // Exit if accessed directly
11
+ if ( !defined( 'ABSPATH' ) ) exit;
12
+
13
+ /** Query *********************************************************************/
14
+
15
+ /**
16
+ * Run the search query
17
+ *
18
+ * @since bbPress (r4579)
19
+ *
20
+ * @param mixed $new_args New arguments
21
+ * @uses bbp_get_search_query_args() To get the search query args
22
+ * @uses bbp_parse_args() To parse the args
23
+ * @uses bbp_has_search_results() To make the search query
24
+ * @return bool False if no results, otherwise if search results are there
25
+ */
26
+ function bbp_search_query( $new_args = '' ) {
27
+
28
+ // Existing arguments
29
+ $query_args = bbp_get_search_query_args();
30
+
31
+ // Merge arguments
32
+ if ( !empty( $new_args ) ) {
33
+ $new_args = bbp_parse_args( $new_args, '', 'search_query' );
34
+ $query_args = array_merge( $query_args, $new_args );
35
+ }
36
+
37
+ return bbp_has_search_results( $query_args );
38
+ }
39
+
40
+ /**
41
+ * Return the search's query args
42
+ *
43
+ * @since bbPress (r4579)
44
+ *
45
+ * @uses bbp_get_search_terms() To get the search terms
46
+ * @return array Query arguments
47
+ */
48
+ function bbp_get_search_query_args() {
49
+
50
+ // Get search terms
51
+ $search_terms = bbp_get_search_terms();
52
+ $retval = !empty( $search_terms ) ? array( 's' => $search_terms ) : array();
53
+
54
+ return apply_filters( 'bbp_get_search_query_args', $retval );
55
+ }
includes/search/index.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Do not modify the files in this folder.
5
+ */
includes/search/template-tags.php ADDED
@@ -0,0 +1,371 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * bbPress Search Template Tags
5
+ *
6
+ * @package bbPress
7
+ * @subpackage TemplateTags
8
+ */
9
+
10
+ // Exit if accessed directly
11
+ if ( !defined( 'ABSPATH' ) ) exit;
12
+
13
+ /** Search Loop Functions *****************************************************/
14
+
15
+ /**
16
+ * The main search loop. WordPress does the heavy lifting.
17
+ *
18
+ * @since bbPress (r4579)
19
+ *
20
+ * @param mixed $args All the arguments supported by {@link WP_Query}
21
+ * @uses bbp_get_view_all() Are we showing all results?
22
+ * @uses bbp_get_public_status_id() To get the public status id
23
+ * @uses bbp_get_closed_status_id() To get the closed status id
24
+ * @uses bbp_get_spam_status_id() To get the spam status id
25
+ * @uses bbp_get_trash_status_id() To get the trash status id
26
+ * @uses bbp_get_forum_post_type() To get the forum post type
27
+ * @uses bbp_get_topic_post_type() To get the topic post type
28
+ * @uses bbp_get_reply_post_type() To get the reply post type
29
+ * @uses bbp_get_replies_per_page() To get the replies per page option
30
+ * @uses bbp_get_paged() To get the current page value
31
+ * @uses bbp_get_search_terms() To get the search terms
32
+ * @uses WP_Query To make query and get the search results
33
+ * @uses WP_Rewrite::using_permalinks() To check if the blog is using permalinks
34
+ * @uses bbp_get_search_url() To get the forum search url
35
+ * @uses paginate_links() To paginate search results
36
+ * @uses apply_filters() Calls 'bbp_has_search_results' with
37
+ * bbPress::search_query::have_posts()
38
+ * and bbPress::reply_query
39
+ * @return object Multidimensional array of search information
40
+ */
41
+ function bbp_has_search_results( $args = '' ) {
42
+ global $wp_rewrite;
43
+
44
+ /** Defaults **************************************************************/
45
+
46
+ // What are the default allowed statuses (based on user caps)
47
+ if ( bbp_get_view_all( 'edit_others_replies' ) ) {
48
+ $post_statuses = array( bbp_get_public_status_id(), bbp_get_closed_status_id(), bbp_get_spam_status_id(), bbp_get_trash_status_id() );
49
+ } else {
50
+ $post_statuses = array( bbp_get_public_status_id(), bbp_get_closed_status_id() );
51
+ }
52
+
53
+ $default_post_type = array( bbp_get_forum_post_type(), bbp_get_topic_post_type(), bbp_get_reply_post_type() );
54
+ $default_post_status = join( ',', $post_statuses );
55
+
56
+ // Default query args
57
+ $default = array(
58
+ 'post_type' => $default_post_type, // Forums, topics, and replies
59
+ 'post_status' => $default_post_status, // Of this status
60
+ 'posts_per_page' => bbp_get_replies_per_page(), // This many
61
+ 'paged' => bbp_get_paged(), // On this page
62
+ 'orderby' => 'date', // Sorted by date
63
+ 'order' => 'DESC', // Most recent first
64
+ 's' => bbp_get_search_terms(), // This is a search
65
+ );
66
+
67
+ /** Setup *****************************************************************/
68
+
69
+ // Parse arguments against default values
70
+ $r = bbp_parse_args( $args, $default, 'has_search_results' );
71
+
72
+ // Don't bother if we don't have search terms
73
+ if ( empty( $r['s'] ) )
74
+ return false;
75
+
76
+ // Get bbPress
77
+ $bbp = bbpress();
78
+
79
+ // Call the query
80
+ $bbp->search_query = new WP_Query( $r );
81
+
82
+ // Add pagination values to query object
83
+ $bbp->search_query->posts_per_page = $r['posts_per_page'];
84
+ $bbp->search_query->paged = $r['paged'];
85
+
86
+ // Never home, regardless of what parse_query says
87
+ $bbp->search_query->is_home = false;
88
+
89
+ // Found posts
90
+ if ( !$bbp->search_query->found_posts )
91
+ return false;
92
+
93
+ // Only add pagination is query returned results
94
+ if ( (int) $bbp->search_query->found_posts && (int) $bbp->search_query->posts_per_page ) {
95
+
96
+ // If pretty permalinks are enabled, make our pagination pretty
97
+ if ( $wp_rewrite->using_permalinks() ) {
98
+
99
+ // Shortcode territory
100
+ if ( is_page() || is_single() ) {
101
+ $base = trailingslashit( get_permalink() );
102
+
103
+ // Default search location
104
+ } else {
105
+ $base = trailingslashit( bbp_get_search_url() );
106
+
107
+ }
108
+
109
+ // Add pagination base
110
+ $base = $base . user_trailingslashit( $wp_rewrite->pagination_base . '/%#%/' );
111
+
112
+ // Unpretty permalinks
113
+ } else {
114
+ $base = add_query_arg( 'paged', '%#%' );
115
+ }
116
+
117
+ // Add args
118
+ $add_args = isset( $_GET[bbp_get_search_rewrite_id()] ) ? array( bbp_get_search_rewrite_id() => urlencode( bbp_get_search_terms() ) ) : array();
119
+ if ( bbp_get_view_all() )
120
+ $add_args['view'] = 'all';
121
+
122
+ // Add pagination to query object
123
+ $bbp->search_query->pagination_links = paginate_links(
124
+ apply_filters( 'bbp_search_results_pagination', array(
125
+ 'base' => $base,
126
+ 'format' => '',
127
+ 'total' => ceil( (int) $bbp->search_query->found_posts / (int) $r['posts_per_page'] ),
128
+ 'current' => (int) $bbp->search_query->paged,
129
+ 'prev_text' => is_rtl() ? '&rarr;' : '&larr;',
130
+ 'next_text' => is_rtl() ? '&larr;' : '&rarr;',
131
+ 'mid_size' => 1,
132
+ 'add_args' => $add_args,
133
+ ) )
134
+ );
135
+
136
+ // Remove first page from pagination
137
+ if ( $wp_rewrite->using_permalinks() ) {
138
+ $bbp->search_query->pagination_links = str_replace( $wp_rewrite->pagination_base . '/1/', '', $bbp->search_query->pagination_links );
139
+ } else {
140
+ $bbp->search_query->pagination_links = str_replace( '&#038;paged=1', '', $bbp->search_query->pagination_links );
141
+ }
142
+ }
143
+
144
+ // Return object
145
+ return apply_filters( 'bbp_has_search_results', $bbp->search_query->have_posts(), $bbp->search_query );
146
+ }
147
+
148
+ /**
149
+ * Whether there are more search results available in the loop
150
+ *
151
+ * @since bbPress (r4579)
152
+ *
153
+ * @uses WP_Query bbPress::search_query::have_posts() To check if there are more
154
+ * search results available
155
+ * @return object Search information
156
+ */
157
+ function bbp_search_results() {
158
+
159
+ // Put into variable to check against next
160
+ $have_posts = bbpress()->search_query->have_posts();
161
+
162
+ // Reset the post data when finished
163
+ if ( empty( $have_posts ) )
164
+ wp_reset_postdata();
165
+
166
+ return $have_posts;
167
+ }
168
+
169
+ /**
170
+ * Loads up the current search result in the loop
171
+ *
172
+ * @since bbPress (r4579)
173
+ *
174
+ * @uses WP_Query bbPress::search_query::the_post() To get the current search result
175
+ * @return object Search information
176
+ */
177
+ function bbp_the_search_result() {
178
+ $search_result = bbpress()->search_query->the_post();
179
+
180
+ // Reset each current (forum|topic|reply) id
181
+ bbpress()->current_forum_id = bbp_get_forum_id();
182
+ bbpress()->current_topic_id = bbp_get_topic_id();
183
+ bbpress()->current_reply_id = bbp_get_reply_id();
184
+
185
+ return $search_result;
186
+ }
187
+
188
+ /**
189
+ * Output the search page title
190
+ *
191
+ * @since bbPress (r4579)
192
+ *
193
+ * @uses bbp_get_search_title()
194
+ */
195
+ function bbp_search_title() {
196
+ echo bbp_get_search_title();
197
+ }
198
+
199
+ /**
200
+ * Get the search page title
201
+ *
202
+ * @since bbPress (r4579)
203
+ *
204
+ * @uses bbp_get_search_terms()
205
+ */
206
+ function bbp_get_search_title() {
207
+
208
+ // Get search terms
209
+ $search_terms = bbp_get_search_terms();
210
+
211
+ // No search terms specified
212
+ if ( empty( $search_terms ) ) {
213
+ return __( 'Search', 'bbpress' );
214
+
215
+ // Include search terms in title
216
+ } else {
217
+ return sprintf( __( "Search Results for '%s'", 'bbpress' ), esc_attr( $search_terms ) );
218
+ }
219
+ }
220
+
221
+ /**
222
+ * Output the search url
223
+ *
224
+ * @since bbPress (r4579)
225
+ *
226
+ * @uses bbp_get_search_url() To get the search url
227
+ */
228
+ function bbp_search_url() {
229
+ echo bbp_get_search_url();
230
+ }
231
+ /**
232
+ * Return the search url
233
+ *
234
+ * @since bbPress (r4579)
235
+ *
236
+ * @uses user_trailingslashit() To fix slashes
237
+ * @uses trailingslashit() To fix slashes
238
+ * @uses bbp_get_forums_url() To get the root forums url
239
+ * @uses bbp_get_search_slug() To get the search slug
240
+ * @uses add_query_arg() To help make unpretty permalinks
241
+ * @return string Search url
242
+ */
243
+ function bbp_get_search_url() {
244
+ global $wp_rewrite;
245
+
246
+ // Pretty permalinks
247
+ if ( $wp_rewrite->using_permalinks() ) {
248
+ $url = $wp_rewrite->root . bbp_get_search_slug();
249
+ $url = home_url( user_trailingslashit( $url ) );
250
+
251
+ // Unpretty permalinks
252
+ } else {
253
+ $search_terms = bbp_get_search_terms();
254
+ $url = add_query_arg( array( 'bbp_search' => urlencode( $search_terms ) ), home_url( '/' ) );
255
+ }
256
+
257
+ return apply_filters( 'bbp_get_search_url', $url );
258
+ }
259
+
260
+
261
+ /**
262
+ * Output the search terms
263
+ *
264
+ * @since bbPress (r4579)
265
+ *
266
+ * @param string $search_terms Optional. Search terms
267
+ * @uses bbp_get_search_terms() To get the search terms
268
+ */
269
+ function bbp_search_terms( $search_terms = '' ) {
270
+ echo bbp_get_search_terms( $search_terms );
271
+ }
272
+
273
+ /**
274
+ * Get the search terms
275
+ *
276
+ * @since bbPress (r4579)
277
+ *
278
+ * If search terms are supplied, those are used. Otherwise check the
279
+ * search rewrite id query var.
280
+ *
281
+ * @param string $search_terms Optional. Search terms
282
+ * @uses sanitize_title() To sanitize the search terms
283
+ * @uses get_query_var*( To get the search terms from query var 'bbp_search'
284
+ * @return bool|string Search terms on success, false on failure
285
+ */
286
+ function bbp_get_search_terms( $search_terms = '' ) {
287
+
288
+ $search_terms = !empty( $search_terms ) ? sanitize_title( $search_terms ) : get_query_var( bbp_get_search_rewrite_id() );
289
+
290
+ if ( !empty( $search_terms ) )
291
+ return $search_terms;
292
+
293
+ return false;
294
+ }
295
+
296
+ /**
297
+ * Output the search result pagination count
298
+ *
299
+ * @since bbPress (r4579)
300
+ *
301
+ * @uses bbp_get_search_pagination_count() To get the search result pagination count
302
+ */
303
+ function bbp_search_pagination_count() {
304
+ echo bbp_get_search_pagination_count();
305
+ }
306
+
307
+ /**
308
+ * Return the search results pagination count
309
+ *
310
+ * @since bbPress (r4579)
311
+ *
312
+ * @uses bbp_number_format() To format the number value
313
+ * @uses apply_filters() Calls 'bbp_get_search_pagination_count' with the
314
+ * pagination count
315
+ * @return string Search pagination count
316
+ */
317
+ function bbp_get_search_pagination_count() {
318
+ $bbp = bbpress();
319
+
320
+ // Define local variable(s)
321
+ $retstr = '';
322
+
323
+ // Set pagination values
324
+ $start_num = intval( ( $bbp->search_query->paged - 1 ) * $bbp->search_query->posts_per_page ) + 1;
325
+ $from_num = bbp_number_format( $start_num );
326
+ $to_num = bbp_number_format( ( $start_num + ( $bbp->search_query->posts_per_page - 1 ) > $bbp->search_query->found_posts ) ? $bbp->search_query->found_posts : $start_num + ( $bbp->search_query->posts_per_page - 1 ) );
327
+ $total_int = (int) $bbp->search_query->found_posts;
328
+ $total = bbp_number_format( $total_int );
329
+
330
+ // Single page of results
331
+ if ( empty( $to_num ) ) {
332
+ $retstr = sprintf( _n( 'Viewing %1$s result', 'Viewing %1$s results', $total_int, 'bbpress' ), $total );
333
+
334
+ // Several pages of results
335
+ } else {
336
+ $retstr = sprintf( _n( 'Viewing %2$s results (of %4$s total)', 'Viewing %1$s results - %2$s through %3$s (of %4$s total)', $bbp->search_query->post_count, 'bbpress' ), $bbp->search_query->post_count, $from_num, $to_num, $total );
337
+
338
+ }
339
+
340
+ // Filter and return
341
+ return apply_filters( 'bbp_get_search_pagination_count', $retstr );
342
+ }
343
+
344
+ /**
345
+ * Output search pagination links
346
+ *
347
+ * @since bbPress (r4579)
348
+ *
349
+ * @uses bbp_get_search_pagination_links() To get the search pagination links
350
+ */
351
+ function bbp_search_pagination_links() {
352
+ echo bbp_get_search_pagination_links();
353
+ }
354
+
355
+ /**
356
+ * Return search pagination links
357
+ *
358
+ * @since bbPress (r4579)
359
+ *
360
+ * @uses apply_filters() Calls 'bbp_get_search_pagination_links' with the
361
+ * pagination links
362
+ * @return string Search pagination links
363
+ */
364
+ function bbp_get_search_pagination_links() {
365
+ $bbp = bbpress();
366
+
367
+ if ( !isset( $bbp->search_query->pagination_links ) || empty( $bbp->search_query->pagination_links ) )
368
+ return false;
369
+
370
+ return apply_filters( 'bbp_get_search_pagination_links', $bbp->search_query->pagination_links );
371
+ }
includes/topics/functions.php CHANGED
@@ -28,8 +28,8 @@ if ( !defined( 'ABSPATH' ) ) exit;
28
  */
29
  function bbp_insert_topic( $topic_data = array(), $topic_meta = array() ) {
30
 
31
- // Forum
32
- $default_topic = array(
33
  'post_parent' => 0, // forum ID
34
  'post_status' => bbp_get_public_status_id(),
35
  'post_type' => bbp_get_topic_post_type(),
@@ -39,10 +39,7 @@ function bbp_insert_topic( $topic_data = array(), $topic_meta = array() ) {
39
  'post_title' => '',
40
  'comment_status' => 'closed',
41
  'menu_order' => 0,
42
- );
43
-
44
- // Parse args
45
- $topic_data = bbp_parse_args( $topic_data, $default_topic, 'insert_topic' );
46
 
47
  // Insert topic
48
  $topic_id = wp_insert_post( $topic_data );
@@ -51,8 +48,8 @@ function bbp_insert_topic( $topic_data = array(), $topic_meta = array() ) {
51
  if ( empty( $topic_id ) )
52
  return false;
53
 
54
- // Forum meta
55
- $default_meta = array(
56
  'author_ip' => bbp_current_author_ip(),
57
  'forum_id' => 0,
58
  'topic_id' => $topic_id,
@@ -62,10 +59,7 @@ function bbp_insert_topic( $topic_data = array(), $topic_meta = array() ) {
62
  'last_reply_id' => 0,
63
  'last_active_id' => $topic_id,
64
  'last_active_time' => get_post_field( 'post_date', $topic_id, 'db' ),
65
- );
66
-
67
- // Parse args
68
- $topic_meta = bbp_parse_args( $topic_meta, $default_meta, 'insert_topic_meta' );
69
 
70
  // Insert topic meta
71
  foreach ( $topic_meta as $meta_key => $meta_value )
@@ -85,6 +79,7 @@ function bbp_insert_topic( $topic_data = array(), $topic_meta = array() ) {
85
  /**
86
  * Handles the front end topic submission
87
  *
 
88
  * @uses bbPress:errors::add() To log various error messages
89
  * @uses bbp_verify_nonce_request() To verify the nonce and check the referer
90
  * @uses bbp_is_anonymous() To check if an anonymous post is being made
@@ -114,14 +109,10 @@ function bbp_insert_topic( $topic_data = array(), $topic_meta = array() ) {
114
  * @uses bbPress::errors::get_error_messages() To get the {@link WP_Error} error
115
  * messages
116
  */
117
- function bbp_new_topic_handler() {
118
-
119
- // Bail if not a POST action
120
- if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
121
- return;
122
 
123
  // Bail if action is not bbp-new-topic
124
- if ( empty( $_POST['action'] ) || ( 'bbp-new-topic' !== $_POST['action'] ) )
125
  return;
126
 
127
  // Nonce check
@@ -352,7 +343,7 @@ function bbp_new_topic_handler() {
352
  /** Redirect **********************************************************/
353
 
354
  // Redirect to
355
- $redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
356
 
357
  // Get the topic URL
358
  $redirect_url = bbp_get_topic_permalink( $topic_id, $redirect_to );
@@ -391,6 +382,7 @@ function bbp_new_topic_handler() {
391
  /**
392
  * Handles the front end edit topic submission
393
  *
 
394
  * @uses bbPress:errors::add() To log various error messages
395
  * @uses bbp_get_topic() To get the topic
396
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
@@ -422,14 +414,10 @@ function bbp_new_topic_handler() {
422
  * @uses bbPress::errors::get_error_messages() To get the {@link WP_Error} error
423
  * messages
424
  */
425
- function bbp_edit_topic_handler() {
426
-
427
- // Bail if not a POST action
428
- if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
429
- return;
430
 
431
  // Bail if action is not bbp-edit-topic
432
- if ( empty( $_POST['action'] ) || ( 'bbp-edit-topic' !== $_POST['action'] ) )
433
  return;
434
 
435
  // Define local variable(s)
@@ -625,7 +613,7 @@ function bbp_edit_topic_handler() {
625
 
626
  // Toggle revisions back on
627
  if ( true === $revisions_removed ) {
628
- $revisions_removed = true;
629
  add_post_type_support( bbp_get_topic_post_type(), 'revisions' );
630
  }
631
 
@@ -693,7 +681,7 @@ function bbp_edit_topic_handler() {
693
  /** Redirect **********************************************************/
694
 
695
  // Redirect to
696
- $redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
697
 
698
  // View all?
699
  $view_all = bbp_get_view_all();
@@ -729,8 +717,7 @@ function bbp_edit_topic_handler() {
729
  *
730
  * @param int $topic_id Optional. Topic id
731
  * @param int $forum_id Optional. Forum id
732
- * @param bool|array $anonymous_data Optional. If it is an array, it is
733
- * extracted and anonymous user info is saved
734
  * @param int $author_id Author id
735
  * @param bool $is_edit Optional. Is the post being edited? Defaults to false.
736
  * @uses bbp_get_topic_id() To get the topic id
@@ -778,13 +765,12 @@ function bbp_update_topic( $topic_id = 0, $forum_id = 0, $anonymous_data = false
778
  // Check bbp_filter_anonymous_post_data() for sanitization.
779
  if ( !empty( $anonymous_data ) && is_array( $anonymous_data ) ) {
780
 
781
- // Always set at least these three values to empty
782
- $defaults = array(
783
  'bbp_anonymous_name' => '',
784
  'bbp_anonymous_email' => '',
785
  'bbp_anonymous_website' => '',
786
- );
787
- $r = bbp_parse_args( $anonymous_data, $defaults, 'update_topic' );
788
 
789
  // Update all anonymous metas
790
  foreach( $r as $anon_key => $anon_value ) {
@@ -1039,6 +1025,7 @@ function bbp_move_topic_handler( $topic_id, $old_forum_id, $new_forum_id ) {
1039
  *
1040
  * @since bbPress (r2756)
1041
  *
 
1042
  * @uses bbPress:errors::add() To log various error messages
1043
  * @uses bbp_get_topic() To get the topics
1044
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
@@ -1070,14 +1057,10 @@ function bbp_move_topic_handler( $topic_id, $old_forum_id, $new_forum_id ) {
1070
  * @uses bbp_get_topic_permalink() To get the topic permalink
1071
  * @uses wp_safe_redirect() To redirect to the topic link
1072
  */
1073
- function bbp_merge_topic_handler() {
1074
-
1075
- // Bail if not a POST action
1076
- if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
1077
- return;
1078
 
1079
  // Bail if action is not bbp-merge-topic
1080
- if ( empty( $_POST['action'] ) || ( 'bbp-merge-topic' !== $_POST['action'] ) )
1081
  return;
1082
 
1083
  // Define local variable(s)
@@ -1324,6 +1307,7 @@ function bbp_merge_topic_count( $destination_topic_id, $source_topic_id, $source
1324
  *
1325
  * @since bbPress (r2756)
1326
  *
 
1327
  * @uses bbPress:errors::add() To log various error messages
1328
  * @uses bbp_get_reply() To get the reply
1329
  * @uses bbp_get_topic() To get the topics
@@ -1355,14 +1339,10 @@ function bbp_merge_topic_count( $destination_topic_id, $source_topic_id, $source
1355
  * @uses bbp_get_topic_permalink() To get the topic permalink
1356
  * @uses wp_safe_redirect() To redirect to the topic link
1357
  */
1358
- function bbp_split_topic_handler() {
1359
-
1360
- // Bail if not a POST action
1361
- if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
1362
- return;
1363
 
1364
  // Bail if action is not 'bbp-split-topic'
1365
- if ( empty( $_POST['action'] ) || ( 'bbp-split-topic' !== $_POST['action'] ) )
1366
  return;
1367
 
1368
  global $wpdb;
@@ -1670,10 +1650,10 @@ function bbp_split_topic_handler() {
1670
  function bbp_split_topic_count( $from_reply_id, $source_topic_id, $destination_topic_id ) {
1671
 
1672
  // Forum Topic Counts
1673
- bbp_update_forum_topic_count( $destination_topic_id );
1674
 
1675
  // Forum Reply Counts
1676
- bbp_update_forum_reply_count( $destination_topic_id );
1677
 
1678
  // Topic Reply Counts
1679
  bbp_update_topic_reply_count( $source_topic_id );
@@ -1695,6 +1675,7 @@ function bbp_split_topic_count( $from_reply_id, $source_topic_id, $destination_t
1695
  *
1696
  * @since bbPress (r2768)
1697
  *
 
1698
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
1699
  * @uses current_user_can() To check if the current user can edit/delete tags
1700
  * @uses bbPress::errors::add() To log the error messages
@@ -1708,14 +1689,10 @@ function bbp_split_topic_count( $from_reply_id, $source_topic_id, $destination_t
1708
  * @uses is_wp_error() To check if the value retrieved is a {@link WP_Error}
1709
  * @uses wp_safe_redirect() To redirect to the url
1710
  */
1711
- function bbp_edit_topic_tag_handler() {
1712
-
1713
- // Bail if not a POST action
1714
- if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
1715
- return;
1716
 
1717
  // Bail if required POST actions aren't passed
1718
- if ( empty( $_POST['tag-id'] ) || empty( $_POST['action'] ) )
1719
  return;
1720
 
1721
  // Setup possible get actions
@@ -1726,11 +1703,10 @@ function bbp_edit_topic_tag_handler() {
1726
  );
1727
 
1728
  // Bail if actions aren't meant for this function
1729
- if ( !in_array( $_POST['action'], $possible_actions ) )
1730
  return;
1731
 
1732
  // Setup vars
1733
- $action = $_POST['action'];
1734
  $tag_id = (int) $_POST['tag-id'];
1735
  $tag = get_term( $tag_id, bbp_get_topic_tag_tax_id() );
1736
 
@@ -1926,6 +1902,7 @@ function bbp_get_super_stickies() {
1926
  *
1927
  * @since bbPress (r2727)
1928
  *
 
1929
  * @uses bbp_get_topic() To get the topic
1930
  * @uses current_user_can() To check if the user is capable of editing or
1931
  * deleting the topic
@@ -1951,14 +1928,10 @@ function bbp_get_super_stickies() {
1951
  * @uses wp_safe_redirect() To redirect to the topic
1952
  * @uses bbPress::errors:add() To log the error messages
1953
  */
1954
- function bbp_toggle_topic_handler() {
1955
-
1956
- // Bail if not a GET action
1957
- if ( 'GET' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
1958
- return;
1959
 
1960
  // Bail if required GET actions aren't passed
1961
- if ( empty( $_GET['topic_id'] ) || empty( $_GET['action'] ) )
1962
  return;
1963
 
1964
  // Setup possible get actions
@@ -1970,12 +1943,11 @@ function bbp_toggle_topic_handler() {
1970
  );
1971
 
1972
  // Bail if actions aren't meant for this function
1973
- if ( !in_array( $_GET['action'], $possible_actions ) )
1974
  return;
1975
 
1976
  $failure = ''; // Empty failure string
1977
  $view_all = false; // Assume not viewing all
1978
- $action = $_GET['action']; // What action is taking place?
1979
  $topic_id = (int) $_GET['topic_id']; // What's the topic id?
1980
  $success = false; // Flag
1981
  $post_data = array( 'ID' => $topic_id ); // Prelim array
@@ -2184,7 +2156,7 @@ function bbp_bump_topic_reply_count( $topic_id = 0, $difference = 1 ) {
2184
 
2185
  // Get counts
2186
  $topic_id = bbp_get_topic_id( $topic_id );
2187
- $reply_count = bbp_get_topic_reply_count( $topic_id, false );
2188
  $new_count = (int) $reply_count + (int) $difference;
2189
 
2190
  // Update this topic id's reply count
@@ -2210,7 +2182,7 @@ function bbp_bump_topic_reply_count_hidden( $topic_id = 0, $difference = 1 ) {
2210
 
2211
  // Get counts
2212
  $topic_id = bbp_get_topic_id( $topic_id );
2213
- $reply_count = bbp_get_topic_reply_count_hidden( $topic_id, false );
2214
  $new_count = (int) $reply_count + (int) $difference;
2215
 
2216
  // Update this topic id's hidder reply count
@@ -2241,13 +2213,15 @@ function bbp_bump_topic_reply_count_hidden( $topic_id = 0, $difference = 1 ) {
2241
  function bbp_update_topic_forum_id( $topic_id = 0, $forum_id = 0 ) {
2242
 
2243
  // If it's a reply, then get the parent (topic id)
2244
- if ( bbp_is_reply( $topic_id ) )
2245
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2246
- else
2247
  $topic_id = bbp_get_topic_id( $topic_id );
 
2248
 
2249
- if ( empty( $forum_id ) )
2250
  $forum_id = get_post_field( 'post_parent', $topic_id );
 
2251
 
2252
  update_post_meta( $topic_id, '_bbp_forum_id', (int) $forum_id );
2253
 
@@ -2293,14 +2267,16 @@ function bbp_update_topic_topic_id( $topic_id = 0 ) {
2293
  function bbp_update_topic_reply_count( $topic_id = 0, $reply_count = 0 ) {
2294
 
2295
  // If it's a reply, then get the parent (topic id)
2296
- if ( bbp_is_reply( $topic_id ) )
2297
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2298
- else
2299
  $topic_id = bbp_get_topic_id( $topic_id );
 
2300
 
2301
  // Get replies of topic if not passed
2302
- if ( empty( $reply_count ) )
2303
  $reply_count = bbp_get_public_child_count( $topic_id, bbp_get_reply_post_type() );
 
2304
 
2305
  update_post_meta( $topic_id, '_bbp_reply_count', (int) $reply_count );
2306
 
@@ -2329,14 +2305,16 @@ function bbp_update_topic_reply_count_hidden( $topic_id = 0, $reply_count = 0 )
2329
  global $wpdb;
2330
 
2331
  // If it's a reply, then get the parent (topic id)
2332
- if ( bbp_is_reply( $topic_id ) )
2333
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2334
- else
2335
  $topic_id = bbp_get_topic_id( $topic_id );
 
2336
 
2337
  // Get replies of topic
2338
- if ( empty( $reply_count ) )
2339
  $reply_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM {$wpdb->posts} WHERE post_parent = %d AND post_status IN ( '" . join( '\',\'', array( bbp_get_trash_status_id(), bbp_get_spam_status_id() ) ) . "') AND post_type = '%s';", $topic_id, bbp_get_reply_post_type() ) );
 
2340
 
2341
  update_post_meta( $topic_id, '_bbp_reply_count_hidden', (int) $reply_count );
2342
 
@@ -2364,21 +2342,25 @@ function bbp_update_topic_reply_count_hidden( $topic_id = 0, $reply_count = 0 )
2364
  function bbp_update_topic_last_active_id( $topic_id = 0, $active_id = 0 ) {
2365
 
2366
  // If it's a reply, then get the parent (topic id)
2367
- if ( bbp_is_reply( $topic_id ) )
2368
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2369
- else
2370
  $topic_id = bbp_get_topic_id( $topic_id );
 
2371
 
2372
- if ( empty( $active_id ) )
2373
  $active_id = bbp_get_public_child_last_id( $topic_id, bbp_get_reply_post_type() );
 
2374
 
2375
  // Adjust last_id's based on last_reply post_type
2376
- if ( empty( $active_id ) || !bbp_is_reply( $active_id ) )
2377
  $active_id = $topic_id;
 
2378
 
2379
  // Update only if published
2380
- if ( bbp_get_public_status_id() == get_post_status( $active_id ) )
2381
  update_post_meta( $topic_id, '_bbp_last_active_id', (int) $active_id );
 
2382
 
2383
  return apply_filters( 'bbp_update_topic_last_active_id', (int) $active_id, $topic_id );
2384
  }
@@ -2399,18 +2381,21 @@ function bbp_update_topic_last_active_id( $topic_id = 0, $active_id = 0 ) {
2399
  function bbp_update_topic_last_active_time( $topic_id = 0, $new_time = '' ) {
2400
 
2401
  // If it's a reply, then get the parent (topic id)
2402
- if ( bbp_is_reply( $topic_id ) )
2403
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2404
- else
2405
  $topic_id = bbp_get_topic_id( $topic_id );
 
2406
 
2407
  // Check time and use current if empty
2408
- if ( empty( $new_time ) )
2409
  $new_time = get_post_field( 'post_date', bbp_get_public_child_last_id( $topic_id, bbp_get_reply_post_type() ) );
 
2410
 
2411
  // Update only if published
2412
- if ( !empty( $new_time ) )
2413
  update_post_meta( $topic_id, '_bbp_last_active_time', $new_time );
 
2414
 
2415
  return apply_filters( 'bbp_update_topic_last_active_time', $new_time, $topic_id );
2416
  }
@@ -2444,16 +2429,19 @@ function bbp_update_topic_last_reply_id( $topic_id = 0, $reply_id = 0 ) {
2444
  $topic_id = bbp_get_topic_id( $topic_id );
2445
  }
2446
 
2447
- if ( empty( $reply_id ) )
2448
  $reply_id = bbp_get_public_child_last_id( $topic_id, bbp_get_reply_post_type() );
 
2449
 
2450
  // Adjust last_id's based on last_reply post_type
2451
- if ( empty( $reply_id ) || !bbp_is_reply( $reply_id ) )
2452
  $reply_id = 0;
 
2453
 
2454
  // Update if reply is published
2455
- if ( bbp_is_reply_published( $reply_id ) )
2456
  update_post_meta( $topic_id, '_bbp_last_reply_id', (int) $reply_id );
 
2457
 
2458
  return apply_filters( 'bbp_update_topic_last_reply_id', (int) $reply_id, $topic_id );
2459
  }
@@ -2481,12 +2469,13 @@ function bbp_update_topic_voice_count( $topic_id = 0 ) {
2481
  global $wpdb;
2482
 
2483
  // If it's a reply, then get the parent (topic id)
2484
- if ( bbp_is_reply( $topic_id ) )
2485
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2486
- elseif ( bbp_is_topic( $topic_id ) )
2487
  $topic_id = bbp_get_topic_id( $topic_id );
2488
- else
2489
  return;
 
2490
 
2491
  // Query the DB to get voices in this topic
2492
  $voices = $wpdb->get_col( $wpdb->prepare( "SELECT COUNT( DISTINCT post_author ) FROM {$wpdb->posts} WHERE ( post_parent = %d AND post_status = '%s' AND post_type = '%s' ) OR ( ID = %d AND post_type = '%s' );", $topic_id, bbp_get_public_status_id(), bbp_get_reply_post_type(), $topic_id, bbp_get_topic_post_type() ) );
@@ -2523,12 +2512,13 @@ function bbp_update_topic_anonymous_reply_count( $topic_id = 0 ) {
2523
  global $wpdb;
2524
 
2525
  // If it's a reply, then get the parent (topic id)
2526
- if ( bbp_is_reply( $topic_id ) )
2527
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2528
- elseif ( bbp_is_topic( $topic_id ) )
2529
  $topic_id = bbp_get_topic_id( $topic_id );
2530
- else
2531
  return;
 
2532
 
2533
  $anonymous_replies = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( ID ) FROM {$wpdb->posts} WHERE ( post_parent = %d AND post_status = '%s' AND post_type = '%s' AND post_author = 0 ) OR ( ID = %d AND post_type = '%s' AND post_author = 0 );", $topic_id, bbp_get_public_status_id(), bbp_get_reply_post_type(), $topic_id, bbp_get_topic_post_type() ) );
2534
 
@@ -2555,27 +2545,27 @@ function bbp_update_topic_anonymous_reply_count( $topic_id = 0 ) {
2555
  * @return mixed False on failure, true on success
2556
  */
2557
  function bbp_update_topic_revision_log( $args = '' ) {
2558
- $defaults = array (
 
 
2559
  'reason' => '',
2560
  'topic_id' => 0,
2561
  'author_id' => 0,
2562
  'revision_id' => 0
2563
- );
2564
- $r = bbp_parse_args( $args, $defaults, 'update_topic_revision_log' );
2565
- extract( $r );
2566
 
2567
  // Populate the variables
2568
- $reason = bbp_format_revision_reason( $reason );
2569
- $topic_id = bbp_get_topic_id( $topic_id );
2570
- $author_id = bbp_get_user_id ( $author_id, false, true );
2571
- $revision_id = (int) $revision_id;
2572
 
2573
  // Get the logs and append the new one to those
2574
- $revision_log = bbp_get_topic_raw_revision_log( $topic_id );
2575
- $revision_log[$revision_id] = array( 'author' => $author_id, 'reason' => $reason );
2576
 
2577
  // Finally, update
2578
- return update_post_meta( $topic_id, '_bbp_revision_log', $revision_log );
2579
  }
2580
 
2581
  /** Topic Actions *************************************************************/
@@ -2700,6 +2690,44 @@ function bbp_spam_topic( $topic_id = 0 ) {
2700
  // Execute pre spam code
2701
  do_action( 'bbp_spam_topic', $topic_id );
2702
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2703
  // Add the original post status as post meta for future restoration
2704
  add_post_meta( $topic_id, '_bbp_spam_meta_status', $topic['post_status'] );
2705
 
@@ -2771,17 +2799,25 @@ function bbp_unspam_topic( $topic_id = 0 ) {
2771
  // Execute pre unspam code
2772
  do_action( 'bbp_unspam_topic', $topic_id );
2773
 
2774
- // Get pre spam status
2775
- $topic_status = get_post_meta( $topic_id, '_bbp_spam_meta_status', true );
2776
 
2777
- // Set post status to pre spam
2778
- $topic['post_status'] = $topic_status;
2779
 
2780
- // Delete pre spam meta
2781
- delete_post_meta( $topic_id, '_bbp_spam_meta_status' );
2782
 
2783
- // No revisions
2784
- remove_action( 'pre_post_update', 'wp_save_post_revision' );
 
 
 
 
 
 
 
 
 
2785
 
2786
  // Get pre-spam topic tags
2787
  $terms = get_post_meta( $topic_id, '_bbp_spam_topic_tags', true );
@@ -2796,6 +2832,20 @@ function bbp_unspam_topic( $topic_id = 0 ) {
2796
  delete_post_meta( $topic_id, '_bbp_spam_topic_tags' );
2797
  }
2798
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2799
  // Update the topic
2800
  $topic_id = wp_insert_post( $topic );
2801
 
@@ -2941,15 +2991,19 @@ function bbp_delete_topic( $topic_id = 0 ) {
2941
  do_action( 'bbp_delete_topic', $topic_id );
2942
 
2943
  // Topic is being permanently deleted, so its replies gotta go too
2944
- if ( $replies = new WP_Query( array(
 
2945
  'suppress_filters' => true,
2946
  'post_type' => bbp_get_reply_post_type(),
2947
- 'post_status' => 'any',
2948
  'post_parent' => $topic_id,
2949
  'posts_per_page' => -1,
2950
  'nopaging' => true,
2951
  'fields' => 'id=>parent'
2952
- ) ) ) {
 
 
 
2953
  foreach ( $replies->posts as $reply ) {
2954
  wp_delete_post( $reply->ID, true );
2955
  }
@@ -2957,6 +3011,9 @@ function bbp_delete_topic( $topic_id = 0 ) {
2957
  // Reset the $post global
2958
  wp_reset_postdata();
2959
  }
 
 
 
2960
  }
2961
 
2962
  /**
@@ -2983,7 +3040,7 @@ function bbp_trash_topic( $topic_id = 0 ) {
2983
  do_action( 'bbp_trash_topic', $topic_id );
2984
 
2985
  // Topic is being trashed, so its replies are trashed too
2986
- if ( $replies = new WP_Query( array(
2987
  'suppress_filters' => true,
2988
  'post_type' => bbp_get_reply_post_type(),
2989
  'post_status' => bbp_get_public_status_id(),
@@ -2991,7 +3048,9 @@ function bbp_trash_topic( $topic_id = 0 ) {
2991
  'posts_per_page' => -1,
2992
  'nopaging' => true,
2993
  'fields' => 'id=>parent'
2994
- ) ) ) {
 
 
2995
 
2996
  // Prevent debug notices
2997
  $pre_trashed_replies = array();
@@ -3010,6 +3069,9 @@ function bbp_trash_topic( $topic_id = 0 ) {
3010
  // Reset the $post global
3011
  wp_reset_postdata();
3012
  }
 
 
 
3013
  }
3014
 
3015
  /**
@@ -3243,7 +3305,7 @@ function bbp_display_topics_feed_rss2( $topics_query = array() ) {
3243
  <description><?php //?></description>
3244
  <pubDate><?php echo mysql2date( 'D, d M Y H:i:s O', current_time( 'mysql' ), false ); ?></pubDate>
3245
  <generator>http://bbpress.org/?v=<?php bbp_version(); ?></generator>
3246
- <language><?php echo get_option( 'rss_language' ); ?></language>
3247
 
3248
  <?php do_action( 'bbp_feed_head' ); ?>
3249
 
28
  */
29
  function bbp_insert_topic( $topic_data = array(), $topic_meta = array() ) {
30
 
31
+ // Parse arguments against default values
32
+ $topic_data = bbp_parse_args( $topic_data, array(
33
  'post_parent' => 0, // forum ID
34
  'post_status' => bbp_get_public_status_id(),
35
  'post_type' => bbp_get_topic_post_type(),
39
  'post_title' => '',
40
  'comment_status' => 'closed',
41
  'menu_order' => 0,
42
+ ), 'insert_topic' );
 
 
 
43
 
44
  // Insert topic
45
  $topic_id = wp_insert_post( $topic_data );
48
  if ( empty( $topic_id ) )
49
  return false;
50
 
51
+ // Parse arguments against default values
52
+ $topic_meta = bbp_parse_args( $topic_meta, array(
53
  'author_ip' => bbp_current_author_ip(),
54
  'forum_id' => 0,
55
  'topic_id' => $topic_id,
59
  'last_reply_id' => 0,
60
  'last_active_id' => $topic_id,
61
  'last_active_time' => get_post_field( 'post_date', $topic_id, 'db' ),
62
+ ), 'insert_topic_meta' );
 
 
 
63
 
64
  // Insert topic meta
65
  foreach ( $topic_meta as $meta_key => $meta_value )
79
  /**
80
  * Handles the front end topic submission
81
  *
82
+ * @param string $action The requested action to compare this function to
83
  * @uses bbPress:errors::add() To log various error messages
84
  * @uses bbp_verify_nonce_request() To verify the nonce and check the referer
85
  * @uses bbp_is_anonymous() To check if an anonymous post is being made
109
  * @uses bbPress::errors::get_error_messages() To get the {@link WP_Error} error
110
  * messages
111
  */
112
+ function bbp_new_topic_handler( $action = '' ) {
 
 
 
 
113
 
114
  // Bail if action is not bbp-new-topic
115
+ if ( 'bbp-new-topic' !== $action )
116
  return;
117
 
118
  // Nonce check
343
  /** Redirect **********************************************************/
344
 
345
  // Redirect to
346
+ $redirect_to = bbp_get_redirect_to();
347
 
348
  // Get the topic URL
349
  $redirect_url = bbp_get_topic_permalink( $topic_id, $redirect_to );
382
  /**
383
  * Handles the front end edit topic submission
384
  *
385
+ * @param string $action The requested action to compare this function to
386
  * @uses bbPress:errors::add() To log various error messages
387
  * @uses bbp_get_topic() To get the topic
388
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
414
  * @uses bbPress::errors::get_error_messages() To get the {@link WP_Error} error
415
  * messages
416
  */
417
+ function bbp_edit_topic_handler( $action = '' ) {
 
 
 
 
418
 
419
  // Bail if action is not bbp-edit-topic
420
+ if ( 'bbp-edit-topic' !== $action )
421
  return;
422
 
423
  // Define local variable(s)
613
 
614
  // Toggle revisions back on
615
  if ( true === $revisions_removed ) {
616
+ $revisions_removed = false;
617
  add_post_type_support( bbp_get_topic_post_type(), 'revisions' );
618
  }
619
 
681
  /** Redirect **********************************************************/
682
 
683
  // Redirect to
684
+ $redirect_to = bbp_get_redirect_to();
685
 
686
  // View all?
687
  $view_all = bbp_get_view_all();
717
  *
718
  * @param int $topic_id Optional. Topic id
719
  * @param int $forum_id Optional. Forum id
720
+ * @param bool|array $anonymous_data Optional logged-out user data.
 
721
  * @param int $author_id Author id
722
  * @param bool $is_edit Optional. Is the post being edited? Defaults to false.
723
  * @uses bbp_get_topic_id() To get the topic id
765
  // Check bbp_filter_anonymous_post_data() for sanitization.
766
  if ( !empty( $anonymous_data ) && is_array( $anonymous_data ) ) {
767
 
768
+ // Parse arguments against default values
769
+ $r = bbp_parse_args( $anonymous_data, array(
770
  'bbp_anonymous_name' => '',
771
  'bbp_anonymous_email' => '',
772
  'bbp_anonymous_website' => '',
773
+ ), 'update_topic' );
 
774
 
775
  // Update all anonymous metas
776
  foreach( $r as $anon_key => $anon_value ) {
1025
  *
1026
  * @since bbPress (r2756)
1027
  *
1028
+ * @param string $action The requested action to compare this function to
1029
  * @uses bbPress:errors::add() To log various error messages
1030
  * @uses bbp_get_topic() To get the topics
1031
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
1057
  * @uses bbp_get_topic_permalink() To get the topic permalink
1058
  * @uses wp_safe_redirect() To redirect to the topic link
1059
  */
1060
+ function bbp_merge_topic_handler( $action = '' ) {
 
 
 
 
1061
 
1062
  // Bail if action is not bbp-merge-topic
1063
+ if ( 'bbp-merge-topic' !== $action )
1064
  return;
1065
 
1066
  // Define local variable(s)
1307
  *
1308
  * @since bbPress (r2756)
1309
  *
1310
+ * @param string $action The requested action to compare this function to
1311
  * @uses bbPress:errors::add() To log various error messages
1312
  * @uses bbp_get_reply() To get the reply
1313
  * @uses bbp_get_topic() To get the topics
1339
  * @uses bbp_get_topic_permalink() To get the topic permalink
1340
  * @uses wp_safe_redirect() To redirect to the topic link
1341
  */
1342
+ function bbp_split_topic_handler( $action = '' ) {
 
 
 
 
1343
 
1344
  // Bail if action is not 'bbp-split-topic'
1345
+ if ( 'bbp-split-topic' !== $action )
1346
  return;
1347
 
1348
  global $wpdb;
1650
  function bbp_split_topic_count( $from_reply_id, $source_topic_id, $destination_topic_id ) {
1651
 
1652
  // Forum Topic Counts
1653
+ bbp_update_forum_topic_count( bbp_get_topic_forum_id( $destination_topic_id ) );
1654
 
1655
  // Forum Reply Counts
1656
+ bbp_update_forum_reply_count( bbp_get_topic_forum_id( $destination_topic_id ) );
1657
 
1658
  // Topic Reply Counts
1659
  bbp_update_topic_reply_count( $source_topic_id );
1675
  *
1676
  * @since bbPress (r2768)
1677
  *
1678
+ * @param string $action The requested action to compare this function to
1679
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
1680
  * @uses current_user_can() To check if the current user can edit/delete tags
1681
  * @uses bbPress::errors::add() To log the error messages
1689
  * @uses is_wp_error() To check if the value retrieved is a {@link WP_Error}
1690
  * @uses wp_safe_redirect() To redirect to the url
1691
  */
1692
+ function bbp_edit_topic_tag_handler( $action = '' ) {
 
 
 
 
1693
 
1694
  // Bail if required POST actions aren't passed
1695
+ if ( empty( $_POST['tag-id'] ) )
1696
  return;
1697
 
1698
  // Setup possible get actions
1703
  );
1704
 
1705
  // Bail if actions aren't meant for this function
1706
+ if ( !in_array( $action, $possible_actions ) )
1707
  return;
1708
 
1709
  // Setup vars
 
1710
  $tag_id = (int) $_POST['tag-id'];
1711
  $tag = get_term( $tag_id, bbp_get_topic_tag_tax_id() );
1712
 
1902
  *
1903
  * @since bbPress (r2727)
1904
  *
1905
+ * @param string $action The requested action to compare this function to
1906
  * @uses bbp_get_topic() To get the topic
1907
  * @uses current_user_can() To check if the user is capable of editing or
1908
  * deleting the topic
1928
  * @uses wp_safe_redirect() To redirect to the topic
1929
  * @uses bbPress::errors:add() To log the error messages
1930
  */
1931
+ function bbp_toggle_topic_handler( $action = '' ) {
 
 
 
 
1932
 
1933
  // Bail if required GET actions aren't passed
1934
+ if ( empty( $_GET['topic_id'] ) )
1935
  return;
1936
 
1937
  // Setup possible get actions
1943
  );
1944
 
1945
  // Bail if actions aren't meant for this function
1946
+ if ( !in_array( $action, $possible_actions ) )
1947
  return;
1948
 
1949
  $failure = ''; // Empty failure string
1950
  $view_all = false; // Assume not viewing all
 
1951
  $topic_id = (int) $_GET['topic_id']; // What's the topic id?
1952
  $success = false; // Flag
1953
  $post_data = array( 'ID' => $topic_id ); // Prelim array
2156
 
2157
  // Get counts
2158
  $topic_id = bbp_get_topic_id( $topic_id );
2159
+ $reply_count = bbp_get_topic_reply_count( $topic_id, true );
2160
  $new_count = (int) $reply_count + (int) $difference;
2161
 
2162
  // Update this topic id's reply count
2182
 
2183
  // Get counts
2184
  $topic_id = bbp_get_topic_id( $topic_id );
2185
+ $reply_count = bbp_get_topic_reply_count_hidden( $topic_id, true );
2186
  $new_count = (int) $reply_count + (int) $difference;
2187
 
2188
  // Update this topic id's hidder reply count
2213
  function bbp_update_topic_forum_id( $topic_id = 0, $forum_id = 0 ) {
2214
 
2215
  // If it's a reply, then get the parent (topic id)
2216
+ if ( bbp_is_reply( $topic_id ) ) {
2217
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2218
+ } else {
2219
  $topic_id = bbp_get_topic_id( $topic_id );
2220
+ }
2221
 
2222
+ if ( empty( $forum_id ) ) {
2223
  $forum_id = get_post_field( 'post_parent', $topic_id );
2224
+ }
2225
 
2226
  update_post_meta( $topic_id, '_bbp_forum_id', (int) $forum_id );
2227
 
2267
  function bbp_update_topic_reply_count( $topic_id = 0, $reply_count = 0 ) {
2268
 
2269
  // If it's a reply, then get the parent (topic id)
2270
+ if ( bbp_is_reply( $topic_id ) ) {
2271
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2272
+ } else {
2273
  $topic_id = bbp_get_topic_id( $topic_id );
2274
+ }
2275
 
2276
  // Get replies of topic if not passed
2277
+ if ( empty( $reply_count ) ) {
2278
  $reply_count = bbp_get_public_child_count( $topic_id, bbp_get_reply_post_type() );
2279
+ }
2280
 
2281
  update_post_meta( $topic_id, '_bbp_reply_count', (int) $reply_count );
2282
 
2305
  global $wpdb;
2306
 
2307
  // If it's a reply, then get the parent (topic id)
2308
+ if ( bbp_is_reply( $topic_id ) ) {
2309
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2310
+ } else {
2311
  $topic_id = bbp_get_topic_id( $topic_id );
2312
+ }
2313
 
2314
  // Get replies of topic
2315
+ if ( empty( $reply_count ) ) {
2316
  $reply_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM {$wpdb->posts} WHERE post_parent = %d AND post_status IN ( '" . join( '\',\'', array( bbp_get_trash_status_id(), bbp_get_spam_status_id() ) ) . "') AND post_type = '%s';", $topic_id, bbp_get_reply_post_type() ) );
2317
+ }
2318
 
2319
  update_post_meta( $topic_id, '_bbp_reply_count_hidden', (int) $reply_count );
2320
 
2342
  function bbp_update_topic_last_active_id( $topic_id = 0, $active_id = 0 ) {
2343
 
2344
  // If it's a reply, then get the parent (topic id)
2345
+ if ( bbp_is_reply( $topic_id ) ) {
2346
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2347
+ } else {
2348
  $topic_id = bbp_get_topic_id( $topic_id );
2349
+ }
2350
 
2351
+ if ( empty( $active_id ) ) {
2352
  $active_id = bbp_get_public_child_last_id( $topic_id, bbp_get_reply_post_type() );
2353
+ }
2354
 
2355
  // Adjust last_id's based on last_reply post_type
2356
+ if ( empty( $active_id ) || !bbp_is_reply( $active_id ) ) {
2357
  $active_id = $topic_id;
2358
+ }
2359
 
2360
  // Update only if published
2361
+ if ( bbp_get_public_status_id() == get_post_status( $active_id ) ) {
2362
  update_post_meta( $topic_id, '_bbp_last_active_id', (int) $active_id );
2363
+ }
2364
 
2365
  return apply_filters( 'bbp_update_topic_last_active_id', (int) $active_id, $topic_id );
2366
  }
2381
  function bbp_update_topic_last_active_time( $topic_id = 0, $new_time = '' ) {
2382
 
2383
  // If it's a reply, then get the parent (topic id)
2384
+ if ( bbp_is_reply( $topic_id ) ) {
2385
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2386
+ } else {
2387
  $topic_id = bbp_get_topic_id( $topic_id );
2388
+ }
2389
 
2390
  // Check time and use current if empty
2391
+ if ( empty( $new_time ) ) {
2392
  $new_time = get_post_field( 'post_date', bbp_get_public_child_last_id( $topic_id, bbp_get_reply_post_type() ) );
2393
+ }
2394
 
2395
  // Update only if published
2396
+ if ( !empty( $new_time ) ) {
2397
  update_post_meta( $topic_id, '_bbp_last_active_time', $new_time );
2398
+ }
2399
 
2400
  return apply_filters( 'bbp_update_topic_last_active_time', $new_time, $topic_id );
2401
  }
2429
  $topic_id = bbp_get_topic_id( $topic_id );
2430
  }
2431
 
2432
+ if ( empty( $reply_id ) ) {
2433
  $reply_id = bbp_get_public_child_last_id( $topic_id, bbp_get_reply_post_type() );
2434
+ }
2435
 
2436
  // Adjust last_id's based on last_reply post_type
2437
+ if ( empty( $reply_id ) || !bbp_is_reply( $reply_id ) ) {
2438
  $reply_id = 0;
2439
+ }
2440
 
2441
  // Update if reply is published
2442
+ if ( bbp_is_reply_published( $reply_id ) ) {
2443
  update_post_meta( $topic_id, '_bbp_last_reply_id', (int) $reply_id );
2444
+ }
2445
 
2446
  return apply_filters( 'bbp_update_topic_last_reply_id', (int) $reply_id, $topic_id );
2447
  }
2469
  global $wpdb;
2470
 
2471
  // If it's a reply, then get the parent (topic id)
2472
+ if ( bbp_is_reply( $topic_id ) ) {
2473
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2474
+ } elseif ( bbp_is_topic( $topic_id ) ) {
2475
  $topic_id = bbp_get_topic_id( $topic_id );
2476
+ } else {
2477
  return;
2478
+ }
2479
 
2480
  // Query the DB to get voices in this topic
2481
  $voices = $wpdb->get_col( $wpdb->prepare( "SELECT COUNT( DISTINCT post_author ) FROM {$wpdb->posts} WHERE ( post_parent = %d AND post_status = '%s' AND post_type = '%s' ) OR ( ID = %d AND post_type = '%s' );", $topic_id, bbp_get_public_status_id(), bbp_get_reply_post_type(), $topic_id, bbp_get_topic_post_type() ) );
2512
  global $wpdb;
2513
 
2514
  // If it's a reply, then get the parent (topic id)
2515
+ if ( bbp_is_reply( $topic_id ) ) {
2516
  $topic_id = bbp_get_reply_topic_id( $topic_id );
2517
+ } elseif ( bbp_is_topic( $topic_id ) ) {
2518
  $topic_id = bbp_get_topic_id( $topic_id );
2519
+ } else {
2520
  return;
2521
+ }
2522
 
2523
  $anonymous_replies = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( ID ) FROM {$wpdb->posts} WHERE ( post_parent = %d AND post_status = '%s' AND post_type = '%s' AND post_author = 0 ) OR ( ID = %d AND post_type = '%s' AND post_author = 0 );", $topic_id, bbp_get_public_status_id(), bbp_get_reply_post_type(), $topic_id, bbp_get_topic_post_type() ) );
2524
 
2545
  * @return mixed False on failure, true on success
2546
  */
2547
  function bbp_update_topic_revision_log( $args = '' ) {
2548
+
2549
+ // Parse arguments against default values
2550
+ $r = bbp_parse_args( $args, array(
2551
  'reason' => '',
2552
  'topic_id' => 0,
2553
  'author_id' => 0,
2554
  'revision_id' => 0
2555
+ ), 'update_topic_revision_log' );
 
 
2556
 
2557
  // Populate the variables
2558
+ $r['reason'] = bbp_format_revision_reason( $r['reason'] );
2559
+ $r['topic_id'] = bbp_get_topic_id( $r['topic_id'] );
2560
+ $r['author_id'] = bbp_get_user_id ( $r['author_id'], false, true );
2561
+ $r['revision_id'] = (int) $r['revision_id'];
2562
 
2563
  // Get the logs and append the new one to those
2564
+ $revision_log = bbp_get_topic_raw_revision_log( $r['topic_id'] );
2565
+ $revision_log[ $r['revision_id'] ] = array( 'author' => $r['author_id'], 'reason' => $r['reason'] );
2566
 
2567
  // Finally, update
2568
+ return update_post_meta( $r['topic_id'], '_bbp_revision_log', $revision_log );
2569
  }
2570
 
2571
  /** Topic Actions *************************************************************/
2690
  // Execute pre spam code
2691
  do_action( 'bbp_spam_topic', $topic_id );
2692
 
2693
+ /** Trash Replies *********************************************************/
2694
+
2695
+ // Topic is being spammed, so its replies are trashed
2696
+ $replies = new WP_Query( array(
2697
+ 'suppress_filters' => true,
2698
+ 'post_type' => bbp_get_reply_post_type(),
2699
+ 'post_status' => bbp_get_public_status_id(),
2700
+ 'post_parent' => $topic_id,
2701
+ 'posts_per_page' => -1,
2702
+ 'nopaging' => true,
2703
+ 'fields' => 'id=>parent'
2704
+ ) );
2705
+
2706
+ if ( !empty( $replies->posts ) ) {
2707
+
2708
+ // Prevent debug notices
2709
+ $pre_spammed_replies = array();
2710
+
2711
+ // Loop through replies, trash them, and add them to array
2712
+ foreach ( $replies->posts as $reply ) {
2713
+ wp_trash_post( $reply->ID );
2714
+ $pre_spammed_replies[] = $reply->ID;
2715
+ }
2716
+
2717
+ // Set a post_meta entry of the replies that were trashed by this action.
2718
+ // This is so we can possibly untrash them, without untrashing replies
2719
+ // that were purposefully trashed before.
2720
+ update_post_meta( $topic_id, '_bbp_pre_spammed_replies', $pre_spammed_replies );
2721
+
2722
+ // Reset the $post global
2723
+ wp_reset_postdata();
2724
+ }
2725
+
2726
+ // Cleanup
2727
+ unset( $replies );
2728
+
2729
+ /** Topic Tags ************************************************************/
2730
+
2731
  // Add the original post status as post meta for future restoration
2732
  add_post_meta( $topic_id, '_bbp_spam_meta_status', $topic['post_status'] );
2733
 
2799
  // Execute pre unspam code
2800
  do_action( 'bbp_unspam_topic', $topic_id );
2801
 
2802
+ /** Untrash Replies *******************************************************/
 
2803
 
2804
+ // Get the replies that were not previously trashed
2805
+ $pre_spammed_replies = get_post_meta( $topic_id, '_bbp_pre_spammed_replies', true );
2806
 
2807
+ // There are replies to untrash
2808
+ if ( !empty( $pre_spammed_replies ) ) {
2809
 
2810
+ // Maybe reverse the trashed replies array
2811
+ if ( is_array( $pre_spammed_replies ) )
2812
+ $pre_spammed_replies = array_reverse( $pre_spammed_replies );
2813
+
2814
+ // Loop through replies
2815
+ foreach ( (array) $pre_spammed_replies as $reply ) {
2816
+ wp_untrash_post( $reply );
2817
+ }
2818
+ }
2819
+
2820
+ /** Topic Tags ************************************************************/
2821
 
2822
  // Get pre-spam topic tags
2823
  $terms = get_post_meta( $topic_id, '_bbp_spam_topic_tags', true );
2832
  delete_post_meta( $topic_id, '_bbp_spam_topic_tags' );
2833
  }
2834
 
2835
+ /** Topic Status **********************************************************/
2836
+
2837
+ // Get pre spam status
2838
+ $topic_status = get_post_meta( $topic_id, '_bbp_spam_meta_status', true );
2839
+
2840
+ // Set post status to pre spam
2841
+ $topic['post_status'] = $topic_status;
2842
+
2843
+ // Delete pre spam meta
2844
+ delete_post_meta( $topic_id, '_bbp_spam_meta_status' );
2845
+
2846
+ // No revisions
2847
+ remove_action( 'pre_post_update', 'wp_save_post_revision' );
2848
+
2849
  // Update the topic
2850
  $topic_id = wp_insert_post( $topic );
2851
 
2991
  do_action( 'bbp_delete_topic', $topic_id );
2992
 
2993
  // Topic is being permanently deleted, so its replies gotta go too
2994
+ // Note that we get all post statuses here
2995
+ $replies = new WP_Query( array(
2996
  'suppress_filters' => true,
2997
  'post_type' => bbp_get_reply_post_type(),
2998
+ 'post_status' => array_keys( get_post_stati() ),
2999
  'post_parent' => $topic_id,
3000
  'posts_per_page' => -1,
3001
  'nopaging' => true,
3002
  'fields' => 'id=>parent'
3003
+ ) );
3004
+
3005
+ // Loop through and delete child replies
3006
+ if ( ! empty( $replies->posts ) ) {
3007
  foreach ( $replies->posts as $reply ) {
3008
  wp_delete_post( $reply->ID, true );
3009
  }
3011
  // Reset the $post global
3012
  wp_reset_postdata();
3013
  }
3014
+
3015
+ // Cleanup
3016
+ unset( $replies );
3017
  }
3018
 
3019
  /**
3040
  do_action( 'bbp_trash_topic', $topic_id );
3041
 
3042
  // Topic is being trashed, so its replies are trashed too
3043
+ $replies = new WP_Query( array(
3044
  'suppress_filters' => true,
3045
  'post_type' => bbp_get_reply_post_type(),
3046
  'post_status' => bbp_get_public_status_id(),
3048
  'posts_per_page' => -1,
3049
  'nopaging' => true,
3050
  'fields' => 'id=>parent'
3051
+ ) );
3052
+
3053
+ if ( !empty( $replies->posts ) ) {
3054
 
3055
  // Prevent debug notices
3056
  $pre_trashed_replies = array();
3069
  // Reset the $post global
3070
  wp_reset_postdata();
3071
  }
3072
+
3073
+ // Cleanup
3074
+ unset( $replies );
3075
  }
3076
 
3077
  /**
3305
  <description><?php //?></description>
3306
  <pubDate><?php echo mysql2date( 'D, d M Y H:i:s O', current_time( 'mysql' ), false ); ?></pubDate>
3307
  <generator>http://bbpress.org/?v=<?php bbp_version(); ?></generator>
3308
+ <language><?php bloginfo_rss( 'language' ); ?></language>
3309
 
3310
  <?php do_action( 'bbp_feed_head' ); ?>
3311
 
includes/topics/template-tags.php CHANGED
@@ -84,23 +84,17 @@ function bbp_show_lead_topic( $show_lead = false ) {
84
  function bbp_has_topics( $args = '' ) {
85
  global $wp_rewrite;
86
 
87
- // What are the default allowed statuses (based on user caps)
88
- if ( bbp_get_view_all() ) {
89
- $post_statuses = array( bbp_get_public_status_id(), bbp_get_closed_status_id(), bbp_get_spam_status_id(), bbp_get_trash_status_id() );
90
- } else {
91
- $post_statuses = array( bbp_get_public_status_id(), bbp_get_closed_status_id() );
92
- }
93
 
 
94
  $default_topic_search = !empty( $_REQUEST['ts'] ) ? $_REQUEST['ts'] : false;
95
  $default_show_stickies = (bool) ( bbp_is_single_forum() || bbp_is_topic_archive() ) && ( false === $default_topic_search );
96
  $default_post_parent = bbp_is_single_forum() ? bbp_get_forum_id() : 'any';
97
- $default_post_status = join( ',', $post_statuses );
98
 
99
  // Default argument array
100
  $default = array(
101
  'post_type' => bbp_get_topic_post_type(), // Narrow query down to bbPress topics
102
  'post_parent' => $default_post_parent, // Forum ID
103
- 'post_status' => $default_post_status, // Post Status
104
  'meta_key' => '_bbp_last_active_time', // Make sure topic has some last activity time
105
  'orderby' => 'meta_value', // 'meta_value', 'author', 'date', 'title', 'modified', 'parent', rand',
106
  'order' => 'DESC', // 'ASC', 'DESC'
@@ -111,36 +105,63 @@ function bbp_has_topics( $args = '' ) {
111
  'max_num_pages' => false, // Maximum number of pages to show
112
  );
113
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  // Maybe query for topic tags
115
  if ( bbp_is_topic_tag() ) {
116
  $default['term'] = bbp_get_topic_tag_slug();
117
  $default['taxonomy'] = bbp_get_topic_tag_tax_id();
118
  }
119
- $bbp_t = bbp_parse_args( $args, $default, 'has_topics' );
120
 
121
- // Extract the query variables
122
- extract( $bbp_t );
 
 
123
 
124
  // Get bbPress
125
  $bbp = bbpress();
126
 
127
  // Call the query
128
- $bbp->topic_query = new WP_Query( $bbp_t );
129
 
130
  // Set post_parent back to 0 if originally set to 'any'
131
- if ( 'any' == $bbp_t['post_parent'] )
132
- $bbp_t['post_parent'] = $post_parent = 0;
133
 
134
  // Limited the number of pages shown
135
- if ( !empty( $max_num_pages ) )
136
- $bbp->topic_query->max_num_pages = $max_num_pages;
 
 
137
 
138
  // Put sticky posts at the top of the posts array
139
- if ( !empty( $show_stickies ) && $paged <= 1 ) {
140
 
141
  // Get super stickies and stickies in this forum
142
  $stickies = bbp_get_super_stickies();
143
- $stickies = !empty( $post_parent ) ? array_merge( $stickies, bbp_get_stickies( $post_parent ) ) : $stickies;
144
  $stickies = array_unique( $stickies );
145
 
146
  // We have stickies
@@ -174,8 +195,8 @@ function bbp_has_topics( $args = '' ) {
174
  }
175
 
176
  // If any posts have been excluded specifically, Ignore those that are sticky.
177
- if ( !empty( $stickies ) && !empty( $post__not_in ) ) {
178
- $stickies = array_diff( $stickies, $post__not_in );
179
  }
180
 
181
  // Fetch sticky posts that weren't in the query results
@@ -185,13 +206,21 @@ function bbp_has_topics( $args = '' ) {
185
  $sticky_query = array(
186
  'post_type' => bbp_get_topic_post_type(),
187
  'post_parent' => 'any',
188
- 'post_status' => $default_post_status,
189
  'meta_key' => '_bbp_last_active_time',
190
  'orderby' => 'meta_value',
191
  'order' => 'DESC',
192
  'include' => $stickies
193
  );
194
 
 
 
 
 
 
 
 
 
 
195
  // Get all stickies
196
  $sticky_posts = get_posts( $sticky_query );
197
  if ( !empty( $sticky_posts ) ) {
@@ -222,18 +251,18 @@ function bbp_has_topics( $args = '' ) {
222
  }
223
 
224
  // If no limit to posts per page, set it to the current post_count
225
- if ( -1 == $posts_per_page )
226
- $posts_per_page = $bbp->topic_query->post_count;
227
 
228
  // Add pagination values to query object
229
- $bbp->topic_query->posts_per_page = $posts_per_page;
230
- $bbp->topic_query->paged = $paged;
231
 
232
  // Only add pagination if query returned results
233
  if ( ( (int) $bbp->topic_query->post_count || (int) $bbp->topic_query->found_posts ) && (int) $bbp->topic_query->posts_per_page ) {
234
 
235
  // Limit the number of topics shown based on maximum allowed pages
236
- if ( ( !empty( $max_num_pages ) ) && $bbp->topic_query->found_posts > $bbp->topic_query->max_num_pages * $bbp->topic_query->post_count )
237
  $bbp->topic_query->found_posts = $bbp->topic_query->max_num_pages * $bbp->topic_query->post_count;
238
 
239
  // If pretty permalinks are enabled, make our pagination pretty
@@ -273,7 +302,7 @@ function bbp_has_topics( $args = '' ) {
273
 
274
  // Default
275
  } else {
276
- $base = get_permalink( $post_parent );
277
  }
278
 
279
  // Use pagination base
@@ -288,15 +317,15 @@ function bbp_has_topics( $args = '' ) {
288
  $bbp_topic_pagination = apply_filters( 'bbp_topic_pagination', array (
289
  'base' => $base,
290
  'format' => '',
291
- 'total' => $posts_per_page == $bbp->topic_query->found_posts ? 1 : ceil( (int) $bbp->topic_query->found_posts / (int) $posts_per_page ),
292
  'current' => (int) $bbp->topic_query->paged,
293
- 'prev_text' => '&larr;',
294
- 'next_text' => '&rarr;',
295
  'mid_size' => 1
296
  ) );
297
 
298
  // Add pagination to query object
299
- $bbp->topic_query->pagination_links = paginate_links ( $bbp_topic_pagination );
300
 
301
  // Remove first page from pagination
302
  $bbp->topic_query->pagination_links = str_replace( $wp_rewrite->pagination_base . "/1/'", "'", $bbp->topic_query->pagination_links );
@@ -355,6 +384,7 @@ function bbp_topic_id( $topic_id = 0) {
355
  *
356
  * @param $topic_id Optional. Used to check emptiness
357
  * @uses bbPress::topic_query::post::ID To get the topic id
 
358
  * @uses bbp_is_single_topic() To check if it's a topic page
359
  * @uses bbp_is_topic_edit() To check if it's a topic edit page
360
  * @uses bbp_is_single_reply() To check if it it's a reply page
@@ -373,28 +403,33 @@ function bbp_topic_id( $topic_id = 0) {
373
  $bbp = bbpress();
374
 
375
  // Easy empty checking
376
- if ( !empty( $topic_id ) && is_numeric( $topic_id ) )
377
  $bbp_topic_id = $topic_id;
378
 
379
  // Currently inside a topic loop
380
- elseif ( !empty( $bbp->topic_query->in_the_loop ) && isset( $bbp->topic_query->post->ID ) )
381
  $bbp_topic_id = $bbp->topic_query->post->ID;
382
 
383
- // Currently viewing a forum
384
- elseif ( ( bbp_is_single_topic() || bbp_is_topic_edit() ) && !empty( $bbp->current_topic_id ) )
 
 
 
 
385
  $bbp_topic_id = $bbp->current_topic_id;
386
 
387
- // Currently viewing a topic
388
- elseif ( ( bbp_is_single_topic() || bbp_is_topic_edit() ) && isset( $wp_query->post->ID ) )
389
  $bbp_topic_id = $wp_query->post->ID;
390
 
391
- // Currently viewing a topic
392
- elseif ( bbp_is_single_reply() )
393
  $bbp_topic_id = bbp_get_reply_topic_id();
394
 
395
  // Fallback
396
- else
397
  $bbp_topic_id = 0;
 
398
 
399
  return (int) apply_filters( 'bbp_get_topic_id', (int) $bbp_topic_id, $topic_id );
400
  }
@@ -668,7 +703,7 @@ function bbp_topic_post_date( $topic_id = 0, $humanize = false, $gmt = false ) {
668
  * @param bool $gmt Optional. Use GMT
669
  * @uses bbp_get_topic_id() To get the topic id
670
  * @uses get_post_time() to get the topic post time
671
- * @uses bbp_time_since() to maybe humanize the topic post time
672
  * @return string
673
  */
674
  function bbp_get_topic_post_date( $topic_id = 0, $humanize = false, $gmt = false ) {
@@ -676,10 +711,10 @@ function bbp_topic_post_date( $topic_id = 0, $humanize = false, $gmt = false ) {
676
 
677
  // 4 days, 4 hours ago
678
  if ( !empty( $humanize ) ) {
679
- $gmt = !empty( $gmt ) ? 'G' : 'U';
680
- $date = get_post_time( $gmt, $topic_id );
681
  $time = false; // For filter below
682
- $result = bbp_time_since( $date );
683
 
684
  // August 4, 2012 at 2:37 pm
685
  } else {
@@ -729,22 +764,22 @@ function bbp_topic_pagination( $args = '' ) {
729
  function bbp_get_topic_pagination( $args = '' ) {
730
  global $wp_rewrite;
731
 
732
- $defaults = array(
 
733
  'topic_id' => bbp_get_topic_id(),
734
  'before' => '<span class="bbp-topic-pagination">',
735
  'after' => '</span>',
736
- );
737
- $r = bbp_parse_args( $args, $defaults, 'get_topic_pagination' );
738
- extract( $r );
739
 
740
  // If pretty permalinks are enabled, make our pagination pretty
741
- if ( $wp_rewrite->using_permalinks() )
742
- $base = trailingslashit( get_permalink( $topic_id ) ) . user_trailingslashit( $wp_rewrite->pagination_base . '/%#%/' );
743
- else
744
- $base = add_query_arg( 'paged', '%#%', get_permalink( $topic_id ) );
 
745
 
746
  // Get total and add 1 if topic is included in the reply loop
747
- $total = bbp_get_topic_reply_count( $topic_id, true );
748
 
749
  // Bump if topic is in loop
750
  if ( !bbp_show_lead_topic() )
@@ -774,7 +809,7 @@ function bbp_topic_pagination( $args = '' ) {
774
  }
775
 
776
  // Add before and after to pagination links
777
- $pagination_links = $before . $pagination_links . $after;
778
  }
779
 
780
  return apply_filters( 'bbp_get_topic_pagination', $pagination_links, $args );
@@ -1142,10 +1177,11 @@ function bbp_topic_author( $topic_id = 0 ) {
1142
  function bbp_get_topic_author( $topic_id = 0 ) {
1143
  $topic_id = bbp_get_topic_id( $topic_id );
1144
 
1145
- if ( !bbp_is_topic_anonymous( $topic_id ) )
1146
  $author = get_the_author_meta( 'display_name', bbp_get_topic_author_id( $topic_id ) );
1147
- else
1148
  $author = get_post_meta( $topic_id, '_bbp_anonymous_name', true );
 
1149
 
1150
  return apply_filters( 'bbp_get_topic_author', $author, $topic_id );
1151
  }
@@ -1234,7 +1270,11 @@ function bbp_topic_author_display_name( $topic_id = 0 ) {
1234
  if ( empty( $author_name ) )
1235
  $author_name = __( 'Anonymous', 'bbpress' );
1236
 
1237
- return apply_filters( 'bbp_get_topic_author_display_name', esc_attr( $author_name ), $topic_id );
 
 
 
 
1238
  }
1239
 
1240
  /**
@@ -1314,30 +1354,34 @@ function bbp_topic_author_link( $args = '' ) {
1314
  * @return string Author link of topic
1315
  */
1316
  function bbp_get_topic_author_link( $args = '' ) {
1317
- $defaults = array (
 
 
1318
  'post_id' => 0,
1319
  'link_title' => '',
1320
  'type' => 'both',
1321
  'size' => 80,
1322
  'sep' => '&nbsp;',
1323
  'show_role' => false
1324
- );
1325
- $r = bbp_parse_args( $args, $defaults, 'get_topic_author_link' );
1326
- extract( $r );
1327
 
1328
  // Used as topic_id
1329
  if ( is_numeric( $args ) ) {
1330
  $topic_id = bbp_get_topic_id( $args );
1331
  } else {
1332
- $topic_id = bbp_get_topic_id( $post_id );
1333
  }
1334
 
1335
  // Topic ID is good
1336
  if ( !empty( $topic_id ) ) {
1337
 
1338
  // Tweak link title if empty
1339
- if ( empty( $link_title ) ) {
1340
  $link_title = sprintf( !bbp_is_topic_anonymous( $topic_id ) ? __( 'View %s\'s profile', 'bbpress' ) : __( 'Visit %s\'s website', 'bbpress' ), bbp_get_topic_author_display_name( $topic_id ) );
 
 
 
 
1341
  }
1342
 
1343
  $link_title = !empty( $link_title ) ? ' title="' . $link_title . '"' : '';
@@ -1346,17 +1390,17 @@ function bbp_topic_author_link( $args = '' ) {
1346
  $author_links = array();
1347
 
1348
  // Get avatar
1349
- if ( 'avatar' == $type || 'both' == $type ) {
1350
- $author_links['avatar'] = bbp_get_topic_author_avatar( $topic_id, $size );
1351
  }
1352
 
1353
  // Get display name
1354
- if ( 'name' == $type || 'both' == $type ) {
1355
  $author_links['name'] = bbp_get_topic_author_display_name( $topic_id );
1356
  }
1357
 
1358
  // Link class
1359
- $link_class = ' class="bbp-author-' . $type . '"';
1360
 
1361
  // Add links if not anonymous
1362
  if ( empty( $anonymous ) && bbp_user_has_profile( bbp_get_topic_author_id( $topic_id ) ) ) {
@@ -1367,15 +1411,15 @@ function bbp_topic_author_link( $args = '' ) {
1367
  $author_link[] = sprintf( '<a href="%1$s"%2$s%3$s>%4$s</a>', $author_url, $link_title, $link_class, $link_text );
1368
  }
1369
 
1370
- if ( true === $show_role ) {
1371
  $author_link[] = bbp_get_topic_author_role( array( 'topic_id' => $topic_id ) );
1372
  }
1373
 
1374
- $author_link = join( $sep, $author_link );
1375
 
1376
  // No links if anonymous
1377
  } else {
1378
- $author_link = join( $sep, $author_links );
1379
  }
1380
 
1381
  } else {
@@ -1509,20 +1553,20 @@ function bbp_topic_author_role( $args = array() ) {
1509
  * @return string topic author role
1510
  */
1511
  function bbp_get_topic_author_role( $args = array() ) {
1512
- $defaults = array(
 
 
1513
  'topic_id' => 0,
1514
  'class' => 'bbp-author-role',
1515
  'before' => '',
1516
  'after' => ''
1517
- );
1518
- $args = bbp_parse_args( $args, $defaults, 'get_topic_author_role' );
1519
- extract( $args, EXTR_SKIP );
1520
 
1521
- $topic_id = bbp_get_topic_id( $topic_id );
1522
  $role = bbp_get_user_display_role( bbp_get_topic_author_id( $topic_id ) );
1523
- $author_role = sprintf( '%1$s<div class="%2$s">%3$s</div>%4$s', $before, $class, $role, $after );
1524
 
1525
- return apply_filters( 'bbp_get_topic_author_role', $author_role, $args );
1526
  }
1527
 
1528
 
@@ -1781,10 +1825,11 @@ function bbp_topic_last_reply_url( $topic_id = 0 ) {
1781
  $topic_id = bbp_get_topic_id( $topic_id );
1782
  $reply_id = bbp_get_topic_last_reply_id( $topic_id );
1783
 
1784
- if ( !empty( $reply_id ) && ( $reply_id != $topic_id ) )
1785
  $reply_url = bbp_get_reply_url( $reply_id );
1786
- else
1787
  $reply_url = bbp_get_topic_permalink( $topic_id );
 
1788
 
1789
  return apply_filters( 'bbp_get_topic_last_reply_url', $reply_url );
1790
  }
@@ -1827,7 +1872,7 @@ function bbp_topic_freshness_link( $topic_id = 0 ) {
1827
  else
1828
  $anchor = __( 'No Replies', 'bbpress' );
1829
 
1830
- return apply_filters( 'bbp_get_topic_freshness_link', $anchor, $topic_id );
1831
  }
1832
 
1833
  /**
@@ -2056,13 +2101,12 @@ function bbp_topic_tag_list( $topic_id = 0, $args = '' ) {
2056
  if ( ! bbp_allow_topic_tags() )
2057
  return;
2058
 
2059
- $defaults = array(
 
2060
  'before' => '<div class="bbp-topic-tags"><p>' . __( 'Tagged:', 'bbpress' ) . '&nbsp;',
2061
  'sep' => ', ',
2062
  'after' => '</p></div>'
2063
- );
2064
- $r = bbp_parse_args( $args, $defaults, 'get_topic_tag_list' );
2065
- extract( $r );
2066
 
2067
  $topic_id = bbp_get_topic_id( $topic_id );
2068
 
@@ -2074,8 +2118,8 @@ function bbp_topic_tag_list( $topic_id = 0, $args = '' ) {
2074
 
2075
  // If terms exist, explode them and compile the return value
2076
  if ( !empty( $terms ) ) {
2077
- $terms = implode( $sep, $terms );
2078
- $retval = $before . $terms . $after;
2079
 
2080
  // No terms so return emty string
2081
  } else {
@@ -2084,7 +2128,7 @@ function bbp_topic_tag_list( $topic_id = 0, $args = '' ) {
2084
 
2085
  // Topic is not spam so display a clickable term list
2086
  } else {
2087
- $retval = get_the_term_list( $topic_id, bbp_get_topic_tag_tax_id(), $before, $sep, $after );
2088
  }
2089
 
2090
  return $retval;
@@ -2173,27 +2217,27 @@ function bbp_topic_admin_links( $args = '' ) {
2173
  if ( !bbp_is_single_topic() )
2174
  return;
2175
 
2176
- $defaults = array (
 
2177
  'id' => bbp_get_topic_id(),
2178
  'before' => '<span class="bbp-admin-links">',
2179
  'after' => '</span>',
2180
  'sep' => ' | ',
2181
  'links' => array()
2182
- );
2183
- $r = bbp_parse_args( $args, $defaults, 'get_topic_admin_links' );
2184
 
2185
  if ( !current_user_can( 'edit_topic', $r['id'] ) )
2186
  return;
2187
 
2188
  if ( empty( $r['links'] ) ) {
2189
- $r['links'] = array(
2190
  'edit' => bbp_get_topic_edit_link ( $r ),
2191
  'close' => bbp_get_topic_close_link( $r ),
2192
  'stick' => bbp_get_topic_stick_link( $r ),
2193
  'merge' => bbp_get_topic_merge_link( $r ),
2194
  'trash' => bbp_get_topic_trash_link( $r ),
2195
  'spam' => bbp_get_topic_spam_link ( $r ),
2196
- );
2197
  }
2198
 
2199
  // Check caps for trashing the topic
@@ -2254,16 +2298,16 @@ function bbp_topic_edit_link( $args = '' ) {
2254
  * @return string Topic edit link
2255
  */
2256
  function bbp_get_topic_edit_link( $args = '' ) {
2257
- $defaults = array (
 
 
2258
  'id' => 0,
2259
  'link_before' => '',
2260
  'link_after' => '',
2261
  'edit_text' => __( 'Edit', 'bbpress' )
2262
- );
2263
- $r = bbp_parse_args( $args, $defaults, 'get_topic_edit_link' );
2264
- extract( $r );
2265
 
2266
- $topic = bbp_get_topic( bbp_get_topic_id( (int) $id ) );
2267
 
2268
  // Bypass check if user has caps
2269
  if ( !current_user_can( 'edit_others_topics' ) ) {
@@ -2275,15 +2319,15 @@ function bbp_topic_edit_link( $args = '' ) {
2275
  }
2276
 
2277
  // Get uri
2278
- $uri = bbp_get_topic_edit_url( $id );
2279
 
2280
  // Bail if no uri
2281
  if ( empty( $uri ) )
2282
  return;
2283
 
2284
- $retval = $link_before . '<a href="' . $uri . '">' . $edit_text . '</a>' . $link_after;
2285
 
2286
- return apply_filters( 'bbp_get_topic_edit_link', $retval, $args );
2287
  }
2288
 
2289
  /**
@@ -2378,7 +2422,8 @@ function bbp_topic_trash_link( $args = '' ) {
2378
  */
2379
  function bbp_get_topic_trash_link( $args = '' ) {
2380
 
2381
- $defaults = array (
 
2382
  'id' => 0,
2383
  'link_before' => '',
2384
  'link_after' => '',
@@ -2386,31 +2431,29 @@ function bbp_topic_trash_link( $args = '' ) {
2386
  'trash_text' => __( 'Trash', 'bbpress' ),
2387
  'restore_text' => __( 'Restore', 'bbpress' ),
2388
  'delete_text' => __( 'Delete', 'bbpress' )
2389
- );
2390
- $r = bbp_parse_args( $args, $defaults, 'get_topic_trash_link' );
2391
- extract( $r );
2392
 
2393
  $actions = array();
2394
- $topic = bbp_get_topic( bbp_get_topic_id( (int) $id ) );
2395
 
2396
  if ( empty( $topic ) || !current_user_can( 'delete_topic', $topic->ID ) ) {
2397
  return;
2398
  }
2399
 
2400
  if ( bbp_is_topic_trash( $topic->ID ) ) {
2401
- $actions['untrash'] = '<a title="' . esc_attr__( 'Restore this item from the Trash', 'bbpress' ) . '" href="' . esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'bbp_toggle_topic_trash', 'sub_action' => 'untrash', 'topic_id' => $topic->ID ) ), 'untrash-' . $topic->post_type . '_' . $topic->ID ) ) . '">' . esc_html( $restore_text ) . '</a>';
2402
  } elseif ( EMPTY_TRASH_DAYS ) {
2403
- $actions['trash'] = '<a title="' . esc_attr__( 'Move this item to the Trash', 'bbpress' ) . '" href="' . esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'bbp_toggle_topic_trash', 'sub_action' => 'trash', 'topic_id' => $topic->ID ) ), 'trash-' . $topic->post_type . '_' . $topic->ID ) ) . '">' . esc_html( $trash_text ) . '</a>';
2404
  }
2405
 
2406
  if ( bbp_is_topic_trash( $topic->ID ) || !EMPTY_TRASH_DAYS ) {
2407
- $actions['delete'] = '<a title="' . esc_attr__( 'Delete this item permanently', 'bbpress' ) . '" href="' . esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'bbp_toggle_topic_trash', 'sub_action' => 'delete', 'topic_id' => $topic->ID ) ), 'delete-' . $topic->post_type . '_' . $topic->ID ) ) . '" onclick="return confirm(\'' . esc_js( __( 'Are you sure you want to delete that permanently?', 'bbpress' ) ) . '\' );">' . esc_html( $delete_text ) . '</a>';
2408
  }
2409
 
2410
  // Process the admin links
2411
- $retval = $link_before . implode( $sep, $actions ) . $link_after;
2412
 
2413
- return apply_filters( 'bbp_get_topic_trash_link', $retval, $args );
2414
  }
2415
 
2416
  /**
@@ -2448,28 +2491,28 @@ function bbp_topic_close_link( $args = '' ) {
2448
  * @return string Topic close link
2449
  */
2450
  function bbp_get_topic_close_link( $args = '' ) {
2451
- $defaults = array (
 
 
2452
  'id' => 0,
2453
  'link_before' => '',
2454
  'link_after' => '',
2455
  'sep' => ' | ',
2456
  'close_text' => _x( 'Close', 'Topic Status', 'bbpress' ),
2457
  'open_text' => _x( 'Open', 'Topic Status', 'bbpress' )
2458
- );
2459
- $r = bbp_parse_args( $args, $defaults, 'get_topic_close_link' );
2460
- extract( $r );
2461
 
2462
- $topic = bbp_get_topic( bbp_get_topic_id( (int) $id ) );
2463
 
2464
  if ( empty( $topic ) || !current_user_can( 'moderate', $topic->ID ) )
2465
  return;
2466
 
2467
- $display = bbp_is_topic_open( $topic->ID ) ? $close_text : $open_text;
2468
  $uri = add_query_arg( array( 'action' => 'bbp_toggle_topic_close', 'topic_id' => $topic->ID ) );
2469
  $uri = esc_url( wp_nonce_url( $uri, 'close-topic_' . $topic->ID ) );
2470
- $retval = $link_before . '<a href="' . $uri . '">' . $display . '</a>' . $link_after;
2471
 
2472
- return apply_filters( 'bbp_get_topic_close_link', $retval, $args );
2473
  }
2474
 
2475
  /**
@@ -2509,18 +2552,18 @@ function bbp_topic_stick_link( $args = '' ) {
2509
  * @return string Topic stick link
2510
  */
2511
  function bbp_get_topic_stick_link( $args = '' ) {
2512
- $defaults = array (
 
 
2513
  'id' => 0,
2514
  'link_before' => '',
2515
  'link_after' => '',
2516
  'stick_text' => __( 'Stick', 'bbpress' ),
2517
  'unstick_text' => __( 'Unstick', 'bbpress' ),
2518
  'super_text' => __( 'to front', 'bbpress' ),
2519
- );
2520
- $r = bbp_parse_args( $args, $defaults, 'get_topic_stick_link' );
2521
- extract( $r );
2522
 
2523
- $topic = bbp_get_topic( bbp_get_topic_id( (int) $id ) );
2524
 
2525
  if ( empty( $topic ) || !current_user_can( 'moderate', $topic->ID ) )
2526
  return;
@@ -2530,22 +2573,22 @@ function bbp_topic_stick_link( $args = '' ) {
2530
  $stick_uri = add_query_arg( array( 'action' => 'bbp_toggle_topic_stick', 'topic_id' => $topic->ID ) );
2531
  $stick_uri = esc_url( wp_nonce_url( $stick_uri, 'stick-topic_' . $topic->ID ) );
2532
 
2533
- $stick_display = true == $is_sticky ? $unstick_text : $stick_text;
2534
  $stick_display = '<a href="' . $stick_uri . '">' . $stick_display . '</a>';
2535
 
2536
  if ( empty( $is_sticky ) ) {
2537
  $super_uri = add_query_arg( array( 'action' => 'bbp_toggle_topic_stick', 'topic_id' => $topic->ID, 'super' => 1 ) );
2538
  $super_uri = esc_url( wp_nonce_url( $super_uri, 'stick-topic_' . $topic->ID ) );
2539
 
2540
- $super_display = ' (<a href="' . $super_uri . '">' . $super_text . '</a>)';
2541
  } else {
2542
  $super_display = '';
2543
  }
2544
 
2545
  // Combine the HTML into 1 string
2546
- $retval = $link_before . $stick_display . $super_display . $link_after;
2547
 
2548
- return apply_filters( 'bbp_get_topic_stick_link', $retval, $args );
2549
  }
2550
 
2551
  /**
@@ -2580,22 +2623,22 @@ function bbp_topic_merge_link( $args = '' ) {
2580
  * @return string Topic merge link
2581
  */
2582
  function bbp_get_topic_merge_link( $args = '' ) {
2583
- $defaults = array (
 
 
2584
  'id' => 0,
2585
  'link_before' => '',
2586
  'link_after' => '',
2587
  'merge_text' => __( 'Merge', 'bbpress' ),
2588
- );
2589
- $r = bbp_parse_args( $args, $defaults, 'get_topic_merge_link' );
2590
- extract( $r );
2591
 
2592
- $topic = bbp_get_topic( bbp_get_topic_id( (int) $id ) );
2593
 
2594
  if ( empty( $topic ) || !current_user_can( 'moderate', $topic->ID ) )
2595
  return;
2596
 
2597
  $uri = esc_url( add_query_arg( array( 'action' => 'merge' ), bbp_get_topic_edit_url( $topic->ID ) ) );
2598
- $retval = $link_before . '<a href="' . $uri . '">' . $merge_text . '</a>' . $link_after;
2599
 
2600
  return apply_filters( 'bbp_get_topic_merge_link', $retval, $args );
2601
  }
@@ -2635,28 +2678,28 @@ function bbp_topic_spam_link( $args = '' ) {
2635
  * @return string Topic spam link
2636
  */
2637
  function bbp_get_topic_spam_link( $args = '' ) {
2638
- $defaults = array (
 
 
2639
  'id' => 0,
2640
  'link_before' => '',
2641
  'link_after' => '',
2642
  'sep' => ' | ',
2643
  'spam_text' => __( 'Spam', 'bbpress' ),
2644
  'unspam_text' => __( 'Unspam', 'bbpress' )
2645
- );
2646
- $r = bbp_parse_args( $args, $defaults, 'get_topic_spam_link' );
2647
- extract( $r );
2648
 
2649
- $topic = bbp_get_topic( bbp_get_topic_id( (int) $id ) );
2650
 
2651
  if ( empty( $topic ) || !current_user_can( 'moderate', $topic->ID ) )
2652
  return;
2653
 
2654
- $display = bbp_is_topic_spam( $topic->ID ) ? $unspam_text : $spam_text;
2655
  $uri = add_query_arg( array( 'action' => 'bbp_toggle_topic_spam', 'topic_id' => $topic->ID ) );
2656
  $uri = esc_url( wp_nonce_url( $uri, 'spam-topic_' . $topic->ID ) );
2657
- $retval = $link_before . '<a href="' . $uri . '">' . $display . '</a>' . $link_after;
2658
 
2659
- return apply_filters( 'bbp_get_topic_spam_link', $retval, $args );
2660
  }
2661
 
2662
  /** Topic Pagination **********************************************************/
@@ -2802,26 +2845,25 @@ function bbp_topic_notices() {
2802
  */
2803
  function bbp_topic_type_select( $args = '' ) {
2804
 
2805
- $defaults = array (
 
2806
  'unstick_text' => __( 'Normal', 'bbpress' ),
2807
  'stick_text' => __( 'Sticky', 'bbpress' ),
2808
  'super_text' => __( 'Super Sticky', 'bbpress' ),
2809
  'select_id' => 'bbp_stick_topic',
2810
  'tab' => bbp_get_tab_index(),
2811
  'topic_id' => 0
2812
- );
2813
- $r = bbp_parse_args( $args, $defaults, 'topic_type_select' );
2814
- extract( $r );
2815
 
2816
  // Edit topic
2817
  if ( bbp_is_single_topic() || bbp_is_topic_edit() ) {
2818
 
2819
  // Get current topic id
2820
- $topic_id = bbp_get_topic_id( $topic_id );
2821
 
2822
  // Post value is passed
2823
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST[$select_id] ) ) {
2824
- $sticky_current = $_POST[$select_id];
2825
 
2826
  // Topic is super sticky
2827
  } elseif ( bbp_is_topic_super_sticky( $topic_id ) ) {
@@ -2836,8 +2878,8 @@ function bbp_topic_type_select( $args = '' ) {
2836
  } else {
2837
 
2838
  // Post value is passed
2839
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST[$select_id] ) ) {
2840
- $sticky_current = $_POST[$select_id];
2841
 
2842
  // Default to unstick
2843
  } else {
@@ -2846,19 +2888,19 @@ function bbp_topic_type_select( $args = '' ) {
2846
  }
2847
 
2848
  // Used variables
2849
- $tab = !empty( $tab ) ? ' tabindex="' . $tab . '"' : '';
2850
- $select_id = esc_attr( $select_id );
2851
  $sticky_statuses = array (
2852
- 'unstick' => $unstick_text,
2853
- 'stick' => $stick_text,
2854
- 'super' => $super_text,
2855
  ); ?>
2856
 
2857
  <select name="<?php echo $select_id; ?>" id="<?php echo $select_id; ?>"<?php echo $tab; ?>>
2858
 
2859
  <?php foreach ( $sticky_statuses as $sticky_status => $label ) : ?>
2860
 
2861
- <option value="<?php echo $sticky_status; ?>"<?php selected( $sticky_current, $sticky_status ); ?>><?php echo $label; ?></option>
2862
 
2863
  <?php endforeach; ?>
2864
 
@@ -2904,34 +2946,33 @@ function bbp_single_topic_description( $args = '' ) {
2904
  */
2905
  function bbp_get_single_topic_description( $args = '' ) {
2906
 
2907
- // Default arguments
2908
- $defaults = array (
2909
  'topic_id' => 0,
2910
  'before' => '<div class="bbp-template-notice info"><p class="bbp-topic-description">',
2911
  'after' => '</p></div>',
2912
  'size' => 14
2913
- );
2914
- $r = bbp_parse_args( $args, $defaults, 'get_single_topic_description' );
2915
- extract( $r );
2916
 
2917
  // Validate topic_id
2918
- $topic_id = bbp_get_topic_id( $topic_id );
2919
 
2920
  // Unhook the 'view all' query var adder
2921
  remove_filter( 'bbp_get_topic_permalink', 'bbp_add_view_all' );
2922
 
2923
  // Build the topic description
2924
- $voice_count = bbp_get_topic_voice_count ( $topic_id );
2925
- $reply_count = bbp_get_topic_replies_link ( $topic_id );
2926
- $time_since = bbp_get_topic_freshness_link( $topic_id );
 
2927
 
2928
  // Singular/Plural
2929
- $voice_count = sprintf( _n( '%s voice', '%s voices', $voice_count, 'bbpress' ), $voice_count );
2930
 
2931
  // Topic has replies
2932
  $last_reply = bbp_get_topic_last_active_id( $topic_id );
2933
  if ( !empty( $last_reply ) ) {
2934
- $last_updated_by = bbp_get_author_link( array( 'post_id' => $last_reply, 'size' => $size ) );
2935
  $retstr = sprintf( __( 'This topic contains %1$s, has %2$s, and was last updated by %3$s %4$s.', 'bbpress' ), $reply_count, $voice_count, $last_updated_by, $time_since );
2936
 
2937
  // Topic has no replies
@@ -2947,10 +2988,10 @@ function bbp_single_topic_description( $args = '' ) {
2947
  add_filter( 'bbp_get_topic_permalink', 'bbp_add_view_all' );
2948
 
2949
  // Combine the elements together
2950
- $retstr = $before . $retstr . $after;
2951
 
2952
  // Return filtered result
2953
- return apply_filters( 'bbp_get_single_topic_description', $retstr, $args );
2954
  }
2955
 
2956
  /** Topic Tags ****************************************************************/
@@ -3233,33 +3274,32 @@ function bbp_topic_tag_description( $args = array() ) {
3233
  */
3234
  function bbp_get_topic_tag_description( $args = array() ) {
3235
 
3236
- $defaults = array(
 
3237
  'before' => '<div class="bbp-topic-tag-description"><p>',
3238
  'after' => '</p></div>',
3239
  'tag' => ''
3240
- );
3241
- $r = bbp_parse_args( $args, $defaults, 'get_topic_tag_description' );
3242
- extract( $r );
3243
 
3244
  // Get the term
3245
- if ( ! empty( $tag ) ) {
3246
- $term = get_term_by( 'slug', $tag, bbp_get_topic_tag_tax_id() );
3247
  } else {
3248
- $tag = get_query_var( 'term' );
3249
- $args['tag'] = $tag;
3250
- $term = get_queried_object();
3251
  }
3252
 
3253
  // Add before and after if description exists
3254
  if ( !empty( $term->description ) ) {
3255
- $retval = $before . $term->description . $after;
3256
 
3257
  // No description, no HTML
3258
  } else {
3259
  $retval = '';
3260
  }
3261
 
3262
- return apply_filters( 'bbp_get_topic_tag_description', $retval, $args );
3263
  }
3264
 
3265
  /** Forms *********************************************************************/
@@ -3286,16 +3326,17 @@ function bbp_form_topic_title() {
3286
  function bbp_get_form_topic_title() {
3287
 
3288
  // Get _POST data
3289
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_topic_title'] ) )
3290
  $topic_title = $_POST['bbp_topic_title'];
3291
 
3292
  // Get edit data
3293
- elseif ( bbp_is_topic_edit() )
3294
  $topic_title = bbp_get_global_post_field( 'post_title', 'raw' );
3295
 
3296
  // No data
3297
- else
3298
  $topic_title = '';
 
3299
 
3300
  return apply_filters( 'bbp_get_form_topic_title', esc_attr( $topic_title ) );
3301
  }
@@ -3322,16 +3363,17 @@ function bbp_form_topic_content() {
3322
  function bbp_get_form_topic_content() {
3323
 
3324
  // Get _POST data
3325
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_topic_content'] ) )
3326
  $topic_content = $_POST['bbp_topic_content'];
3327
 
3328
  // Get edit data
3329
- elseif ( bbp_is_topic_edit() )
3330
  $topic_content = bbp_get_global_post_field( 'post_content', 'raw' );
3331
 
3332
  // No data
3333
- else
3334
  $topic_content = '';
 
3335
 
3336
  return apply_filters( 'bbp_get_form_topic_content', esc_textarea( $topic_content ) );
3337
  }
@@ -3451,18 +3493,19 @@ function bbp_form_topic_forum() {
3451
  function bbp_get_form_topic_forum() {
3452
 
3453
  // Get _POST data
3454
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_id'] ) )
3455
  $topic_forum = (int) $_POST['bbp_forum_id'];
3456
 
3457
  // Get edit data
3458
- elseif ( bbp_is_topic_edit() )
3459
  $topic_forum = bbp_get_topic_forum_id();
3460
 
3461
  // No data
3462
- else
3463
  $topic_forum = 0;
 
3464
 
3465
- return apply_filters( 'bbp_get_form_topic_forum', esc_attr( $topic_forum ) );
3466
  }
3467
 
3468
  /**
@@ -3545,13 +3588,15 @@ function bbp_form_topic_log_edit() {
3545
  function bbp_get_form_topic_log_edit() {
3546
 
3547
  // Get _POST data
3548
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_log_topic_edit'] ) )
3549
- $topic_revision = (bool) $_POST['bbp_log_topic_edit'];
3550
 
3551
  // No data
3552
- else
3553
- $topic_revision = false;
 
3554
 
 
3555
  $checked = checked( $topic_revision, true, false );
3556
 
3557
  return apply_filters( 'bbp_get_form_topic_log_edit', $checked, $topic_revision );
@@ -3579,12 +3624,13 @@ function bbp_form_topic_edit_reason() {
3579
  function bbp_get_form_topic_edit_reason() {
3580
 
3581
  // Get _POST data
3582
- if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_topic_edit_reason'] ) )
3583
  $topic_edit_reason = $_POST['bbp_topic_edit_reason'];
3584
 
3585
  // No data
3586
- else
3587
  $topic_edit_reason = '';
 
3588
 
3589
  return apply_filters( 'bbp_get_form_topic_edit_reason', esc_attr( $topic_edit_reason ) );
3590
  }
84
  function bbp_has_topics( $args = '' ) {
85
  global $wp_rewrite;
86
 
87
+ /** Defaults **************************************************************/
 
 
 
 
 
88
 
89
+ // Other defaults
90
  $default_topic_search = !empty( $_REQUEST['ts'] ) ? $_REQUEST['ts'] : false;
91
  $default_show_stickies = (bool) ( bbp_is_single_forum() || bbp_is_topic_archive() ) && ( false === $default_topic_search );
92
  $default_post_parent = bbp_is_single_forum() ? bbp_get_forum_id() : 'any';
 
93
 
94
  // Default argument array
95
  $default = array(
96
  'post_type' => bbp_get_topic_post_type(), // Narrow query down to bbPress topics
97
  'post_parent' => $default_post_parent, // Forum ID
 
98
  'meta_key' => '_bbp_last_active_time', // Make sure topic has some last activity time
99
  'orderby' => 'meta_value', // 'meta_value', 'author', 'date', 'title', 'modified', 'parent', rand',
100
  'order' => 'DESC', // 'ASC', 'DESC'
105
  'max_num_pages' => false, // Maximum number of pages to show
106
  );
107
 
108
+ // What are the default allowed statuses (based on user caps)
109
+ if ( bbp_get_view_all() ) {
110
+
111
+ // Default view=all statuses
112
+ $post_statuses = array(
113
+ bbp_get_public_status_id(),
114
+ bbp_get_closed_status_id(),
115
+ bbp_get_spam_status_id(),
116
+ bbp_get_trash_status_id()
117
+ );
118
+
119
+ // Add support for private status
120
+ if ( current_user_can( 'read_private_topics' ) ) {
121
+ $post_statuses[] = bbp_get_private_status_id();
122
+ }
123
+
124
+ // Join post statuses together
125
+ $default['post_status'] = join( ',', $post_statuses );
126
+
127
+ // Lean on the 'perm' query var value of 'readable' to provide statuses
128
+ } else {
129
+ $default['perm'] = 'readable';
130
+ }
131
+
132
  // Maybe query for topic tags
133
  if ( bbp_is_topic_tag() ) {
134
  $default['term'] = bbp_get_topic_tag_slug();
135
  $default['taxonomy'] = bbp_get_topic_tag_tax_id();
136
  }
 
137
 
138
+ /** Setup *****************************************************************/
139
+
140
+ // Parse arguments against default values
141
+ $r = bbp_parse_args( $args, $default, 'has_topics' );
142
 
143
  // Get bbPress
144
  $bbp = bbpress();
145
 
146
  // Call the query
147
+ $bbp->topic_query = new WP_Query( $r );
148
 
149
  // Set post_parent back to 0 if originally set to 'any'
150
+ if ( 'any' == $r['post_parent'] )
151
+ $r['post_parent'] = 0;
152
 
153
  // Limited the number of pages shown
154
+ if ( !empty( $r['max_num_pages'] ) )
155
+ $bbp->topic_query->max_num_pages = $r['max_num_pages'];
156
+
157
+ /** Stickies **************************************************************/
158
 
159
  // Put sticky posts at the top of the posts array
160
+ if ( !empty( $r['show_stickies'] ) && $r['paged'] <= 1 ) {
161
 
162
  // Get super stickies and stickies in this forum
163
  $stickies = bbp_get_super_stickies();
164
+ $stickies = !empty( $r['post_parent'] ) ? array_merge( $stickies, bbp_get_stickies( $r['post_parent'] ) ) : $stickies;
165
  $stickies = array_unique( $stickies );
166
 
167
  // We have stickies
195
  }
196
 
197
  // If any posts have been excluded specifically, Ignore those that are sticky.
198
+ if ( !empty( $stickies ) && !empty( $r['post__not_in'] ) ) {
199
+ $stickies = array_diff( $stickies, $r['post__not_in'] );
200
  }
201
 
202
  // Fetch sticky posts that weren't in the query results
206
  $sticky_query = array(
207
  'post_type' => bbp_get_topic_post_type(),
208
  'post_parent' => 'any',
 
209
  'meta_key' => '_bbp_last_active_time',
210
  'orderby' => 'meta_value',
211
  'order' => 'DESC',
212
  'include' => $stickies
213
  );
214
 
215
+ // What are the default allowed statuses (based on user caps)
216
+ if ( bbp_get_view_all() ) {
217
+ $sticky_query['post_status'] = $r['post_status'];
218
+
219
+ // Lean on the 'perm' query var value of 'readable' to provide statuses
220
+ } else {
221
+ $sticky_query['post_status'] = $r['perm'];
222
+ }
223
+
224
  // Get all stickies
225
  $sticky_posts = get_posts( $sticky_query );
226
  if ( !empty( $sticky_posts ) ) {
251
  }
252
 
253
  // If no limit to posts per page, set it to the current post_count
254
+ if ( -1 == $r['posts_per_page'] )
255
+ $r['posts_per_page'] = $bbp->topic_query->post_count;
256
 
257
  // Add pagination values to query object
258
+ $bbp->topic_query->posts_per_page = $r['posts_per_page'];
259
+ $bbp->topic_query->paged = $r['paged'];
260
 
261
  // Only add pagination if query returned results
262
  if ( ( (int) $bbp->topic_query->post_count || (int) $bbp->topic_query->found_posts ) && (int) $bbp->topic_query->posts_per_page ) {
263
 
264
  // Limit the number of topics shown based on maximum allowed pages
265
+ if ( ( !empty( $r['max_num_pages'] ) ) && $bbp->topic_query->found_posts > $bbp->topic_query->max_num_pages * $bbp->topic_query->post_count )
266
  $bbp->topic_query->found_posts = $bbp->topic_query->max_num_pages * $bbp->topic_query->post_count;
267
 
268
  // If pretty permalinks are enabled, make our pagination pretty
302
 
303
  // Default
304
  } else {
305
+ $base = get_permalink( (int) $r['post_parent'] );
306
  }
307
 
308
  // Use pagination base
317
  $bbp_topic_pagination = apply_filters( 'bbp_topic_pagination', array (
318
  'base' => $base,
319
  'format' => '',
320
+ 'total' => $r['posts_per_page'] == $bbp->topic_query->found_posts ? 1 : ceil( (int) $bbp->topic_query->found_posts / (int) $r['posts_per_page'] ),
321
  'current' => (int) $bbp->topic_query->paged,
322
+ 'prev_text' => is_rtl() ? '&rarr;' : '&larr;',
323
+ 'next_text' => is_rtl() ? '&larr;' : '&rarr;',
324
  'mid_size' => 1
325
  ) );
326
 
327
  // Add pagination to query object
328
+ $bbp->topic_query->pagination_links = paginate_links( $bbp_topic_pagination );
329
 
330
  // Remove first page from pagination
331
  $bbp->topic_query->pagination_links = str_replace( $wp_rewrite->pagination_base . "/1/'", "'", $bbp->topic_query->pagination_links );
384
  *
385
  * @param $topic_id Optional. Used to check emptiness
386
  * @uses bbPress::topic_query::post::ID To get the topic id
387
+ * @uses bbp_is_topic() To check if the search result is a topic
388
  * @uses bbp_is_single_topic() To check if it's a topic page
389
  * @uses bbp_is_topic_edit() To check if it's a topic edit page
390
  * @uses bbp_is_single_reply() To check if it it's a reply page
403
  $bbp = bbpress();
404
 
405
  // Easy empty checking
406
+ if ( !empty( $topic_id ) && is_numeric( $topic_id ) ) {
407
  $bbp_topic_id = $topic_id;
408
 
409
  // Currently inside a topic loop
410
+ } elseif ( !empty( $bbp->topic_query->in_the_loop ) && isset( $bbp->topic_query->post->ID ) ) {
411
  $bbp_topic_id = $bbp->topic_query->post->ID;
412
 
413
+ // Currently inside a search loop
414
+ } elseif ( !empty( $bbp->search_query->in_the_loop ) && isset( $bbp->search_query->post->ID ) && bbp_is_topic( $bbp->search_query->post->ID ) ) {
415
+ $bbp_topic_id = $bbp->search_query->post->ID;
416
+
417
+ // Currently viewing/editing a topic, likely alone
418
+ } elseif ( ( bbp_is_single_topic() || bbp_is_topic_edit() ) && !empty( $bbp->current_topic_id ) ) {
419
  $bbp_topic_id = $bbp->current_topic_id;
420
 
421
+ // Currently viewing/editing a topic, likely in a loop
422
+ } elseif ( ( bbp_is_single_topic() || bbp_is_topic_edit() ) && isset( $wp_query->post->ID ) ) {
423
  $bbp_topic_id = $wp_query->post->ID;
424
 
425
+ // Currently viewing/editing a reply
426
+ } elseif ( bbp_is_single_reply() || bbp_is_reply_edit() ) {
427
  $bbp_topic_id = bbp_get_reply_topic_id();
428
 
429
  // Fallback
430
+ } else {
431
  $bbp_topic_id = 0;
432
+ }
433
 
434
  return (int) apply_filters( 'bbp_get_topic_id', (int) $bbp_topic_id, $topic_id );
435
  }
703
  * @param bool $gmt Optional. Use GMT
704
  * @uses bbp_get_topic_id() To get the topic id
705
  * @uses get_post_time() to get the topic post time
706
+ * @uses bbp_get_time_since() to maybe humanize the topic post time
707
  * @return string
708
  */
709
  function bbp_get_topic_post_date( $topic_id = 0, $humanize = false, $gmt = false ) {
711
 
712
  // 4 days, 4 hours ago
713
  if ( !empty( $humanize ) ) {
714
+ $gmt_s = !empty( $gmt ) ? 'U' : 'G';
715
+ $date = get_post_time( $gmt_s, $gmt, $topic_id );
716
  $time = false; // For filter below
717
+ $result = bbp_get_time_since( $date );
718
 
719
  // August 4, 2012 at 2:37 pm
720
  } else {
764
  function bbp_get_topic_pagination( $args = '' ) {
765
  global $wp_rewrite;
766
 
767
+ // Parse arguments against default values
768
+ $r = bbp_parse_args( $args, array(
769
  'topic_id' => bbp_get_topic_id(),
770
  'before' => '<span class="bbp-topic-pagination">',
771
  'after' => '</span>',
772
+ ), 'get_topic_pagination' );
 
 
773
 
774
  // If pretty permalinks are enabled, make our pagination pretty
775
+ if ( $wp_rewrite->using_permalinks() ) {
776
+ $base = trailingslashit( get_permalink( $r['topic_id'] ) ) . user_trailingslashit( $wp_rewrite->pagination_base . '/%#%/' );
777
+ } else {
778
+ $base = add_query_arg( 'paged', '%#%', get_permalink( $r['topic_id'] ) );
779
+ }
780
 
781
  // Get total and add 1 if topic is included in the reply loop
782
+ $total = bbp_get_topic_reply_count( $r['topic_id'], true );
783
 
784
  // Bump if topic is in loop
785
  if ( !bbp_show_lead_topic() )
809
  }
810
 
811
  // Add before and after to pagination links
812
+ $pagination_links = $r['before'] . $pagination_links . $r['after'];
813
  }
814
 
815
  return apply_filters( 'bbp_get_topic_pagination', $pagination_links, $args );
1177
  function bbp_get_topic_author( $topic_id = 0 ) {
1178
  $topic_id = bbp_get_topic_id( $topic_id );
1179
 
1180
+ if ( !bbp_is_topic_anonymous( $topic_id ) ) {
1181
  $author = get_the_author_meta( 'display_name', bbp_get_topic_author_id( $topic_id ) );
1182
+ } else {
1183
  $author = get_post_meta( $topic_id, '_bbp_anonymous_name', true );
1184
+ }
1185
 
1186
  return apply_filters( 'bbp_get_topic_author', $author, $topic_id );
1187
  }
1270
  if ( empty( $author_name ) )
1271
  $author_name = __( 'Anonymous', 'bbpress' );
1272
 
1273
+ // Encode possible UTF8 display names
1274
+ if ( seems_utf8( $author_name ) === false )
1275
+ $author_name = utf8_encode( $author_name );
1276
+
1277
+ return apply_filters( 'bbp_get_topic_author_display_name', $author_name, $topic_id );
1278
  }
1279
 
1280
  /**
1354
  * @return string Author link of topic
1355
  */
1356
  function bbp_get_topic_author_link( $args = '' ) {
1357
+
1358
+ // Parse arguments against default values
1359
+ $r = bbp_parse_args( $args, array(
1360
  'post_id' => 0,
1361
  'link_title' => '',
1362
  'type' => 'both',
1363
  'size' => 80,
1364
  'sep' => '&nbsp;',
1365
  'show_role' => false
1366
+ ), 'get_topic_author_link' );
 
 
1367
 
1368
  // Used as topic_id
1369
  if ( is_numeric( $args ) ) {
1370
  $topic_id = bbp_get_topic_id( $args );
1371
  } else {
1372
+ $topic_id = bbp_get_topic_id( $r['post_id'] );
1373
  }
1374
 
1375
  // Topic ID is good
1376
  if ( !empty( $topic_id ) ) {
1377
 
1378
  // Tweak link title if empty
1379
+ if ( empty( $r['link_title'] ) ) {
1380
  $link_title = sprintf( !bbp_is_topic_anonymous( $topic_id ) ? __( 'View %s\'s profile', 'bbpress' ) : __( 'Visit %s\'s website', 'bbpress' ), bbp_get_topic_author_display_name( $topic_id ) );
1381
+
1382
+ // Use what was passed if not
1383
+ } else {
1384
+ $link_title = $r['link_title'];
1385
  }
1386
 
1387
  $link_title = !empty( $link_title ) ? ' title="' . $link_title . '"' : '';
1390
  $author_links = array();
1391
 
1392
  // Get avatar
1393
+ if ( 'avatar' == $r['type'] || 'both' == $r['type'] ) {
1394
+ $author_links['avatar'] = bbp_get_topic_author_avatar( $topic_id, $r['size'] );
1395
  }
1396
 
1397
  // Get display name
1398
+ if ( 'name' == $r['type'] || 'both' == $r['type'] ) {
1399
  $author_links['name'] = bbp_get_topic_author_display_name( $topic_id );
1400
  }
1401
 
1402
  // Link class
1403
+ $link_class = ' class="bbp-author-' . $r['type'] . '"';
1404
 
1405
  // Add links if not anonymous
1406
  if ( empty( $anonymous ) && bbp_user_has_profile( bbp_get_topic_author_id( $topic_id ) ) ) {
1411
  $author_link[] = sprintf( '<a href="%1$s"%2$s%3$s>%4$s</a>', $author_url, $link_title, $link_class, $link_text );
1412
  }
1413
 
1414
+ if ( true === $r['show_role'] ) {
1415
  $author_link[] = bbp_get_topic_author_role( array( 'topic_id' => $topic_id ) );
1416
  }
1417
 
1418
+ $author_link = join( $r['sep'], $author_link );
1419
 
1420
  // No links if anonymous
1421
  } else {
1422
+ $author_link = join( $r['sep'], $author_links );
1423
  }
1424
 
1425
  } else {
1553
  * @return string topic author role
1554
  */
1555
  function bbp_get_topic_author_role( $args = array() ) {
1556
+
1557
+ // Parse arguments against default values
1558
+ $r = bbp_parse_args( $args, array(
1559
  'topic_id' => 0,
1560
  'class' => 'bbp-author-role',
1561
  'before' => '',
1562
  'after' => ''
1563
+ ), 'get_topic_author_role' );
 
 
1564
 
1565
+ $topic_id = bbp_get_topic_id( $r['topic_id'] );
1566
  $role = bbp_get_user_display_role( bbp_get_topic_author_id( $topic_id ) );
1567
+ $author_role = sprintf( '%1$s<div class="%2$s">%3$s</div>%4$s', $r['before'], $r['class'], $role, $r['after'] );
1568
 
1569
+ return apply_filters( 'bbp_get_topic_author_role', $author_role, $r );
1570
  }
1571
 
1572
 
1825
  $topic_id = bbp_get_topic_id( $topic_id );
1826
  $reply_id = bbp_get_topic_last_reply_id( $topic_id );
1827
 
1828
+ if ( !empty( $reply_id ) && ( $reply_id != $topic_id ) ) {
1829
  $reply_url = bbp_get_reply_url( $reply_id );
1830
+ } else {
1831
  $reply_url = bbp_get_topic_permalink( $topic_id );
1832
+ }
1833
 
1834
  return apply_filters( 'bbp_get_topic_last_reply_url', $reply_url );
1835
  }
1872
  else
1873
  $anchor = __( 'No Replies', 'bbpress' );
1874
 
1875
+ return apply_filters( 'bbp_get_topic_freshness_link', $anchor, $topic_id, $time_since, $link_url, $title );
1876
  }
1877
 
1878
  /**
2101
  if ( ! bbp_allow_topic_tags() )
2102
  return;
2103
 
2104
+ // Parse arguments against default values
2105
+ $r = bbp_parse_args( $args, array(
2106
  'before' => '<div class="bbp-topic-tags"><p>' . __( 'Tagged:', 'bbpress' ) . '&nbsp;',
2107
  'sep' => ', ',
2108
  'after' => '</p></div>'
2109
+ ), 'get_topic_tag_list' );
 
 
2110
 
2111
  $topic_id = bbp_get_topic_id( $topic_id );
2112
 
2118
 
2119
  // If terms exist, explode them and compile the return value
2120
  if ( !empty( $terms ) ) {
2121
+ $terms = implode( $r['sep'], $terms );
2122
+ $retval = $r['before'] . $terms . $r['after'];
2123
 
2124
  // No terms so return emty string
2125
  } else {
2128
 
2129
  // Topic is not spam so display a clickable term list
2130
  } else {
2131
+ $retval = get_the_term_list( $topic_id, bbp_get_topic_tag_tax_id(), $r['before'], $r['sep'], $r['after'] );
2132
  }
2133
 
2134
  return $retval;
2217
  if ( !bbp_is_single_topic() )
2218
  return;
2219
 
2220
+ // Parse arguments against default values
2221
+ $r = bbp_parse_args( $args, array (
2222
  'id' => bbp_get_topic_id(),
2223
  'before' => '<span class="bbp-admin-links">',
2224
  'after' => '</span>',
2225
  'sep' => ' | ',
2226
  'links' => array()
2227
+ ), 'get_topic_admin_links' );
 
2228
 
2229
  if ( !current_user_can( 'edit_topic', $r['id'] ) )
2230
  return;
2231
 
2232
  if ( empty( $r['links'] ) ) {
2233
+ $r['links'] = apply_filters( 'bbp_topic_admin_links', array(
2234
  'edit' => bbp_get_topic_edit_link ( $r ),
2235
  'close' => bbp_get_topic_close_link( $r ),
2236
  'stick' => bbp_get_topic_stick_link( $r ),
2237
  'merge' => bbp_get_topic_merge_link( $r ),
2238
  'trash' => bbp_get_topic_trash_link( $r ),
2239
  'spam' => bbp_get_topic_spam_link ( $r ),
2240
+ ), $r['id'] );
2241
  }
2242
 
2243
  // Check caps for trashing the topic
2298
  * @return string Topic edit link
2299
  */
2300
  function bbp_get_topic_edit_link( $args = '' ) {
2301
+
2302
+ // Parse arguments against default values
2303
+ $r = bbp_parse_args( $args, array(
2304
  'id' => 0,
2305
  'link_before' => '',
2306
  'link_after' => '',
2307
  'edit_text' => __( 'Edit', 'bbpress' )
2308
+ ), 'get_topic_edit_link' );
 
 
2309
 
2310
+ $topic = bbp_get_topic( bbp_get_topic_id( (int) $r['id'] ) );
2311
 
2312
  // Bypass check if user has caps
2313
  if ( !current_user_can( 'edit_others_topics' ) ) {
2319
  }
2320
 
2321
  // Get uri
2322
+ $uri = bbp_get_topic_edit_url( $r['id'] );
2323
 
2324
  // Bail if no uri
2325
  if ( empty( $uri ) )
2326
  return;
2327
 
2328
+ $retval = $r['link_before'] . '<a href="' . $uri . '">' . $r['edit_text'] . '</a>' . $r['link_after'];
2329
 
2330
+ return apply_filters( 'bbp_get_topic_edit_link', $retval, $r );
2331
  }
2332
 
2333
  /**
2422
  */
2423
  function bbp_get_topic_trash_link( $args = '' ) {
2424
 
2425
+ // Parse arguments against default values
2426
+ $r = bbp_parse_args( $args, array(
2427
  'id' => 0,
2428
  'link_before' => '',
2429
  'link_after' => '',
2431
  'trash_text' => __( 'Trash', 'bbpress' ),
2432
  'restore_text' => __( 'Restore', 'bbpress' ),
2433
  'delete_text' => __( 'Delete', 'bbpress' )
2434
+ ), 'get_topic_trash_link' );
 
 
2435
 
2436
  $actions = array();
2437
+ $topic = bbp_get_topic( bbp_get_topic_id( (int) $r['id'] ) );
2438
 
2439
  if ( empty( $topic ) || !current_user_can( 'delete_topic', $topic->ID ) ) {
2440
  return;
2441
  }
2442
 
2443
  if ( bbp_is_topic_trash( $topic->ID ) ) {
2444
+ $actions['untrash'] = '<a title="' . esc_attr__( 'Restore this item from the Trash', 'bbpress' ) . '" href="' . esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'bbp_toggle_topic_trash', 'sub_action' => 'untrash', 'topic_id' => $topic->ID ) ), 'untrash-' . $topic->post_type . '_' . $topic->ID ) ) . '">' . esc_html( $r['restore_text'] ) . '</a>';
2445
  } elseif ( EMPTY_TRASH_DAYS ) {
2446
+ $actions['trash'] = '<a title="' . esc_attr__( 'Move this item to the Trash', 'bbpress' ) . '" href="' . esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'bbp_toggle_topic_trash', 'sub_action' => 'trash', 'topic_id' => $topic->ID ) ), 'trash-' . $topic->post_type . '_' . $topic->ID ) ) . '">' . esc_html( $r['trash_text'] ) . '</a>';
2447
  }
2448
 
2449
  if ( bbp_is_topic_trash( $topic->ID ) || !EMPTY_TRASH_DAYS ) {
2450
+ $actions['delete'] = '<a title="' . esc_attr__( 'Delete this item permanently', 'bbpress' ) . '" href="' . esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'bbp_toggle_topic_trash', 'sub_action' => 'delete', 'topic_id' => $topic->ID ) ), 'delete-' . $topic->post_type . '_' . $topic->ID ) ) . '" onclick="return confirm(\'' . esc_js( __( 'Are you sure you want to delete that permanently?', 'bbpress' ) ) . '\' );">' . esc_html( $r['delete_text'] ) . '</a>';
2451
  }
2452
 
2453
  // Process the admin links
2454
+ $retval = $r['link_before'] . implode( $r['sep'], $actions ) . $r['link_after'];
2455
 
2456
+ return apply_filters( 'bbp_get_topic_trash_link', $retval, $r );
2457
  }
2458
 
2459
  /**
2491
  * @return string Topic close link
2492
  */
2493
  function bbp_get_topic_close_link( $args = '' ) {
2494
+
2495
+ // Parse arguments against default values
2496
+ $r = bbp_parse_args( $args, array(
2497
  'id' => 0,
2498
  'link_before' => '',
2499
  'link_after' => '',
2500
  'sep' => ' | ',
2501
  'close_text' => _x( 'Close', 'Topic Status', 'bbpress' ),
2502
  'open_text' => _x( 'Open', 'Topic Status', 'bbpress' )
2503
+ ), 'get_topic_close_link' );
 
 
2504
 
2505
+ $topic = bbp_get_topic( bbp_get_topic_id( (int) $r['id'] ) );
2506
 
2507
  if ( empty( $topic ) || !current_user_can( 'moderate', $topic->ID ) )
2508
  return;
2509
 
2510
+ $display = bbp_is_topic_open( $topic->ID ) ? $r['close_text'] : $r['open_text'];
2511
  $uri = add_query_arg( array( 'action' => 'bbp_toggle_topic_close', 'topic_id' => $topic->ID ) );
2512
  $uri = esc_url( wp_nonce_url( $uri, 'close-topic_' . $topic->ID ) );
2513
+ $retval = $r['link_before'] . '<a href="' . $uri . '">' . $display . '</a>' . $r['link_after'];
2514
 
2515
+ return apply_filters( 'bbp_get_topic_close_link', $retval, $r );
2516
  }
2517
 
2518
  /**
2552
  * @return string Topic stick link
2553
  */
2554
  function bbp_get_topic_stick_link( $args = '' ) {
2555
+
2556
+ // Parse arguments against default values
2557
+ $r = bbp_parse_args( $args, array(
2558
  'id' => 0,
2559
  'link_before' => '',
2560
  'link_after' => '',
2561
  'stick_text' => __( 'Stick', 'bbpress' ),
2562
  'unstick_text' => __( 'Unstick', 'bbpress' ),
2563
  'super_text' => __( 'to front', 'bbpress' ),
2564
+ ), 'get_topic_stick_link' );
 
 
2565
 
2566
+ $topic = bbp_get_topic( bbp_get_topic_id( (int) $r['id'] ) );
2567
 
2568
  if ( empty( $topic ) || !current_user_can( 'moderate', $topic->ID ) )
2569
  return;
2573
  $stick_uri = add_query_arg( array( 'action' => 'bbp_toggle_topic_stick', 'topic_id' => $topic->ID ) );
2574
  $stick_uri = esc_url( wp_nonce_url( $stick_uri, 'stick-topic_' . $topic->ID ) );
2575
 
2576
+ $stick_display = true == $is_sticky ? $r['unstick_text'] : $r['stick_text'];
2577
  $stick_display = '<a href="' . $stick_uri . '">' . $stick_display . '</a>';
2578
 
2579
  if ( empty( $is_sticky ) ) {
2580
  $super_uri = add_query_arg( array( 'action' => 'bbp_toggle_topic_stick', 'topic_id' => $topic->ID, 'super' => 1 ) );
2581
  $super_uri = esc_url( wp_nonce_url( $super_uri, 'stick-topic_' . $topic->ID ) );
2582
 
2583
+ $super_display = ' (<a href="' . $super_uri . '">' . $r['super_text'] . '</a>)';
2584
  } else {
2585
  $super_display = '';
2586
  }
2587
 
2588
  // Combine the HTML into 1 string
2589
+ $retval = $r['link_before'] . $stick_display . $super_display . $r['link_after'];
2590
 
2591
+ return apply_filters( 'bbp_get_topic_stick_link', $retval, $r );
2592
  }
2593
 
2594
  /**
2623
  * @return string Topic merge link
2624
  */
2625
  function bbp_get_topic_merge_link( $args = '' ) {
2626
+
2627
+ // Parse arguments against default values
2628
+ $r = bbp_parse_args( $args, array(
2629
  'id' => 0,
2630
  'link_before' => '',
2631
  'link_after' => '',
2632
  'merge_text' => __( 'Merge', 'bbpress' ),
2633
+ ), 'get_topic_merge_link' );
 
 
2634
 
2635
+ $topic = bbp_get_topic( bbp_get_topic_id( (int) $r['id'] ) );
2636
 
2637
  if ( empty( $topic ) || !current_user_can( 'moderate', $topic->ID ) )
2638
  return;
2639
 
2640
  $uri = esc_url( add_query_arg( array( 'action' => 'merge' ), bbp_get_topic_edit_url( $topic->ID ) ) );
2641
+ $retval = $r['link_before'] . '<a href="' . $uri . '">' . $r['merge_text'] . '</a>' . $r['link_after'];
2642
 
2643
  return apply_filters( 'bbp_get_topic_merge_link', $retval, $args );
2644
  }
2678
  * @return string Topic spam link
2679
  */
2680
  function bbp_get_topic_spam_link( $args = '' ) {
2681
+
2682
+ // Parse arguments against default values
2683
+ $r = bbp_parse_args( $args, array(
2684
  'id' => 0,
2685
  'link_before' => '',
2686
  'link_after' => '',
2687
  'sep' => ' | ',
2688
  'spam_text' => __( 'Spam', 'bbpress' ),
2689
  'unspam_text' => __( 'Unspam', 'bbpress' )
2690
+ ), 'get_topic_spam_link' );
 
 
2691
 
2692
+ $topic = bbp_get_topic( bbp_get_topic_id( (int) $r['id'] ) );
2693
 
2694
  if ( empty( $topic ) || !current_user_can( 'moderate', $topic->ID ) )
2695
  return;
2696
 
2697
+ $display = bbp_is_topic_spam( $topic->ID ) ? $r['unspam_text'] : $r['spam_text'];
2698
  $uri = add_query_arg( array( 'action' => 'bbp_toggle_topic_spam', 'topic_id' => $topic->ID ) );
2699
  $uri = esc_url( wp_nonce_url( $uri, 'spam-topic_' . $topic->ID ) );
2700
+ $retval = $r['link_before'] . '<a href="' . $uri . '">' . $display . '</a>' . $r['link_after'];
2701
 
2702
+ return apply_filters( 'bbp_get_topic_spam_link', $retval, $r );
2703
  }
2704
 
2705
  /** Topic Pagination **********************************************************/
2845
  */
2846
  function bbp_topic_type_select( $args = '' ) {
2847
 
2848
+ // Parse arguments against default values
2849
+ $r = bbp_parse_args( $args, array(
2850
  'unstick_text' => __( 'Normal', 'bbpress' ),
2851
  'stick_text' => __( 'Sticky', 'bbpress' ),
2852
  'super_text' => __( 'Super Sticky', 'bbpress' ),
2853
  'select_id' => 'bbp_stick_topic',
2854
  'tab' => bbp_get_tab_index(),
2855
  'topic_id' => 0
2856
+ ), 'topic_type_select' );
 
 
2857
 
2858
  // Edit topic
2859
  if ( bbp_is_single_topic() || bbp_is_topic_edit() ) {
2860
 
2861
  // Get current topic id
2862
+ $topic_id = bbp_get_topic_id( $r['topic_id'] );
2863
 
2864
  // Post value is passed
2865
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST[ $r['select_id'] ] ) ) {
2866
+ $sticky_current = $_POST[ $r['select_id'] ];
2867
 
2868
  // Topic is super sticky
2869
  } elseif ( bbp_is_topic_super_sticky( $topic_id ) ) {
2878
  } else {
2879
 
2880
  // Post value is passed
2881
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST[ $r['select_id'] ] ) ) {
2882
+ $sticky_current = $_POST[ $r['select_id'] ];
2883
 
2884
  // Default to unstick
2885
  } else {
2888
  }
2889
 
2890
  // Used variables
2891
+ $tab = !empty( $r['tab'] ) ? ' tabindex="' . $r['tab'] . '"' : '';
2892
+ $select_id = esc_attr( $r['select_id'] );
2893
  $sticky_statuses = array (
2894
+ 'unstick' => $r['unstick_text'],
2895
+ 'stick' => $r['stick_text'],
2896
+ 'super' => $r['super_text'],
2897
  ); ?>
2898
 
2899
  <select name="<?php echo $select_id; ?>" id="<?php echo $select_id; ?>"<?php echo $tab; ?>>
2900
 
2901
  <?php foreach ( $sticky_statuses as $sticky_status => $label ) : ?>
2902
 
2903
+ <option value="<?php echo esc_attr( $sticky_status ); ?>"<?php selected( $sticky_current, $sticky_status ); ?>><?php echo esc_html( $label ); ?></option>
2904
 
2905
  <?php endforeach; ?>
2906
 
2946
  */
2947
  function bbp_get_single_topic_description( $args = '' ) {
2948
 
2949
+ // Parse arguments against default values
2950
+ $r = bbp_parse_args( $args, array(
2951
  'topic_id' => 0,
2952
  'before' => '<div class="bbp-template-notice info"><p class="bbp-topic-description">',
2953
  'after' => '</p></div>',
2954
  'size' => 14
2955
+ ), 'get_single_topic_description' );
 
 
2956
 
2957
  // Validate topic_id
2958
+ $topic_id = bbp_get_topic_id( $r['topic_id'] );
2959
 
2960
  // Unhook the 'view all' query var adder
2961
  remove_filter( 'bbp_get_topic_permalink', 'bbp_add_view_all' );
2962
 
2963
  // Build the topic description
2964
+ $vc_int = bbp_get_topic_voice_count ( $topic_id, true );
2965
+ $voice_count = bbp_get_topic_voice_count ( $topic_id, false );
2966
+ $reply_count = bbp_get_topic_replies_link ( $topic_id );
2967
+ $time_since = bbp_get_topic_freshness_link( $topic_id );
2968
 
2969
  // Singular/Plural
2970
+ $voice_count = sprintf( _n( '%s voice', '%s voices', $vc_int, 'bbpress' ), $voice_count );
2971
 
2972
  // Topic has replies
2973
  $last_reply = bbp_get_topic_last_active_id( $topic_id );
2974
  if ( !empty( $last_reply ) ) {
2975
+ $last_updated_by = bbp_get_author_link( array( 'post_id' => $last_reply, 'size' => $r['size'] ) );
2976
  $retstr = sprintf( __( 'This topic contains %1$s, has %2$s, and was last updated by %3$s %4$s.', 'bbpress' ), $reply_count, $voice_count, $last_updated_by, $time_since );
2977
 
2978
  // Topic has no replies
2988
  add_filter( 'bbp_get_topic_permalink', 'bbp_add_view_all' );
2989
 
2990
  // Combine the elements together
2991
+ $retstr = $r['before'] . $retstr . $r['after'];
2992
 
2993
  // Return filtered result
2994
+ return apply_filters( 'bbp_get_single_topic_description', $retstr, $r );
2995
  }
2996
 
2997
  /** Topic Tags ****************************************************************/
3274
  */
3275
  function bbp_get_topic_tag_description( $args = array() ) {
3276
 
3277
+ // Parse arguments against default values
3278
+ $r = bbp_parse_args( $args, array(
3279
  'before' => '<div class="bbp-topic-tag-description"><p>',
3280
  'after' => '</p></div>',
3281
  'tag' => ''
3282
+ ), 'get_topic_tag_description' );
 
 
3283
 
3284
  // Get the term
3285
+ if ( ! empty( $r['tag'] ) ) {
3286
+ $term = get_term_by( 'slug', $r['tag'], bbp_get_topic_tag_tax_id() );
3287
  } else {
3288
+ $tag = get_query_var( 'term' );
3289
+ $r['tag'] = $tag;
3290
+ $term = get_queried_object();
3291
  }
3292
 
3293
  // Add before and after if description exists
3294
  if ( !empty( $term->description ) ) {
3295
+ $retval = $r['before'] . $term->description . $r['after'];
3296
 
3297
  // No description, no HTML
3298
  } else {
3299
  $retval = '';
3300
  }
3301
 
3302
+ return apply_filters( 'bbp_get_topic_tag_description', $retval, $r );
3303
  }
3304
 
3305
  /** Forms *********************************************************************/
3326
  function bbp_get_form_topic_title() {
3327
 
3328
  // Get _POST data
3329
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_topic_title'] ) ) {
3330
  $topic_title = $_POST['bbp_topic_title'];
3331
 
3332
  // Get edit data
3333
+ } elseif ( bbp_is_topic_edit() ) {
3334
  $topic_title = bbp_get_global_post_field( 'post_title', 'raw' );
3335
 
3336
  // No data
3337
+ } else {
3338
  $topic_title = '';
3339
+ }
3340
 
3341
  return apply_filters( 'bbp_get_form_topic_title', esc_attr( $topic_title ) );
3342
  }
3363
  function bbp_get_form_topic_content() {
3364
 
3365
  // Get _POST data
3366
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_topic_content'] ) ) {
3367
  $topic_content = $_POST['bbp_topic_content'];
3368
 
3369
  // Get edit data
3370
+ } elseif ( bbp_is_topic_edit() ) {
3371
  $topic_content = bbp_get_global_post_field( 'post_content', 'raw' );
3372
 
3373
  // No data
3374
+ } else {
3375
  $topic_content = '';
3376
+ }
3377
 
3378
  return apply_filters( 'bbp_get_form_topic_content', esc_textarea( $topic_content ) );
3379
  }
3493
  function bbp_get_form_topic_forum() {
3494
 
3495
  // Get _POST data
3496
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_forum_id'] ) ) {
3497
  $topic_forum = (int) $_POST['bbp_forum_id'];
3498
 
3499
  // Get edit data
3500
+ } elseif ( bbp_is_topic_edit() ) {
3501
  $topic_forum = bbp_get_topic_forum_id();
3502
 
3503
  // No data
3504
+ } else {
3505
  $topic_forum = 0;
3506
+ }
3507
 
3508
+ return apply_filters( 'bbp_get_form_topic_forum', $topic_forum );
3509
  }
3510
 
3511
  /**
3588
  function bbp_get_form_topic_log_edit() {
3589
 
3590
  // Get _POST data
3591
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_log_topic_edit'] ) ) {
3592
+ $topic_revision = (int) $_POST['bbp_log_topic_edit'];
3593
 
3594
  // No data
3595
+ } else {
3596
+ $topic_revision = 1;
3597
+ }
3598
 
3599
+ // Get checked output
3600
  $checked = checked( $topic_revision, true, false );
3601
 
3602
  return apply_filters( 'bbp_get_form_topic_log_edit', $checked, $topic_revision );
3624
  function bbp_get_form_topic_edit_reason() {
3625
 
3626
  // Get _POST data
3627
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['bbp_topic_edit_reason'] ) ) {
3628
  $topic_edit_reason = $_POST['bbp_topic_edit_reason'];
3629
 
3630
  // No data
3631
+ } else {
3632
  $topic_edit_reason = '';
3633
+ }
3634
 
3635
  return apply_filters( 'bbp_get_form_topic_edit_reason', esc_attr( $topic_edit_reason ) );
3636
  }
includes/users/capabilities.php CHANGED
@@ -369,11 +369,11 @@ function bbp_make_spam_user( $user_id = 0 ) {
369
 
370
  // Bail if no user ID
371
  if ( empty( $user_id ) )
372
- return;
373
 
374
  // Bail if user ID is super admin
375
  if ( is_super_admin( $user_id ) )
376
- return;
377
 
378
  // Arm the torpedos
379
  global $wpdb;
@@ -421,6 +421,9 @@ function bbp_make_spam_user( $user_id = 0 ) {
421
  // Switch back to current blog
422
  restore_current_blog();
423
  }
 
 
 
424
  }
425
 
426
  /**
@@ -454,11 +457,11 @@ function bbp_make_ham_user( $user_id = 0 ) {
454
 
455
  // Bail if no user ID
456
  if ( empty( $user_id ) )
457
- return;
458
 
459
  // Bail if user ID is super admin
460
  if ( is_super_admin( $user_id ) )
461
- return;
462
 
463
  // Arm the torpedos
464
  global $wpdb;
@@ -506,6 +509,9 @@ function bbp_make_ham_user( $user_id = 0 ) {
506
  // Switch back to current blog
507
  restore_current_blog();
508
  }
 
 
 
509
  }
510
 
511
  /**
369
 
370
  // Bail if no user ID
371
  if ( empty( $user_id ) )
372
+ return false;
373
 
374
  // Bail if user ID is super admin
375
  if ( is_super_admin( $user_id ) )
376
+ return false;
377
 
378
  // Arm the torpedos
379
  global $wpdb;
421
  // Switch back to current blog
422
  restore_current_blog();
423
  }
424
+
425
+ // Success
426
+ return true;
427
  }
428
 
429
  /**
457
 
458
  // Bail if no user ID
459
  if ( empty( $user_id ) )
460
+ return false;
461
 
462
  // Bail if user ID is super admin
463
  if ( is_super_admin( $user_id ) )
464
+ return false;
465
 
466
  // Arm the torpedos
467
  global $wpdb;
509
  // Switch back to current blog
510
  restore_current_blog();
511
  }
512
+
513
+ // Success
514
+ return true;
515
  }
516
 
517
  /**
includes/users/functions.php CHANGED
@@ -416,6 +416,7 @@ function bbp_remove_user_favorite( $user_id, $topic_id ) {
416
  /**
417
  * Handles the front end adding and removing of favorite topics
418
  *
 
419
  * @uses bbp_get_user_id() To get the user id
420
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
421
  * @uses current_user_can() To check if the current user can edit the user
@@ -430,17 +431,13 @@ function bbp_remove_user_favorite( $user_id, $topic_id ) {
430
  * @uses bbp_get_topic_permalink() To get the topic permalink
431
  * @uses wp_safe_redirect() To redirect to the url
432
  */
433
- function bbp_favorites_handler() {
434
 
435
  if ( !bbp_is_favorites_active() )
436
  return false;
437
 
438
- // Bail if not a GET action
439
- if ( 'GET' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
440
- return;
441
-
442
- // Bail if required GET actions aren't passed
443
- if ( empty( $_GET['topic_id'] ) || empty( $_GET['action'] ) )
444
  return;
445
 
446
  // Setup possible get actions
@@ -450,11 +447,10 @@ function bbp_favorites_handler() {
450
  );
451
 
452
  // Bail if actions aren't meant for this function
453
- if ( !in_array( $_GET['action'], $possible_actions ) )
454
  return;
455
 
456
  // What action is taking place?
457
- $action = $_GET['action'];
458
  $topic_id = intval( $_GET['topic_id'] );
459
  $user_id = bbp_get_user_id( 0, true, true );
460
 
@@ -500,6 +496,8 @@ function bbp_favorites_handler() {
500
  $redirect = bbp_get_topic_permalink( $topic_id );
501
  } elseif ( is_single() || is_page() ) {
502
  $redirect = get_permalink();
 
 
503
  }
504
 
505
  wp_safe_redirect( $redirect );
@@ -734,6 +732,7 @@ function bbp_remove_user_subscription( $user_id, $topic_id ) {
734
  /**
735
  * Handles the front end subscribing and unsubscribing topics
736
  *
 
737
  * @uses bbp_is_subscriptions_active() To check if the subscriptions are active
738
  * @uses bbp_get_user_id() To get the user id
739
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
@@ -750,17 +749,13 @@ function bbp_remove_user_subscription( $user_id, $topic_id ) {
750
  * @uses bbp_get_topic_permalink() To get the topic permalink
751
  * @uses wp_safe_redirect() To redirect to the url
752
  */
753
- function bbp_subscriptions_handler() {
754
 
755
  if ( !bbp_is_subscriptions_active() )
756
  return false;
757
 
758
- // Bail if not a GET action
759
- if ( 'GET' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
760
- return;
761
-
762
- // Bail if required GET actions aren't passed
763
- if ( empty( $_GET['topic_id'] ) || empty( $_GET['action'] ) )
764
  return;
765
 
766
  // Setup possible get actions
@@ -770,11 +765,10 @@ function bbp_subscriptions_handler() {
770
  );
771
 
772
  // Bail if actions aren't meant for this function
773
- if ( !in_array( $_GET['action'], $possible_actions ) )
774
  return;
775
 
776
  // Get required data
777
- $action = $_GET['action'];
778
  $user_id = bbp_get_user_id( 0, true, true );
779
  $topic_id = intval( $_GET['topic_id'] );
780
 
@@ -820,6 +814,8 @@ function bbp_subscriptions_handler() {
820
  $redirect = bbp_get_topic_permalink( $topic_id );
821
  } elseif ( is_single() || is_page() ) {
822
  $redirect = get_permalink();
 
 
823
  }
824
 
825
  wp_safe_redirect( $redirect );
@@ -840,6 +836,7 @@ function bbp_subscriptions_handler() {
840
  /**
841
  * Handles the front end user editing
842
  *
 
843
  * @uses is_multisite() To check if it's a multisite
844
  * @uses bbp_is_user_home() To check if the user is at home (the display page
845
  * is the one of the logged in user)
@@ -866,14 +863,10 @@ function bbp_subscriptions_handler() {
866
  * @uses grant_super_admin() To grant super admin priviledges
867
  * @uses is_wp_error() To check if the value retrieved is a {@link WP_Error}
868
  */
869
- function bbp_edit_user_handler() {
870
-
871
- // Bail if not a POST action
872
- if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
873
- return;
874
 
875
  // Bail if action is not 'bbp-update-user'
876
- if ( empty( $_POST['action'] ) || ( 'bbp-update-user' !== $_POST['action'] ) )
877
  return;
878
 
879
  // Get the displayed user ID
@@ -1020,7 +1013,7 @@ function bbp_get_user_replies_created( $user_id = 0 ) {
1020
 
1021
  // Try to get the topics
1022
  $query = bbp_has_replies( array(
1023
- 'post_type' => array( bbp_get_topic_post_type(), bbp_get_reply_post_type() ),
1024
  'post_parent' => 'any',
1025
  'posts_per_page' => bbp_get_replies_per_page(),
1026
  'paged' => bbp_get_paged(),
@@ -1037,9 +1030,7 @@ function bbp_get_user_replies_created( $user_id = 0 ) {
1037
  * Get the total number of users on the forums
1038
  *
1039
  * @since bbPress (r2769)
1040
- * @uses wp_cache_get() Check if query is in cache
1041
- * @uses get_users() To execute our query and get the var back
1042
- * @uses wp_cache_set() Set the query in the cache
1043
  * @uses apply_filters() Calls 'bbp_get_total_users' with number of users
1044
  * @return int Total number of users
1045
  */
416
  /**
417
  * Handles the front end adding and removing of favorite topics
418
  *
419
+ * @param string $action The requested action to compare this function to
420
  * @uses bbp_get_user_id() To get the user id
421
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
422
  * @uses current_user_can() To check if the current user can edit the user
431
  * @uses bbp_get_topic_permalink() To get the topic permalink
432
  * @uses wp_safe_redirect() To redirect to the url
433
  */
434
+ function bbp_favorites_handler( $action = '' ) {
435
 
436
  if ( !bbp_is_favorites_active() )
437
  return false;
438
 
439
+ // Bail if no topic ID is passed
440
+ if ( empty( $_GET['topic_id'] ) )
 
 
 
 
441
  return;
442
 
443
  // Setup possible get actions
447
  );
448
 
449
  // Bail if actions aren't meant for this function
450
+ if ( !in_array( $action, $possible_actions ) )
451
  return;
452
 
453
  // What action is taking place?
 
454
  $topic_id = intval( $_GET['topic_id'] );
455
  $user_id = bbp_get_user_id( 0, true, true );
456
 
496
  $redirect = bbp_get_topic_permalink( $topic_id );
497
  } elseif ( is_single() || is_page() ) {
498
  $redirect = get_permalink();
499
+ } else {
500
+ $redirect = get_permalink( $topic_id );
501
  }
502
 
503
  wp_safe_redirect( $redirect );
732
  /**
733
  * Handles the front end subscribing and unsubscribing topics
734
  *
735
+ * @param string $action The requested action to compare this function to
736
  * @uses bbp_is_subscriptions_active() To check if the subscriptions are active
737
  * @uses bbp_get_user_id() To get the user id
738
  * @uses bbp_verify_nonce_request() To verify the nonce and check the request
749
  * @uses bbp_get_topic_permalink() To get the topic permalink
750
  * @uses wp_safe_redirect() To redirect to the url
751
  */
752
+ function bbp_subscriptions_handler( $action = '' ) {
753
 
754
  if ( !bbp_is_subscriptions_active() )
755
  return false;
756
 
757
+ // Bail if no topic ID is passed
758
+ if ( empty( $_GET['topic_id'] ) )
 
 
 
 
759
  return;
760
 
761
  // Setup possible get actions
765
  );
766
 
767
  // Bail if actions aren't meant for this function
768
+ if ( !in_array( $action, $possible_actions ) )
769
  return;
770
 
771
  // Get required data
 
772
  $user_id = bbp_get_user_id( 0, true, true );
773
  $topic_id = intval( $_GET['topic_id'] );
774
 
814
  $redirect = bbp_get_topic_permalink( $topic_id );
815
  } elseif ( is_single() || is_page() ) {
816
  $redirect = get_permalink();
817
+ } else {
818
+ $redirect = get_permalink( $topic_id );
819
  }
820
 
821
  wp_safe_redirect( $redirect );
836
  /**
837
  * Handles the front end user editing
838
  *
839
+ * @param string $action The requested action to compare this function to
840
  * @uses is_multisite() To check if it's a multisite
841
  * @uses bbp_is_user_home() To check if the user is at home (the display page
842
  * is the one of the logged in user)
863
  * @uses grant_super_admin() To grant super admin priviledges
864
  * @uses is_wp_error() To check if the value retrieved is a {@link WP_Error}
865
  */
866
+ function bbp_edit_user_handler( $action = '' ) {
 
 
 
 
867
 
868
  // Bail if action is not 'bbp-update-user'
869
+ if ( 'bbp-update-user' !== $action )
870
  return;
871
 
872
  // Get the displayed user ID
1013
 
1014
  // Try to get the topics
1015
  $query = bbp_has_replies( array(
1016
+ 'post_type' => bbp_get_reply_post_type(),
1017
  'post_parent' => 'any',
1018
  'posts_per_page' => bbp_get_replies_per_page(),
1019
  'paged' => bbp_get_paged(),
1030
  * Get the total number of users on the forums
1031
  *
1032
  * @since bbPress (r2769)
1033
+ * @uses count_users() To execute our query and get the var back
 
 
1034
  * @uses apply_filters() Calls 'bbp_get_total_users' with number of users
1035
  * @return int Total number of users
1036
  */
includes/users/template-tags.php CHANGED
@@ -242,6 +242,58 @@ function bbp_user_profile_link( $user_id = 0 ) {
242
  return apply_filters( 'bbp_get_user_profile_link', $user_link, $user_id );
243
  }
244
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
  /**
246
  * Output URL to the profile page of a user
247
  *
@@ -289,10 +341,7 @@ function bbp_user_profile_url( $user_id = 0, $user_nicename = '' ) {
289
 
290
  // Get username if not passed
291
  if ( empty( $user_nicename ) ) {
292
- $user = get_userdata( $user_id );
293
- if ( !empty( $user->user_nicename ) ) {
294
- $user_nicename = $user->user_nicename;
295
- }
296
  }
297
 
298
  $url = str_replace( '%' . bbp_get_user_rewrite_id() . '%', $user_nicename, $url );
@@ -493,18 +542,16 @@ function bbp_admin_link( $args = '' ) {
493
  if ( !empty( $args ) && is_string( $args ) && ( false === strpos( $args, '=' ) ) )
494
  $args = array( 'text' => $args );
495
 
496
- $defaults = array(
 
497
  'text' => __( 'Admin', 'bbpress' ),
498
  'before' => '',
499
  'after' => ''
500
- );
501
- $args = bbp_parse_args( $args, $defaults, 'get_admin_link' );
502
- extract( $args, EXTR_SKIP );
503
 
504
- $uri = admin_url();
505
- $retval = $before . '<a href="' . $uri . '">' . $text . '</a>' . $after;
506
 
507
- return apply_filters( 'bbp_get_admin_link', $retval, $args );
508
  }
509
 
510
  /** User IP *******************************************************************/
@@ -531,31 +578,27 @@ function bbp_author_ip( $args = '' ) {
531
  */
532
  function bbp_get_author_ip( $args = '' ) {
533
 
534
- // Default arguments
535
- $defaults = array(
536
- 'post_id' => 0,
 
 
 
537
  'before' => '<span class="bbp-author-ip">(',
538
  'after' => ')</span>'
539
- );
540
-
541
- $r = bbp_parse_args( $args, $defaults, 'get_author_ip' );
542
- extract( $r );
543
-
544
- // Used as post id
545
- if ( is_numeric( $args ) )
546
- $post_id = $args;
547
 
548
  // Get the author IP meta value
549
- $author_ip = get_post_meta( $post_id, '_bbp_author_ip', true );
550
  if ( !empty( $author_ip ) ) {
551
- $author_ip = $before . $author_ip . $after;
552
 
553
  // No IP address
554
  } else {
555
  $author_ip = '';
556
  }
557
 
558
- return apply_filters( 'bbp_get_author_ip', $author_ip, $args );
559
  }
560
 
561
  /** Favorites *****************************************************************/
@@ -624,14 +667,13 @@ function bbp_favorites_permalink( $user_id = 0 ) {
624
  *
625
  * @since bbPress (r2652)
626
  *
627
- * @param array $add Optional. Add to favorites args
628
- * @param array $rem Optional. Remove from favorites args
629
  * @param int $user_id Optional. User id
630
- * @param int $topic_id Optional. Topic id
631
  * @uses bbp_get_user_favorites_link() To get the user favorites link
632
  */
633
- function bbp_user_favorites_link( $add = array(), $rem = array(), $user_id = 0, $topic_id = 0 ) {
634
- echo bbp_get_user_favorites_link( $add, $rem, $user_id, $topic_id );
635
  }
636
  /**
637
  * User favorites link
@@ -641,10 +683,16 @@ function bbp_user_favorites_link( $add = array(), $rem = array(), $user_id = 0,
641
  *
642
  * @since bbPress (r2652)
643
  *
644
- * @param array $add Optional. Add to favorites args
645
- * @param array $rem Optional. Remove from favorites args
 
 
 
 
 
646
  * @param int $user_id Optional. User id
647
  * @param int $topic_id Optional. Topic id
 
648
  * @uses bbp_get_user_id() To get the user id
649
  * @uses current_user_can() If the current user can edit the user
650
  * @uses bbp_get_topic_id() To get the topic id
@@ -656,69 +704,63 @@ function bbp_user_favorites_link( $add = array(), $rem = array(), $user_id = 0,
656
  * html, add args, remove args, user & topic id
657
  * @return string User favorites link
658
  */
659
- function bbp_get_user_favorites_link( $add = array(), $rem = array(), $user_id = 0, $topic_id = 0 ) {
660
  if ( !bbp_is_favorites_active() )
661
  return false;
662
 
663
- // Validate user and topic ID's
664
- $user_id = bbp_get_user_id( $user_id, true, true );
665
- $topic_id = bbp_get_topic_id( $topic_id );
666
- if ( empty( $user_id ) || empty( $topic_id ) )
667
- return false;
 
 
 
 
668
 
669
- if ( !current_user_can( 'edit_user', (int) $user_id ) )
 
 
 
670
  return false;
671
-
672
- if ( empty( $add ) || !is_array( $add ) ) {
673
- $add = array(
674
- 'mid' => __( 'Add this topic to your favorites', 'bbpress' ),
675
- 'post' => __( ' (%?%)', 'bbpress' )
676
- );
677
  }
678
 
679
- if ( empty( $rem ) || !is_array( $rem ) ) {
680
- $rem = array(
681
- 'pre' => __( 'This topic is one of your %favorites% [', 'bbpress' ),
682
- 'mid' => __( '&times;', 'bbpress' ),
683
- 'post' => __( ']', 'bbpress' )
684
- );
685
  }
686
 
 
687
  $is_fav = bbp_is_user_favorite( $user_id, $topic_id );
688
  if ( !empty( $is_fav ) ) {
689
- $url = esc_url( bbp_get_favorites_permalink( $user_id ) );
690
- $rem = preg_replace( '|%(.+)%|', "<a href='$url'>$1</a>", $rem );
691
- $favs = array( 'action' => 'bbp_favorite_remove', 'topic_id' => $topic_id );
692
- $pre = ( is_array( $rem ) && isset( $rem['pre'] ) ) ? $rem['pre'] : '';
693
- $mid = ( is_array( $rem ) && isset( $rem['mid'] ) ) ? $rem['mid'] : ( is_string( $rem ) ? $rem : '' );
694
- $_post = ( is_array( $rem ) && isset( $rem['post'] ) ) ? $rem['post'] : '';
695
  } else {
696
- $url = esc_url( bbp_get_favorites_permalink( $user_id ) );
697
- $add = preg_replace( '|%(.+)%|', "<a href='$url'>$1</a>", $add );
698
- $favs = array( 'action' => 'bbp_favorite_add', 'topic_id' => $topic_id );
699
- $pre = ( is_array( $add ) && isset( $add['pre'] ) ) ? $add['pre'] : '';
700
- $mid = ( is_array( $add ) && isset( $add['mid'] ) ) ? $add['mid'] : ( is_string( $add ) ? $add : '' );
701
- $_post = ( is_array( $add ) && isset( $add['post'] ) ) ? $add['post'] : '';
702
  }
703
 
704
  // Create the link based where the user is and if the topic is
705
  // already the user's favorite
706
  if ( bbp_is_favorites() ) {
707
  $permalink = bbp_get_favorites_permalink( $user_id );
708
- } elseif ( is_singular( bbp_get_topic_post_type() ) ) {
709
  $permalink = bbp_get_topic_permalink( $topic_id );
710
- } elseif ( is_singular( bbp_get_reply_post_type() ) ) {
711
- $permalink = bbp_get_topic_permalink( $topic_id );
712
- } elseif ( bbp_is_query_name( 'bbp_single_topic' ) ) {
713
  $permalink = get_permalink();
714
  }
715
 
716
- $url = esc_url( wp_nonce_url( add_query_arg( $favs, $permalink ), 'toggle-favorite_' . $topic_id ) );
717
- $is_fav = $is_fav ? 'is-favorite' : '';
718
- $html = '<span id="favorite-toggle"><span id="favorite-' . $topic_id . '" class="' . $is_fav . '">' . $pre . '<a href="' . $url . '" class="dim:favorite-toggle:favorite-' . $topic_id . ':is-favorite">' . $mid . '</a>' . $_post . '</span></span>';
 
 
 
 
 
719
 
720
  // Return the link
721
- return apply_filters( 'bbp_get_user_favorites_link', $html, $add, $rem, $user_id, $topic_id );
722
  }
723
 
724
  /** Subscriptions *************************************************************/
@@ -788,10 +830,12 @@ function bbp_subscriptions_permalink( $user_id = 0 ) {
788
  * @since bbPress (r2668)
789
  *
790
  * @param mixed $args See {@link bbp_get_user_subscribe_link()}
 
 
791
  * @uses bbp_get_user_subscribe_link() To get the subscribe link
792
  */
793
- function bbp_user_subscribe_link( $args = '' ) {
794
- echo bbp_get_user_subscribe_link( $args );
795
  }
796
  /**
797
  * Return the link to subscribe/unsubscribe from a topic
@@ -806,6 +850,7 @@ function bbp_user_subscribe_link( $args = '' ) {
806
  * - before: Before the link
807
  * - after: After the link
808
  * @param int $user_id Optional. User id
 
809
  * @uses bbp_get_user_id() To get the user id
810
  * @uses current_user_can() To check if the current user can edit user
811
  * @uses bbp_get_topic_id() To get the topic id
@@ -817,24 +862,23 @@ function bbp_user_subscribe_link( $args = '' ) {
817
  * link, args, user id & topic id
818
  * @return string Permanent link to topic
819
  */
820
- function bbp_get_user_subscribe_link( $args = '', $user_id = 0 ) {
821
  if ( !bbp_is_subscriptions_active() )
822
  return;
823
 
824
- $defaults = array (
 
825
  'subscribe' => __( 'Subscribe', 'bbpress' ),
826
  'unsubscribe' => __( 'Unsubscribe', 'bbpress' ),
827
  'user_id' => 0,
828
  'topic_id' => 0,
829
  'before' => '&nbsp;|&nbsp;',
830
  'after' => ''
831
- );
832
- $args = bbp_parse_args( $args, $defaults, 'get_user_subscribe_link' );
833
- extract( $args );
834
 
835
  // Validate user and topic ID's
836
- $user_id = bbp_get_user_id( $user_id, true, true );
837
- $topic_id = bbp_get_topic_id( $topic_id );
838
  if ( empty( $user_id ) || empty( $topic_id ) ) {
839
  return false;
840
  }
@@ -847,10 +891,10 @@ function bbp_user_subscribe_link( $args = '' ) {
847
  // Decine which link to show
848
  $is_subscribed = bbp_is_user_subscribed( $user_id, $topic_id );
849
  if ( !empty( $is_subscribed ) ) {
850
- $text = $unsubscribe;
851
  $query_args = array( 'action' => 'bbp_unsubscribe', 'topic_id' => $topic_id );
852
  } else {
853
- $text = $subscribe;
854
  $query_args = array( 'action' => 'bbp_subscribe', 'topic_id' => $topic_id );
855
  }
856
 
@@ -858,20 +902,23 @@ function bbp_user_subscribe_link( $args = '' ) {
858
  // subscribed already
859
  if ( bbp_is_subscriptions() ) {
860
  $permalink = bbp_get_subscriptions_permalink( $user_id );
861
- } elseif ( is_singular( bbp_get_topic_post_type() ) ) {
862
- $permalink = bbp_get_topic_permalink( $topic_id );
863
- } elseif ( is_singular( bbp_get_reply_post_type() ) ) {
864
  $permalink = bbp_get_topic_permalink( $topic_id );
865
- } elseif ( bbp_is_query_name( 'bbp_single_topic' ) ) {
866
  $permalink = get_permalink();
867
  }
868
 
869
- $url = esc_url( wp_nonce_url( add_query_arg( $query_args, $permalink ), 'toggle-subscription_' . $topic_id ) );
870
- $is_subscribed = $is_subscribed ? 'is-subscribed' : '';
871
- $html = '<span id="subscription-toggle">' . $before . '<span id="subscribe-' . $topic_id . '" class="' . $is_subscribed . '"><a href="' . $url . '" class="dim:subscription-toggle:subscribe-' . $topic_id . ':is-subscribed">' . $text . '</a></span>' . $after . '</span>';
 
 
 
 
 
872
 
873
  // Return the link
874
- return apply_filters( 'bbp_get_user_subscribe_link', $html, $args, $user_id, $topic_id );
875
  }
876
 
877
 
@@ -1348,53 +1395,48 @@ function bbp_author_link( $args = '' ) {
1348
  */
1349
  function bbp_get_author_link( $args = '' ) {
1350
 
1351
- // Default arguments
1352
- $defaults = array(
1353
- 'post_id' => 0,
 
 
1354
  'link_title' => '',
1355
  'type' => 'both',
1356
  'size' => 80
1357
- );
1358
- $r = bbp_parse_args( $args, $defaults, 'get_author_link' );
1359
- extract( $r );
1360
-
1361
- // Used as reply_id
1362
- if ( is_numeric( $args ) )
1363
- $post_id = $args;
1364
 
1365
  // Confirmed topic
1366
- if ( bbp_is_topic( $post_id ) ) {
1367
- return bbp_get_topic_author_link( $args );
1368
 
1369
  // Confirmed reply
1370
- } elseif ( bbp_is_reply( $post_id ) ) {
1371
- return bbp_get_reply_author_link( $args );
 
1372
 
1373
  // Get the post author and proceed
1374
- } else {
1375
- $user_id = get_post_field( 'post_author', $post_id );
1376
- }
1377
 
1378
  // Neither a reply nor a topic, so could be a revision
1379
- if ( !empty( $post_id ) ) {
1380
 
1381
  // Generate title with the display name of the author
1382
- if ( empty( $link_title ) ) {
1383
- $link_title = sprintf( !bbp_is_reply_anonymous( $post_id ) ? __( 'View %s\'s profile', 'bbpress' ) : __( 'Visit %s\'s website', 'bbpress' ), get_the_author_meta( 'display_name', $user_id ) );
1384
  }
1385
 
1386
  // Assemble some link bits
1387
- $link_title = !empty( $link_title ) ? ' title="' . $link_title . '"' : '';
1388
  $author_url = bbp_get_user_profile_url( $user_id );
1389
- $anonymous = bbp_is_reply_anonymous( $post_id );
1390
 
1391
  // Get avatar
1392
- if ( 'avatar' == $type || 'both' == $type ) {
1393
- $author_links[] = get_avatar( $user_id, $size );
1394
  }
1395
 
1396
  // Get display name
1397
- if ( 'name' == $type || 'both' == $type ) {
1398
  $author_links[] = get_the_author_meta( 'display_name', $user_id );
1399
  }
1400
 
@@ -1415,7 +1457,7 @@ function bbp_author_link( $args = '' ) {
1415
  $author_link = '';
1416
  }
1417
 
1418
- return apply_filters( 'bbp_get_author_link', $author_link, $args );
1419
  }
1420
 
1421
  /** Capabilities **************************************************************/
@@ -1442,18 +1484,16 @@ function bbp_author_link( $args = '' ) {
1442
  */
1443
  function bbp_user_can_view_forum( $args = '' ) {
1444
 
1445
- // Default arguments
1446
- $defaults = array(
1447
  'user_id' => bbp_get_current_user_id(),
1448
  'forum_id' => bbp_get_forum_id(),
1449
  'check_ancestors' => false
1450
- );
1451
- $r = bbp_parse_args( $args, $defaults, 'user_can_view_forum' );
1452
- extract( $r );
1453
 
1454
  // Validate parsed values
1455
- $user_id = bbp_get_user_id ( $user_id, false, false );
1456
- $forum_id = bbp_get_forum_id( $forum_id );
1457
  $retval = false;
1458
 
1459
  // User is a super admin
@@ -1461,15 +1501,15 @@ function bbp_user_can_view_forum( $args = '' ) {
1461
  $retval = true;
1462
 
1463
  // Forum is public, and user can read forums or is not logged in
1464
- } elseif ( bbp_is_forum_public ( $forum_id, $check_ancestors ) ) {
1465
  $retval = true;
1466
 
1467
  // Forum is private, and user can see it
1468
- } elseif ( bbp_is_forum_private( $forum_id, $check_ancestors ) && current_user_can( 'read_private_forums' ) ) {
1469
  $retval = true;
1470
 
1471
  // Forum is hidden, and user can see it
1472
- } elseif ( bbp_is_forum_hidden ( $forum_id, $check_ancestors ) && current_user_can( 'read_hidden_forums' ) ) {
1473
  $retval = true;
1474
  }
1475
 
@@ -1611,13 +1651,13 @@ function bbp_get_forums_for_current_user( $args = array() ) {
1611
  if ( !empty( $forum_ids ) )
1612
  $post__not_in = implode( ',', $forum_ids );
1613
 
1614
- $defaults = array(
 
1615
  'post_type' => bbp_get_forum_post_type(),
1616
  'post_status' => bbp_get_public_status_id(),
1617
  'numberposts' => -1,
1618
  'exclude' => $post__not_in
1619
- );
1620
- $r = bbp_parse_args( $args, $defaults, 'get_forums_for_current_user' );
1621
 
1622
  // Get the forums
1623
  $forums = get_posts( $r );
242
  return apply_filters( 'bbp_get_user_profile_link', $user_link, $user_id );
243
  }
244
 
245
+ /**
246
+ * Output a users nicename to the screen
247
+ *
248
+ * @since bbPress (r4671)
249
+ *
250
+ * @param int $user_id User ID whose nicename to get
251
+ * @param array $args before|after|user_id|force
252
+ */
253
+ function bbp_user_nicename( $user_id = 0, $args = array() ) {
254
+ echo bbp_get_user_nicename( $user_id, $args );
255
+ }
256
+ /**
257
+ * Return a users nicename to the screen
258
+ *
259
+ * @since bbPress (r4671)
260
+ *
261
+ * @param int $user_id User ID whose nicename to get
262
+ * @param array $args before|after|user_id|force
263
+ * @return string User nicename, maybe wrapped in before/after strings
264
+ */
265
+ function bbp_get_user_nicename( $user_id = 0, $args = array() ) {
266
+
267
+ // Bail if no user ID passed
268
+ $user_id = bbp_get_user_id( $user_id, false, false );
269
+ if ( empty( $user_id ) )
270
+ return false;
271
+
272
+ // Parse default arguments
273
+ $r = bbp_parse_args( $args, array(
274
+ 'user_id' => $user_id,
275
+ 'before' => '',
276
+ 'after' => '',
277
+ 'force' => ''
278
+ ), 'get_user_nicename' );
279
+
280
+ // Get the user data and nicename
281
+ if ( empty( $r['force'] ) ) {
282
+ $user = get_userdata( $user_id );
283
+ $nicename = $user->user_nicename;
284
+
285
+ // Force the nicename to something else
286
+ } else {
287
+ $nicename = (string) $r['force'];
288
+ }
289
+
290
+ // Maybe wrap the nicename
291
+ $retval = !empty( $nicename ) ? ( $r['before'] . $nicename . $r['after'] ) : '';
292
+
293
+ // Filter and return
294
+ return (string) apply_filters( 'bbp_get_user_nicename', $retval, $user_id, $args );
295
+ }
296
+
297
  /**
298
  * Output URL to the profile page of a user
299
  *
341
 
342
  // Get username if not passed
343
  if ( empty( $user_nicename ) ) {
344
+ $user_nicename = bbp_get_user_nicename( $user_id );
 
 
 
345
  }
346
 
347
  $url = str_replace( '%' . bbp_get_user_rewrite_id() . '%', $user_nicename, $url );
542
  if ( !empty( $args ) && is_string( $args ) && ( false === strpos( $args, '=' ) ) )
543
  $args = array( 'text' => $args );
544
 
545
+ // Parse arguments against default values
546
+ $r = bbp_parse_args( $args, array(
547
  'text' => __( 'Admin', 'bbpress' ),
548
  'before' => '',
549
  'after' => ''
550
+ ), 'get_admin_link' );
 
 
551
 
552
+ $retval = $r['before'] . '<a href="' . admin_url() . '">' . $r['text'] . '</a>' . $r['after'];
 
553
 
554
+ return apply_filters( 'bbp_get_admin_link', $retval, $r );
555
  }
556
 
557
  /** User IP *******************************************************************/
578
  */
579
  function bbp_get_author_ip( $args = '' ) {
580
 
581
+ // Used as post id
582
+ $post_id = is_numeric( $args ) ? (int) $args : 0;
583
+
584
+ // Parse arguments against default values
585
+ $r = bbp_parse_args( $args, array(
586
+ 'post_id' => $post_id,
587
  'before' => '<span class="bbp-author-ip">(',
588
  'after' => ')</span>'
589
+ ), 'get_author_ip' );
 
 
 
 
 
 
 
590
 
591
  // Get the author IP meta value
592
+ $author_ip = get_post_meta( $r['post_id'], '_bbp_author_ip', true );
593
  if ( !empty( $author_ip ) ) {
594
+ $author_ip = $r['before'] . $author_ip . $r['after'];
595
 
596
  // No IP address
597
  } else {
598
  $author_ip = '';
599
  }
600
 
601
+ return apply_filters( 'bbp_get_author_ip', $author_ip, $r );
602
  }
603
 
604
  /** Favorites *****************************************************************/
667
  *
668
  * @since bbPress (r2652)
669
  *
670
+ * @param mixed $args See {@link bbp_get_user_favorites_link()}
 
671
  * @param int $user_id Optional. User id
672
+ * @param bool $wrap Optional. If you want to wrap the link in <span id="favorite-toggle">.
673
  * @uses bbp_get_user_favorites_link() To get the user favorites link
674
  */
675
+ function bbp_user_favorites_link( $args = array(), $user_id = 0, $wrap = true ) {
676
+ echo bbp_get_user_favorites_link( $args, $user_id, $wrap );
677
  }
678
  /**
679
  * User favorites link
683
  *
684
  * @since bbPress (r2652)
685
  *
686
+ * @param mixed $args This function supports these arguments:
687
+ * - subscribe: Favorite text
688
+ * - unsubscribe: Unfavorite text
689
+ * - user_id: User id
690
+ * - topic_id: Topic id
691
+ * - before: Before the link
692
+ * - after: After the link
693
  * @param int $user_id Optional. User id
694
  * @param int $topic_id Optional. Topic id
695
+ * @param bool $wrap Optional. If you want to wrap the link in <span id="favorite-toggle">. See ajax_favorite()
696
  * @uses bbp_get_user_id() To get the user id
697
  * @uses current_user_can() If the current user can edit the user
698
  * @uses bbp_get_topic_id() To get the topic id
704
  * html, add args, remove args, user & topic id
705
  * @return string User favorites link
706
  */
707
+ function bbp_get_user_favorites_link( $args = '', $user_id = 0, $wrap = true ) {
708
  if ( !bbp_is_favorites_active() )
709
  return false;
710
 
711
+ // Parse arguments against default values
712
+ $r = bbp_parse_args( $args, array(
713
+ 'favorite' => __( 'Favorite', 'bbpress' ),
714
+ 'favorited' => __( 'Favorited', 'bbpress' ),
715
+ 'user_id' => 0,
716
+ 'topic_id' => 0,
717
+ 'before' => '',
718
+ 'after' => ''
719
+ ), 'get_user_favorites_link' );
720
 
721
+ // Validate user and topic ID's
722
+ $user_id = bbp_get_user_id( $r['user_id'], true, true );
723
+ $topic_id = bbp_get_topic_id( $r['topic_id'] );
724
+ if ( empty( $user_id ) || empty( $topic_id ) ) {
725
  return false;
 
 
 
 
 
 
726
  }
727
 
728
+ // No link if you can't edit yourself
729
+ if ( !current_user_can( 'edit_user', (int) $user_id ) ) {
730
+ return false;
 
 
 
731
  }
732
 
733
+ // Decine which link to show
734
  $is_fav = bbp_is_user_favorite( $user_id, $topic_id );
735
  if ( !empty( $is_fav ) ) {
736
+ $text = $r['favorited'];
737
+ $query_args = array( 'action' => 'bbp_favorite_remove', 'topic_id' => $topic_id );
 
 
 
 
738
  } else {
739
+ $text = $r['favorite'];
740
+ $query_args = array( 'action' => 'bbp_favorite_add', 'topic_id' => $topic_id );
 
 
 
 
741
  }
742
 
743
  // Create the link based where the user is and if the topic is
744
  // already the user's favorite
745
  if ( bbp_is_favorites() ) {
746
  $permalink = bbp_get_favorites_permalink( $user_id );
747
+ } elseif ( bbp_is_single_topic() || bbp_is_single_reply() ) {
748
  $permalink = bbp_get_topic_permalink( $topic_id );
749
+ } else {
 
 
750
  $permalink = get_permalink();
751
  }
752
 
753
+ $url = esc_url( wp_nonce_url( add_query_arg( $query_args, $permalink ), 'toggle-favorite_' . $topic_id ) );
754
+ $sub = $is_fav ? ' class="is-favorite"' : '';
755
+ $html = sprintf( '%s<span id="favorite-%d" %s><a href="%s" class="favorite-toggle" data-topic="%d">%s</a></span>%s', $r['before'], $topic_id, $sub, $url, $topic_id, $text, $r['after'] );
756
+
757
+ // Initial output is wrapped in a span, ajax output is hooked to this
758
+ if ( !empty( $wrap ) ) {
759
+ $html = '<span id="favorite-toggle">' . $html . '</span>';
760
+ }
761
 
762
  // Return the link
763
+ return apply_filters( 'bbp_get_user_favorites_link', $html, $r, $user_id, $topic_id );
764
  }
765
 
766
  /** Subscriptions *************************************************************/
830
  * @since bbPress (r2668)
831
  *
832
  * @param mixed $args See {@link bbp_get_user_subscribe_link()}
833
+ * @param int $user_id Optional. User id
834
+ * @param bool $wrap Optional. If you want to wrap the link in <span id="subscription-toggle">.
835
  * @uses bbp_get_user_subscribe_link() To get the subscribe link
836
  */
837
+ function bbp_user_subscribe_link( $args = '', $user_id = 0, $wrap = true ) {
838
+ echo bbp_get_user_subscribe_link( $args, $user_id, $wrap );
839
  }
840
  /**
841
  * Return the link to subscribe/unsubscribe from a topic
850
  * - before: Before the link
851
  * - after: After the link
852
  * @param int $user_id Optional. User id
853
+ * @param bool $wrap Optional. If you want to wrap the link in <span id="subscription-toggle">.
854
  * @uses bbp_get_user_id() To get the user id
855
  * @uses current_user_can() To check if the current user can edit user
856
  * @uses bbp_get_topic_id() To get the topic id
862
  * link, args, user id & topic id
863
  * @return string Permanent link to topic
864
  */
865
+ function bbp_get_user_subscribe_link( $args = '', $user_id = 0, $wrap = true ) {
866
  if ( !bbp_is_subscriptions_active() )
867
  return;
868
 
869
+ // Parse arguments against default values
870
+ $r = bbp_parse_args( $args, array(
871
  'subscribe' => __( 'Subscribe', 'bbpress' ),
872
  'unsubscribe' => __( 'Unsubscribe', 'bbpress' ),
873
  'user_id' => 0,
874
  'topic_id' => 0,
875
  'before' => '&nbsp;|&nbsp;',
876
  'after' => ''
877
+ ), 'get_user_subscribe_link' );
 
 
878
 
879
  // Validate user and topic ID's
880
+ $user_id = bbp_get_user_id( $r['user_id'], true, true );
881
+ $topic_id = bbp_get_topic_id( $r['topic_id'] );
882
  if ( empty( $user_id ) || empty( $topic_id ) ) {
883
  return false;
884
  }
891
  // Decine which link to show
892
  $is_subscribed = bbp_is_user_subscribed( $user_id, $topic_id );
893
  if ( !empty( $is_subscribed ) ) {
894
+ $text = $r['unsubscribe'];
895
  $query_args = array( 'action' => 'bbp_unsubscribe', 'topic_id' => $topic_id );
896
  } else {
897
+ $text = $r['subscribe'];
898
  $query_args = array( 'action' => 'bbp_subscribe', 'topic_id' => $topic_id );
899
  }
900
 
902
  // subscribed already
903
  if ( bbp_is_subscriptions() ) {
904
  $permalink = bbp_get_subscriptions_permalink( $user_id );
905
+ } elseif ( bbp_is_single_topic() || bbp_is_single_reply() ) {
 
 
906
  $permalink = bbp_get_topic_permalink( $topic_id );
907
+ } else {
908
  $permalink = get_permalink();
909
  }
910
 
911
+ $url = esc_url( wp_nonce_url( add_query_arg( $query_args, $permalink ), 'toggle-subscription_' . $topic_id ) );
912
+ $sub = $is_subscribed ? ' class="is-subscribed"' : '';
913
+ $html = sprintf( '%s<span id="subscribe-%d" %s><a href="%s" class="subscription-toggle" data-topic="%d">%s</a></span>%s', $r['before'], $topic_id, $sub, $url, $topic_id, $text, $r['after'] );
914
+
915
+ // Initial output is wrapped in a span, ajax output is hooked to this
916
+ if ( !empty( $wrap ) ) {
917
+ $html = '<span id="subscription-toggle">' . $html . '</span>';
918
+ }
919
 
920
  // Return the link
921
+ return apply_filters( 'bbp_get_user_subscribe_link', $html, $r, $user_id, $topic_id );
922
  }
923
 
924
 
1395
  */
1396
  function bbp_get_author_link( $args = '' ) {
1397
 
1398
+ $post_id = is_numeric( $args ) ? (int) $args : 0;
1399
+
1400
+ // Parse arguments against default values
1401
+ $r = bbp_parse_args( $args, array(
1402
+ 'post_id' => $post_id,
1403
  'link_title' => '',
1404
  'type' => 'both',
1405
  'size' => 80
1406
+ ), 'get_author_link' );
 
 
 
 
 
 
1407
 
1408
  // Confirmed topic
1409
+ if ( bbp_is_topic( $r['post_id'] ) ) {
1410
+ return bbp_get_topic_author_link( $r );
1411
 
1412
  // Confirmed reply
1413
+ } elseif ( bbp_is_reply( $r['post_id'] ) ) {
1414
+ return bbp_get_reply_author_link( $r );
1415
+ }
1416
 
1417
  // Get the post author and proceed
1418
+ $user_id = get_post_field( 'post_author', $r['post_id'] );
 
 
1419
 
1420
  // Neither a reply nor a topic, so could be a revision
1421
+ if ( !empty( $r['post_id'] ) ) {
1422
 
1423
  // Generate title with the display name of the author
1424
+ if ( empty( $r['link_title'] ) ) {
1425
+ $r['link_title'] = sprintf( !bbp_is_reply_anonymous( $r['post_id'] ) ? __( 'View %s\'s profile', 'bbpress' ) : __( 'Visit %s\'s website', 'bbpress' ), get_the_author_meta( 'display_name', $user_id ) );
1426
  }
1427
 
1428
  // Assemble some link bits
1429
+ $link_title = !empty( $r['link_title'] ) ? ' title="' . $r['link_title'] . '"' : '';
1430
  $author_url = bbp_get_user_profile_url( $user_id );
1431
+ $anonymous = bbp_is_reply_anonymous( $r['post_id'] );
1432
 
1433
  // Get avatar
1434
+ if ( 'avatar' == $r['type'] || 'both' == $r['type'] ) {
1435
+ $author_links[] = get_avatar( $user_id, $r['size'] );
1436
  }
1437
 
1438
  // Get display name
1439
+ if ( 'name' == $r['type'] || 'both' == $r['type'] ) {
1440
  $author_links[] = get_the_author_meta( 'display_name', $user_id );
1441
  }
1442
 
1457
  $author_link = '';
1458
  }
1459
 
1460
+ return apply_filters( 'bbp_get_author_link', $author_link, $r );
1461
  }
1462
 
1463
  /** Capabilities **************************************************************/
1484
  */
1485
  function bbp_user_can_view_forum( $args = '' ) {
1486
 
1487
+ // Parse arguments against default values
1488
+ $r = bbp_parse_args( $args, array(
1489
  'user_id' => bbp_get_current_user_id(),
1490
  'forum_id' => bbp_get_forum_id(),
1491
  'check_ancestors' => false
1492
+ ), 'user_can_view_forum' );
 
 
1493
 
1494
  // Validate parsed values
1495
+ $user_id = bbp_get_user_id ( $r['user_id'], false, false );
1496
+ $forum_id = bbp_get_forum_id( $r['forum_id'] );
1497
  $retval = false;
1498
 
1499
  // User is a super admin
1501
  $retval = true;
1502
 
1503
  // Forum is public, and user can read forums or is not logged in
1504
+ } elseif ( bbp_is_forum_public ( $forum_id, $r['check_ancestors'] ) ) {
1505
  $retval = true;
1506
 
1507
  // Forum is private, and user can see it
1508
+ } elseif ( bbp_is_forum_private( $forum_id, $r['check_ancestors'] ) && user_can( $user_id, 'read_private_forums' ) ) {
1509
  $retval = true;
1510
 
1511
  // Forum is hidden, and user can see it
1512
+ } elseif ( bbp_is_forum_hidden ( $forum_id, $r['check_ancestors'] ) && user_can( $user_id, 'read_hidden_forums' ) ) {
1513
  $retval = true;
1514
  }
1515
 
1651
  if ( !empty( $forum_ids ) )
1652
  $post__not_in = implode( ',', $forum_ids );
1653
 
1654
+ // Parse arguments against default values
1655
+ $r = bbp_parse_args( $args, array(
1656
  'post_type' => bbp_get_forum_post_type(),
1657
  'post_status' => bbp_get_public_status_id(),
1658
  'numberposts' => -1,
1659
  'exclude' => $post__not_in
1660
+ ), 'get_forums_for_current_user' );
 
1661
 
1662
  // Get the forums
1663
  $forums = get_posts( $r );
languages/bbpress.pot CHANGED
@@ -1,106 +1,106 @@
1
- # Copyright (C) 2012 bbPress
2
  # This file is distributed under the same license as the bbPress package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: bbPress 2.2\n"
6
- "Report-Msgid-Bugs-To: http://bbpress.org\n"
7
- "POT-Creation-Date: 2012-11-19 06:18:52+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: 2012-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
 
15
- #: bbpress.php:130 bbpress.php:137
16
  msgid "Cheatin&#8217; huh?"
17
  msgstr ""
18
 
19
- #: bbpress.php:388 templates/default/bbpress-functions.php:68
20
  msgid "bbPress Default"
21
  msgstr ""
22
 
23
- #: bbpress.php:471 bbpress.php:472 includes/admin/admin.php:208
24
- #: includes/admin/admin.php:209 includes/admin/admin.php:219
25
- #: includes/admin/admin.php:220 includes/admin/users.php:82
26
- #: includes/extend/buddypress/group.php:503
27
  #: includes/extend/buddypress/loader.php:42
28
  #: includes/extend/buddypress/loader.php:170
29
  #: includes/extend/buddypress/loader.php:259
30
  #: includes/extend/buddypress/loader.php:310
31
- #: templates/default/extras/page-forum-statistics.php:39
32
  msgid "Forums"
33
  msgstr ""
34
 
35
- #: bbpress.php:473 includes/admin/forums.php:420
36
  #: includes/admin/metaboxes.php:50 includes/admin/metaboxes.php:358
37
  #: includes/admin/metaboxes.php:411 includes/admin/replies.php:621
38
- #: includes/admin/topics.php:686 includes/extend/buddypress/group.php:36
39
- #: includes/extend/buddypress/group.php:37
40
- #: includes/forums/template-tags.php:2135
41
  #: templates/default/bbpress/loop-forums.php:19
42
  msgid "Forum"
43
  msgstr ""
44
 
45
- #: bbpress.php:474 includes/admin/tools.php:1004
46
  msgid "All Forums"
47
  msgstr ""
48
 
49
- #: bbpress.php:475 bbpress.php:479
50
  msgid "New Forum"
51
  msgstr ""
52
 
53
- #: bbpress.php:476 templates/default/bbpress/form-forum.php:37
54
  msgid "Create New Forum"
55
  msgstr ""
56
 
57
- #: bbpress.php:477 bbpress.php:534 bbpress.php:591
58
- #: includes/common/template-tags.php:1959
59
- #: includes/replies/template-tags.php:1525
60
- #: includes/topics/template-tags.php:2261
61
  #: templates/default/bbpress/user-details.php:65
62
  msgid "Edit"
63
  msgstr ""
64
 
65
- #: bbpress.php:478
66
  msgid "Edit Forum"
67
  msgstr ""
68
 
69
- #: bbpress.php:480 bbpress.php:481
70
  msgid "View Forum"
71
  msgstr ""
72
 
73
- #: bbpress.php:482
74
  msgid "Search Forums"
75
  msgstr ""
76
 
77
- #: bbpress.php:483
78
  msgid "No forums found"
79
  msgstr ""
80
 
81
- #: bbpress.php:484
82
  msgid "No forums found in Trash"
83
  msgstr ""
84
 
85
- #: bbpress.php:485 templates/default/bbpress/form-forum.php:129
86
  msgid "Parent Forum:"
87
  msgstr ""
88
 
89
- #: bbpress.php:508
90
  msgid "bbPress Forums"
91
  msgstr ""
92
 
93
- #: bbpress.php:528 bbpress.php:529 includes/admin/forums.php:421
94
  #: includes/admin/settings.php:187 includes/admin/settings.php:208
95
- #: includes/admin/topics.php:685 includes/extend/buddypress/activity.php:399
96
- #: includes/extend/buddypress/group.php:507
97
- #: includes/forums/template-tags.php:2283
 
98
  #: templates/default/bbpress/loop-forums.php:20
99
- #: templates/default/extras/page-forum-statistics.php:44
100
  msgid "Topics"
101
  msgstr ""
102
 
103
- #: bbpress.php:530 includes/admin/metaboxes.php:67
104
  #: includes/admin/metaboxes.php:437 includes/admin/replies.php:622
105
  #: templates/default/bbpress/content-single-topic-lead.php:22
106
  #: templates/default/bbpress/content-single-topic-lead.php:94
@@ -108,351 +108,351 @@ msgstr ""
108
  msgid "Topic"
109
  msgstr ""
110
 
111
- #: bbpress.php:531 includes/admin/tools.php:1005
112
- #: includes/topics/functions.php:3224
113
  msgid "All Topics"
114
  msgstr ""
115
 
116
- #: bbpress.php:532 bbpress.php:536
117
  msgid "New Topic"
118
  msgstr ""
119
 
120
- #: bbpress.php:533 templates/default/bbpress/form-topic.php:43
121
  msgid "Create New Topic"
122
  msgstr ""
123
 
124
- #: bbpress.php:535
125
  msgid "Edit Topic"
126
  msgstr ""
127
 
128
- #: bbpress.php:537 bbpress.php:538
129
  msgid "View Topic"
130
  msgstr ""
131
 
132
- #: bbpress.php:539
133
  msgid "Search Topics"
134
  msgstr ""
135
 
136
- #: bbpress.php:540
137
  msgid "No topics found"
138
  msgstr ""
139
 
140
- #: bbpress.php:541
141
  msgid "No topics found in Trash"
142
  msgstr ""
143
 
144
- #: bbpress.php:542 includes/admin/metaboxes.php:357
145
- #: includes/admin/metaboxes.php:410 includes/extend/buddypress/group.php:808
146
  #: templates/default/bbpress/form-topic.php:125
147
  msgid "Forum:"
148
  msgstr ""
149
 
150
- #: bbpress.php:565
151
  msgid "bbPress Topics"
152
  msgstr ""
153
 
154
- #: bbpress.php:585 bbpress.php:586 includes/admin/forums.php:422
155
  #: includes/admin/settings.php:195 includes/admin/settings.php:216
156
- #: includes/admin/topics.php:687 includes/core/theme-compat.php:552
157
- #: includes/extend/buddypress/activity.php:400
158
- #: includes/forums/template-tags.php:2347
 
159
  #: templates/default/bbpress/loop-forums.php:21
160
  #: templates/default/bbpress/loop-replies.php:32
161
  #: templates/default/bbpress/loop-replies.php:62
162
  #: templates/default/bbpress/loop-topics.php:21
163
- #: templates/default/extras/page-forum-statistics.php:49
164
  msgid "Replies"
165
  msgstr ""
166
 
167
- #: bbpress.php:587 includes/admin/metaboxes.php:84
168
  msgid "Reply"
169
  msgstr ""
170
 
171
- #: bbpress.php:588 includes/admin/tools.php:1006
172
- #: includes/replies/functions.php:1514
173
  msgid "All Replies"
174
  msgstr ""
175
 
176
- #: bbpress.php:589 bbpress.php:593
177
  msgid "New Reply"
178
  msgstr ""
179
 
180
- #: bbpress.php:590
181
  msgid "Create New Reply"
182
  msgstr ""
183
 
184
- #: bbpress.php:592
185
  msgid "Edit Reply"
186
  msgstr ""
187
 
188
- #: bbpress.php:594 bbpress.php:595
189
  msgid "View Reply"
190
  msgstr ""
191
 
192
- #: bbpress.php:596
193
  msgid "Search Replies"
194
  msgstr ""
195
 
196
- #: bbpress.php:597
197
  msgid "No replies found"
198
  msgstr ""
199
 
200
- #: bbpress.php:598
201
  msgid "No replies found in Trash"
202
  msgstr ""
203
 
204
- #: bbpress.php:599 includes/admin/metaboxes.php:436
205
  msgid "Topic:"
206
  msgstr ""
207
 
208
- #: bbpress.php:622
209
  msgid "bbPress Replies"
210
  msgstr ""
211
 
212
- #: bbpress.php:657
213
  msgctxt "post"
214
  msgid "Closed"
215
  msgstr ""
216
 
217
- #: bbpress.php:658
218
  msgctxt "bbpress"
219
  msgid "Closed <span class=\"count\">(%s)</span>"
220
  msgid_plural "Closed <span class=\"count\">(%s)</span>"
221
  msgstr[0] ""
222
  msgstr[1] ""
223
 
224
- #: bbpress.php:668
225
  msgctxt "post"
226
  msgid "Spam"
227
  msgstr ""
228
 
229
- #: bbpress.php:669
230
  msgctxt "bbpress"
231
  msgid "Spam <span class=\"count\">(%s)</span>"
232
  msgid_plural "Spam <span class=\"count\">(%s)</span>"
233
  msgstr[0] ""
234
  msgstr[1] ""
235
 
236
- #: bbpress.php:681
237
  msgctxt "post"
238
  msgid "Orphan"
239
  msgstr ""
240
 
241
- #: bbpress.php:682
242
  msgctxt "bbpress"
243
  msgid "Orphan <span class=\"count\">(%s)</span>"
244
  msgid_plural "Orphans <span class=\"count\">(%s)</span>"
245
  msgstr[0] ""
246
  msgstr[1] ""
247
 
248
- #: bbpress.php:694
249
  msgctxt "post"
250
  msgid "Hidden"
251
  msgstr ""
252
 
253
- #: bbpress.php:695
254
  msgctxt "bbpress"
255
  msgid "Hidden <span class=\"count\">(%s)</span>"
256
  msgid_plural "Hidden <span class=\"count\">(%s)</span>"
257
  msgstr[0] ""
258
  msgstr[1] ""
259
 
260
- #: bbpress.php:740 templates/default/extras/page-forum-statistics.php:54
261
  msgid "Topic Tags"
262
  msgstr ""
263
 
264
- #: bbpress.php:741 includes/admin/metaboxes.php:103
265
  msgid "Topic Tag"
266
  msgstr ""
267
 
268
- #: bbpress.php:742
269
  msgid "Search Tags"
270
  msgstr ""
271
 
272
- #: bbpress.php:743
273
  msgid "Popular Tags"
274
  msgstr ""
275
 
276
- #: bbpress.php:744
277
  msgid "All Tags"
278
  msgstr ""
279
 
280
- #: bbpress.php:745
281
  msgid "Edit Tag"
282
  msgstr ""
283
 
284
- #: bbpress.php:746
285
  msgid "Update Tag"
286
  msgstr ""
287
 
288
- #: bbpress.php:747
289
  msgid "Add New Tag"
290
  msgstr ""
291
 
292
- #: bbpress.php:748
293
  msgid "New Tag Name"
294
  msgstr ""
295
 
296
- #: bbpress.php:749
297
  msgid "View Topic Tag"
298
  msgstr ""
299
 
300
- #: bbpress.php:787
301
  msgid "Topics with no replies"
302
  msgstr ""
303
 
304
- #: includes/admin/admin.php:173 includes/admin/functions.php:224
305
  #: includes/admin/tools.php:34
306
  msgid "Repair Forums"
307
  msgstr ""
308
 
309
- #: includes/admin/admin.php:174
310
  msgid "Forum Repair"
311
  msgstr ""
312
 
313
- #: includes/admin/admin.php:183 includes/admin/functions.php:228
314
- #: includes/admin/settings.php:1244
315
  msgid "Import Forums"
316
  msgstr ""
317
 
318
- #: includes/admin/admin.php:184
319
  msgid "Forum Import"
320
  msgstr ""
321
 
322
- #: includes/admin/admin.php:193 includes/admin/functions.php:232
323
- #: includes/admin/tools.php:995
324
  msgid "Reset Forums"
325
  msgstr ""
326
 
327
- #: includes/admin/admin.php:194
328
  msgid "Forum Reset"
329
  msgstr ""
330
 
331
- #: includes/admin/admin.php:232 includes/admin/admin.php:233
332
- #: includes/admin/admin.php:241 includes/admin/admin.php:242
333
  msgid "Welcome to bbPress"
334
  msgstr ""
335
 
336
- #: includes/admin/admin.php:255 includes/admin/admin.php:256
337
- #: includes/admin/admin.php:277 includes/admin/admin.php:278
338
- #: includes/admin/admin.php:1583 includes/admin/admin.php:1672
339
  msgid "Update Forums"
340
  msgstr ""
341
 
342
- #: includes/admin/admin.php:468
343
  msgid "Settings"
344
  msgstr ""
345
 
346
- #: includes/admin/admin.php:469
347
  msgid "About"
348
  msgstr ""
349
 
350
- #: includes/admin/admin.php:481
351
  msgid "Right Now in Forums"
352
  msgstr ""
353
 
354
- #: includes/admin/admin.php:1237
355
  msgctxt "admin color scheme"
356
  msgid "Green"
357
  msgstr ""
358
 
359
- #: includes/admin/admin.php:1278
360
  msgid "%s - %s"
361
  msgstr ""
362
 
363
- #: includes/admin/admin.php:1296 includes/admin/admin.php:1402
364
  msgid "Welcome to bbPress %s"
365
  msgstr ""
366
 
367
- #: includes/admin/admin.php:1297 includes/admin/admin.php:1403
368
  msgid ""
369
  "Thank you for updating to the latest version! bbPress %s is ready to make "
370
  "your community a safer, faster, and better looking place to hang out!"
371
  msgstr ""
372
 
373
- #: includes/admin/admin.php:1298 includes/admin/admin.php:1404
374
  msgid "Version %s"
375
  msgstr ""
376
 
377
- #: includes/admin/admin.php:1302 includes/admin/admin.php:1408
378
  msgid "What&#8217;s New"
379
  msgstr ""
380
 
381
- #: includes/admin/admin.php:1304 includes/admin/admin.php:1410
382
  msgid "Credits"
383
  msgstr ""
384
 
385
- #: includes/admin/admin.php:1309
386
  msgid "In-depth User Profiles"
387
  msgstr ""
388
 
389
- #: includes/admin/admin.php:1312
390
  msgid "User Details"
391
  msgstr ""
392
 
393
- #: includes/admin/admin.php:1313
394
  msgid ""
395
  "Forum profiles include the details of your forum activity, including your "
396
  "topics and replies, subscriptions, and favorites."
397
  msgstr ""
398
 
399
- #: includes/admin/admin.php:1315
400
  msgid "Easy Updating"
401
  msgstr ""
402
 
403
- #: includes/admin/admin.php:1316
404
  msgid "You can easily update your profile without leaving bbPress."
405
  msgstr ""
406
 
407
- #: includes/admin/admin.php:1321
408
- msgid "Theme Compatability"
409
  msgstr ""
410
 
411
- #: includes/admin/admin.php:1324
412
  msgid "Twenty Twelve"
413
  msgstr ""
414
 
415
- #: includes/admin/admin.php:1325
416
  msgid ""
417
  "Updated default templates are now Twenty Twelve compatible, and we refreshed "
418
  "our CSS to better integrate with other popular themes, too."
419
  msgstr ""
420
 
421
- #: includes/admin/admin.php:1330
422
  msgid "Improved User Management"
423
  msgstr ""
424
 
425
- #: includes/admin/admin.php:1333
426
  msgid "Dynamic User Roles and Capabilities"
427
  msgstr ""
428
 
429
- #: includes/admin/admin.php:1334
430
  msgid ""
431
  "bbPress now includes some fancy user-roles with smart default capabilities "
432
  "to help you manage your forums. New roles include Key Master (for complete "
433
  "administrative access), Moderator, and Participant for regular forum users."
434
  msgstr ""
435
 
436
- #: includes/admin/admin.php:1336
437
  msgid "Manage Forum Users from WordPress"
438
  msgstr ""
439
 
440
- #: includes/admin/admin.php:1337
441
  msgid ""
442
  "You can assign Forums roles to users individually, or bulk update them from "
443
  "the WordPress Users page. Users automatically start out as forum "
444
  "participants."
445
  msgstr ""
446
 
447
- #: includes/admin/admin.php:1342
448
  msgid "Better BuddyPress Integration"
449
  msgstr ""
450
 
451
- #: includes/admin/admin.php:1345
452
  msgid "Use bbPress for Your BuddyPress Group Forums"
453
  msgstr ""
454
 
455
- #: includes/admin/admin.php:1346
456
  msgid ""
457
  "You can now use bbPress to manage your BuddyPress Group Forums, allowing for "
458
  "seamless integration and improved plugin performance. Plugins developed for "
@@ -460,136 +460,136 @@ msgid ""
460
  "experience."
461
  msgstr ""
462
 
463
- #: includes/admin/admin.php:1348
464
  msgid "Activity Stream Syncing"
465
  msgstr ""
466
 
467
- #: includes/admin/admin.php:1349
468
  msgid ""
469
  "bbPress now keeps track of changes to topics and replies and keeps their "
470
  "corresponding BuddyPress Activity Stream updates synced."
471
  msgstr ""
472
 
473
- #: includes/admin/admin.php:1354
474
  msgid "Under the Hood"
475
  msgstr ""
476
 
477
- #: includes/admin/admin.php:1358
478
  msgid "Template Logic"
479
  msgstr ""
480
 
481
- #: includes/admin/admin.php:1359
482
  msgid ""
483
  "New functions and template stacks are in place to help plugin developers "
484
  "extend bbPress further."
485
  msgstr ""
486
 
487
- #: includes/admin/admin.php:1361
488
  msgid "Plugin Directory Structure"
489
  msgstr ""
490
 
491
- #: includes/admin/admin.php:1362
492
  msgid ""
493
  "We simplified the bbPress plugin directory structure, making it easier for "
494
  "plugin developers to find the relevant code."
495
  msgstr ""
496
 
497
- #: includes/admin/admin.php:1366
498
  msgid "Autocomplete"
499
  msgstr ""
500
 
501
- #: includes/admin/admin.php:1367
502
  msgid ""
503
  "In WordPress Admin, you now select a parent forum or topic via autocomplete "
504
  "rather than a dropdown."
505
  msgstr ""
506
 
507
- #: includes/admin/admin.php:1369
508
  msgid "Fancy Editor Support"
509
  msgstr ""
510
 
511
- #: includes/admin/admin.php:1370
512
  msgid ""
513
  "We improved our support of the Fancy Editor, giving forum users a better "
514
  "experience."
515
  msgstr ""
516
 
517
- #: includes/admin/admin.php:1374
518
  msgid "WordPress 3.5-ready"
519
  msgstr ""
520
 
521
- #: includes/admin/admin.php:1375
522
  msgid ""
523
  "bbPress 2.2 has been thoroughly tested against the ongoing development of "
524
  "WordPress 3.5."
525
  msgstr ""
526
 
527
- #: includes/admin/admin.php:1381 includes/admin/admin.php:1509
528
  msgid "Go to Forum Settings"
529
  msgstr ""
530
 
531
- #: includes/admin/admin.php:1414
532
  msgid "bbPress is created by a worldwide swarm of busy, busy bees."
533
  msgstr ""
534
 
535
- #: includes/admin/admin.php:1416
536
  msgid "Project Leaders"
537
  msgstr ""
538
 
539
- #: includes/admin/admin.php:1421
540
  msgid "Founding Developer"
541
  msgstr ""
542
 
543
- #: includes/admin/admin.php:1426
544
  msgid "Lead Developer"
545
  msgstr ""
546
 
547
- #: includes/admin/admin.php:1430
548
  msgid "Contributing Developers"
549
  msgstr ""
550
 
551
- #: includes/admin/admin.php:1449
552
  msgid "Codex Rockstars"
553
  msgstr ""
554
 
555
- #: includes/admin/admin.php:1468
556
  msgid "Core Contributors to bbPress 2.2"
557
  msgstr ""
558
 
559
- #: includes/admin/admin.php:1535 includes/admin/admin.php:1557
560
  msgid "Update Forum"
561
  msgstr ""
562
 
563
- #: includes/admin/admin.php:1546 includes/admin/admin.php:1600
564
  msgid "All done!"
565
  msgstr ""
566
 
567
- #: includes/admin/admin.php:1547 includes/admin/admin.php:1601
568
  msgid "Go Back"
569
  msgstr ""
570
 
571
- #: includes/admin/admin.php:1556
572
  msgid ""
573
  "You can update your forum through this page. Hit the link below to update."
574
  msgstr ""
575
 
576
- #: includes/admin/admin.php:1628
577
  msgid ""
578
  "Warning! Problem updating %1$s. Your server may not be able to connect to "
579
  "sites running on it. Error message: <em>%2$s</em>"
580
  msgstr ""
581
 
582
- #: includes/admin/admin.php:1652
583
  msgid ""
584
  "If your browser doesn&#8217;t start loading the next page automatically, "
585
  "click this link:"
586
  msgstr ""
587
 
588
- #: includes/admin/admin.php:1653
589
  msgid "Next Forums"
590
  msgstr ""
591
 
592
- #: includes/admin/admin.php:1671
593
  msgid ""
594
  "You can update all the forums on your network through this page. It works by "
595
  "calling the update script of each site automatically. Hit the link below to "
@@ -724,12 +724,16 @@ msgstr ""
724
  msgid "Converting replies (%1$s - %2$s)"
725
  msgstr ""
726
 
727
- #: includes/admin/converters/bbPress1.php:540
 
 
 
 
728
  msgid "Re: "
729
  msgstr ""
730
 
731
  #: includes/admin/forums.php:120 includes/admin/replies.php:132
732
- #: includes/admin/settings.php:1284 includes/admin/topics.php:132
733
  msgid "Overview"
734
  msgstr ""
735
 
@@ -823,14 +827,14 @@ msgstr ""
823
 
824
  #: includes/admin/forums.php:162 includes/admin/forums.php:233
825
  #: includes/admin/replies.php:177 includes/admin/replies.php:245
826
- #: includes/admin/settings.php:1330 includes/admin/topics.php:178
827
  #: includes/admin/topics.php:246
828
  msgid "For more information:"
829
  msgstr ""
830
 
831
  #: includes/admin/forums.php:163 includes/admin/forums.php:234
832
  #: includes/admin/replies.php:178 includes/admin/replies.php:246
833
- #: includes/admin/settings.php:1331 includes/admin/topics.php:179
834
  #: includes/admin/topics.php:247
835
  msgid ""
836
  "<a href=\"http://codex.bbpress.org\" target=\"_blank\">bbPress "
@@ -839,7 +843,7 @@ msgstr ""
839
 
840
  #: includes/admin/forums.php:164 includes/admin/forums.php:235
841
  #: includes/admin/replies.php:179 includes/admin/replies.php:247
842
- #: includes/admin/settings.php:1332 includes/admin/topics.php:180
843
  #: includes/admin/topics.php:248
844
  msgid ""
845
  "<a href=\"http://bbpress.org/forums/\" target=\"_blank\">bbPress Support "
@@ -998,7 +1002,7 @@ msgstr ""
998
  msgid "%1$s <br /> %2$s"
999
  msgstr ""
1000
 
1001
- #: includes/admin/forums.php:474 includes/forums/template-tags.php:533
1002
  msgid "No Topics"
1003
  msgstr ""
1004
 
@@ -1145,7 +1149,7 @@ msgid "Email:"
1145
  msgstr ""
1146
 
1147
  #: includes/admin/metaboxes.php:474
1148
- #: templates/default/bbpress/form-user-edit.php:105
1149
  #: templates/default/bbpress/form-user-register.php:28
1150
  msgid "Email"
1151
  msgstr ""
@@ -1372,6 +1376,8 @@ msgstr ""
1372
  #: includes/admin/replies.php:623 includes/admin/topics.php:689
1373
  #: templates/default/bbpress/loop-replies.php:18
1374
  #: templates/default/bbpress/loop-replies.php:52
 
 
1375
  msgid "Author"
1376
  msgstr ""
1377
 
@@ -1409,38 +1415,38 @@ msgid "Mark this reply as spam"
1409
  msgstr ""
1410
 
1411
  #: includes/admin/replies.php:790 includes/admin/topics.php:863
1412
- #: includes/replies/template-tags.php:1719
1413
- #: includes/topics/template-tags.php:2643
1414
  msgid "Spam"
1415
  msgstr ""
1416
 
1417
  #: includes/admin/replies.php:799 includes/admin/topics.php:871
1418
- #: includes/replies/template-tags.php:1663
1419
- #: includes/topics/template-tags.php:2401
1420
  msgid "Restore this item from the Trash"
1421
  msgstr ""
1422
 
1423
  #: includes/admin/replies.php:799 includes/admin/topics.php:871
1424
- #: includes/replies/template-tags.php:1649
1425
- #: includes/topics/template-tags.php:2387
1426
  msgid "Restore"
1427
  msgstr ""
1428
 
1429
  #: includes/admin/replies.php:801 includes/admin/topics.php:873
1430
- #: includes/replies/template-tags.php:1665
1431
- #: includes/topics/template-tags.php:2403
1432
  msgid "Move this item to the Trash"
1433
  msgstr ""
1434
 
1435
  #: includes/admin/replies.php:801 includes/admin/topics.php:873
1436
- #: includes/replies/template-tags.php:1648
1437
- #: includes/topics/template-tags.php:2386
1438
  msgid "Trash"
1439
  msgstr ""
1440
 
1441
  #: includes/admin/replies.php:805 includes/admin/topics.php:877
1442
- #: includes/replies/template-tags.php:1669
1443
- #: includes/topics/template-tags.php:2407
1444
  msgid "Delete this item permanently"
1445
  msgstr ""
1446
 
@@ -1491,7 +1497,7 @@ msgstr ""
1491
  msgid "Reply draft updated. <a target=\"_blank\" href=\"%s\">Preview topic</a>"
1492
  msgstr ""
1493
 
1494
- #: includes/admin/settings.php:24 includes/admin/settings.php:1292
1495
  msgid "Main Settings"
1496
  msgstr ""
1497
 
@@ -1499,7 +1505,7 @@ msgstr ""
1499
  msgid "Theme Packages"
1500
  msgstr ""
1501
 
1502
- #: includes/admin/settings.php:34 includes/admin/settings.php:1312
1503
  msgid "Per Page"
1504
  msgstr ""
1505
 
@@ -1531,7 +1537,7 @@ msgstr ""
1531
  msgid "Throttle posting every"
1532
  msgstr ""
1533
 
1534
- #: includes/admin/settings.php:97 includes/admin/settings.php:1425
1535
  msgid "Revisions"
1536
  msgstr ""
1537
 
@@ -1573,11 +1579,11 @@ msgstr ""
1573
  msgid "Current Package"
1574
  msgstr ""
1575
 
1576
- #: includes/admin/settings.php:229 includes/admin/settings.php:1438
1577
  msgid "Forums base"
1578
  msgstr ""
1579
 
1580
- #: includes/admin/settings.php:237 includes/admin/settings.php:1441
1581
  msgid "Topics base"
1582
  msgstr ""
1583
 
@@ -1585,19 +1591,19 @@ msgstr ""
1585
  msgid "Forum Prefix"
1586
  msgstr ""
1587
 
1588
- #: includes/admin/settings.php:258 includes/admin/settings.php:1444
1589
  msgid "Forum slug"
1590
  msgstr ""
1591
 
1592
- #: includes/admin/settings.php:266 includes/admin/settings.php:1447
1593
  msgid "Topic slug"
1594
  msgstr ""
1595
 
1596
- #: includes/admin/settings.php:274 includes/admin/settings.php:1459
1597
  msgid "Topic tag slug"
1598
  msgstr ""
1599
 
1600
- #: includes/admin/settings.php:282 includes/admin/settings.php:1450
1601
  msgid "Reply slug"
1602
  msgstr ""
1603
 
@@ -1609,358 +1615,362 @@ msgstr ""
1609
  msgid "Topic view slug"
1610
  msgstr ""
1611
 
1612
- #: includes/admin/settings.php:311
1613
- msgid "Enable Group Forums"
1614
  msgstr ""
1615
 
1616
  #: includes/admin/settings.php:319
 
 
 
 
1617
  msgid "Group Forums Parent"
1618
  msgstr ""
1619
 
1620
- #: includes/admin/settings.php:332
1621
  msgid "Use Akismet"
1622
  msgstr ""
1623
 
1624
- #: includes/admin/settings.php:370
1625
  msgid "Main forum settings for enabling features and setting time limits"
1626
  msgstr ""
1627
 
1628
- #: includes/admin/settings.php:386 includes/common/functions.php:121
1629
  msgid "minutes"
1630
  msgstr ""
1631
 
1632
- #: includes/admin/settings.php:402 includes/common/functions.php:122
1633
  msgid "seconds"
1634
  msgstr ""
1635
 
1636
- #: includes/admin/settings.php:418
1637
  msgid "Allow users to mark topics as favorites"
1638
  msgstr ""
1639
 
1640
- #: includes/admin/settings.php:434
1641
  msgid "Allow users to subscribe to topics"
1642
  msgstr ""
1643
 
1644
- #: includes/admin/settings.php:450
1645
  msgid "Allow topics to have tags"
1646
  msgstr ""
1647
 
1648
- #: includes/admin/settings.php:466
1649
  msgid "Allow topic and reply revision logging"
1650
  msgstr ""
1651
 
1652
- #: includes/admin/settings.php:482
1653
  msgid "Allow guest users without accounts to create topics and replies"
1654
  msgstr ""
1655
 
1656
- #: includes/admin/settings.php:498
1657
  msgid ""
1658
  "Automatically assign default role to new, registered users upon visiting the "
1659
  "site."
1660
  msgstr ""
1661
 
1662
- #: includes/admin/settings.php:536
1663
  msgid "Use the fancy WordPress editor to create and edit topics and replies"
1664
  msgstr ""
1665
 
1666
- #: includes/admin/settings.php:549
1667
  msgid "How your forum content is displayed within your existing theme."
1668
  msgstr ""
1669
 
1670
- #: includes/admin/settings.php:573
1671
  msgid "%1$s - %2$s"
1672
  msgstr ""
1673
 
1674
- #: includes/admin/settings.php:579
1675
  msgid "will serve all bbPress templates"
1676
  msgstr ""
1677
 
1678
- #: includes/admin/settings.php:583
1679
  msgid "No template packages available."
1680
  msgstr ""
1681
 
1682
- #: includes/admin/settings.php:599
1683
  msgid ""
1684
  "Embed media (YouTube, Twitter, Flickr, etc...) directly into topics and "
1685
  "replies"
1686
  msgstr ""
1687
 
1688
- #: includes/admin/settings.php:614
1689
  msgid "How many topics and replies to show per page"
1690
  msgstr ""
1691
 
1692
- #: includes/admin/settings.php:630 includes/admin/settings.php:646
1693
- #: includes/admin/settings.php:677 includes/admin/settings.php:693
1694
  msgid "per page"
1695
  msgstr ""
1696
 
1697
- #: includes/admin/settings.php:661
1698
  msgid "How many topics and replies to show per RSS page"
1699
  msgstr ""
1700
 
1701
- #: includes/admin/settings.php:711
1702
  msgid ""
1703
  "Custom root slugs to prefix your forums and topics with. These can be "
1704
  "partnered with WordPress pages to allow more flexibility."
1705
  msgstr ""
1706
 
1707
- #: includes/admin/settings.php:760
1708
  msgid ""
1709
  "Custom slugs for single forums, topics, replies, tags, users, and views "
1710
  "here. If you change these, existing permalinks will also change."
1711
  msgstr ""
1712
 
1713
- #: includes/admin/settings.php:776
1714
  msgid "Prefix your forum area with the Forum Base slug (Recommended)"
1715
  msgstr ""
1716
 
1717
- #: includes/admin/settings.php:896
1718
  msgid "Forum settings for BuddyPress"
1719
  msgstr ""
1720
 
1721
- #: includes/admin/settings.php:912
1722
  msgid "Allow BuddyPress Groups to have their own forums"
1723
  msgstr ""
1724
 
1725
- #: includes/admin/settings.php:929
1726
  msgid "&mdash; Forum root &mdash;"
1727
  msgstr ""
1728
 
1729
- #: includes/admin/settings.php:937
1730
  msgid "is the parent for all group forums"
1731
  msgstr ""
1732
 
1733
- #: includes/admin/settings.php:938
1734
  msgid ""
1735
  "Using the Forum Root is not recommended. Changing this does not move "
1736
  "existing forums."
1737
  msgstr ""
1738
 
1739
- #: includes/admin/settings.php:953
1740
  msgid "Forum settings for Akismet"
1741
  msgstr ""
1742
 
1743
- #: includes/admin/settings.php:970
1744
  msgid "Allow Akismet to actively prevent forum spam."
1745
  msgstr ""
1746
 
1747
- #: includes/admin/settings.php:993
1748
  msgid "Forums Settings"
1749
  msgstr ""
1750
 
1751
- #: includes/admin/settings.php:1002
1752
- #: templates/default/bbpress/form-user-edit.php:175
1753
  msgid "Save Changes"
1754
  msgstr ""
1755
 
1756
- #: includes/admin/settings.php:1021
1757
  msgid ""
1758
  "Information about your previous forums database so that they can be "
1759
  "converted. <strong>Backup your database before proceeding.</strong>"
1760
  msgstr ""
1761
 
1762
- #: includes/admin/settings.php:1051
1763
  msgid "is the previous forum software"
1764
  msgstr ""
1765
 
1766
- #: includes/admin/settings.php:1065
1767
  msgid "IP or hostname"
1768
  msgstr ""
1769
 
1770
- #: includes/admin/settings.php:1079
1771
  msgid "Use default 3306 if unsure"
1772
  msgstr ""
1773
 
1774
- #: includes/admin/settings.php:1093
1775
  msgid "User for your database connection"
1776
  msgstr ""
1777
 
1778
- #: includes/admin/settings.php:1107
1779
  msgid "Password to access the database"
1780
  msgstr ""
1781
 
1782
- #: includes/admin/settings.php:1121
1783
  msgid "Name of the database with your old forum data"
1784
  msgstr ""
1785
 
1786
- #: includes/admin/settings.php:1134
1787
  msgid "Some optional parameters to help tune the conversion process."
1788
  msgstr ""
1789
 
1790
- #: includes/admin/settings.php:1148
1791
  msgid ""
1792
  "(If converting from BuddyPress Forums, use \"wp_bb_\" or your custom prefix)"
1793
  msgstr ""
1794
 
1795
- #: includes/admin/settings.php:1162
1796
  msgid "rows to process at a time"
1797
  msgstr ""
1798
 
1799
- #: includes/admin/settings.php:1163
1800
  msgid "Keep this low if you experience out-of-memory issues."
1801
  msgstr ""
1802
 
1803
- #: includes/admin/settings.php:1177
1804
  msgid "second(s) delay between each group of rows"
1805
  msgstr ""
1806
 
1807
- #: includes/admin/settings.php:1178
1808
  msgid "Keep this high to prevent too-many-connection issues."
1809
  msgstr ""
1810
 
1811
- #: includes/admin/settings.php:1192
1812
  msgid "Start a fresh conversion from the beginning"
1813
  msgstr ""
1814
 
1815
- #: includes/admin/settings.php:1193
1816
  msgid "You should clean old conversion information before starting over."
1817
  msgstr ""
1818
 
1819
- #: includes/admin/settings.php:1207
1820
  msgid "Purge all information from a previously attempted import"
1821
  msgstr ""
1822
 
1823
- #: includes/admin/settings.php:1208
1824
  msgid ""
1825
  "Use this if an import failed and you want to remove that incomplete data."
1826
  msgstr ""
1827
 
1828
- #: includes/admin/settings.php:1222
1829
  msgid "Attempt to import user accounts from previous forums"
1830
  msgstr ""
1831
 
1832
- #: includes/admin/settings.php:1223
1833
  msgid ""
1834
  "Non-bbPress passwords cannot be automatically converted. They will be "
1835
  "converted as each user logs in."
1836
  msgstr ""
1837
 
1838
- #: includes/admin/settings.php:1253
1839
  msgid "Start"
1840
  msgstr ""
1841
 
1842
- #: includes/admin/settings.php:1254
1843
  msgid "Stop"
1844
  msgstr ""
1845
 
1846
- #: includes/admin/settings.php:1285
1847
  msgid "This screen provides access to all of the Forums settings."
1848
  msgstr ""
1849
 
1850
- #: includes/admin/settings.php:1286
1851
  msgid ""
1852
  "Please see the additional help tabs for more information on each indiviual "
1853
  "section."
1854
  msgstr ""
1855
 
1856
- #: includes/admin/settings.php:1293
1857
  msgid "In the Main Settings you have a number of options:"
1858
  msgstr ""
1859
 
1860
- #: includes/admin/settings.php:1296
1861
  msgid ""
1862
  "You can choose to lock a post after a certain number of minutes. \"Locking "
1863
  "post editing\" will prevent the author from editing some amount of time "
1864
  "after saving a post."
1865
  msgstr ""
1866
 
1867
- #: includes/admin/settings.php:1297
1868
  msgid ""
1869
  "\"Throttle time\" is the amount of time required between posts from a single "
1870
  "author. The higher the throttle time, the longer a user will need to wait "
1871
  "between posting to the forum."
1872
  msgstr ""
1873
 
1874
- #: includes/admin/settings.php:1298
1875
  msgid ""
1876
  "Favorites are a way for users to save and later return to topics they favor. "
1877
  "This is enabled by default."
1878
  msgstr ""
1879
 
1880
- #: includes/admin/settings.php:1299
1881
  msgid ""
1882
  "Subscriptions allow users to subscribe for notifications to topics that "
1883
  "interest them. This is enabled by default."
1884
  msgstr ""
1885
 
1886
- #: includes/admin/settings.php:1300
1887
  msgid ""
1888
  "Topic-Tags allow users to filter topics between forums. This is enabled by "
1889
  "default."
1890
  msgstr ""
1891
 
1892
- #: includes/admin/settings.php:1301
1893
  msgid ""
1894
  "\"Anonymous Posting\" allows guest users who do not have accounts on your "
1895
  "site to both create topics as well as replies."
1896
  msgstr ""
1897
 
1898
- #: includes/admin/settings.php:1302
1899
  msgid ""
1900
  "The Fancy Editor brings the luxury of the Visual editor and HTML editor from "
1901
  "the traditional WordPress dashboard into your theme."
1902
  msgstr ""
1903
 
1904
- #: includes/admin/settings.php:1303
1905
  msgid ""
1906
  "Auto-embed will embed the media content from a URL directly into the "
1907
  "replies. For example: links to Flickr and YouTube."
1908
  msgstr ""
1909
 
1910
- #: includes/admin/settings.php:1306
1911
  msgid ""
1912
  "You must click the Save Changes button at the bottom of the screen for new "
1913
  "settings to take effect."
1914
  msgstr ""
1915
 
1916
- #: includes/admin/settings.php:1313
1917
  msgid ""
1918
  "Per Page settings allow you to control the number of topics and replies "
1919
  "appear on each page."
1920
  msgstr ""
1921
 
1922
- #: includes/admin/settings.php:1314
1923
  msgid ""
1924
  "This is comparable to the WordPress \"Reading Settings\" page, where you can "
1925
  "set the number of posts that should show on blog pages and in feeds."
1926
  msgstr ""
1927
 
1928
- #: includes/admin/settings.php:1315
1929
  msgid ""
1930
  "These are broken up into two separate groups: one for what appears in your "
1931
  "theme, another for RSS feeds."
1932
  msgstr ""
1933
 
1934
- #: includes/admin/settings.php:1321
1935
  msgid "Slugs"
1936
  msgstr ""
1937
 
1938
- #: includes/admin/settings.php:1322
1939
  msgid ""
1940
  "The Slugs section allows you to control the permalink structure for your "
1941
  "forums."
1942
  msgstr ""
1943
 
1944
- #: includes/admin/settings.php:1323
1945
  msgid ""
1946
  "\"Archive Slugs\" are used as the \"root\" for your forums and topics. If "
1947
  "you combine these values with existing page slugs, bbPress will attempt to "
1948
  "output the most correct title and content."
1949
  msgstr ""
1950
 
1951
- #: includes/admin/settings.php:1324
1952
  msgid ""
1953
  "\"Single Slugs\" are used as a prefix when viewing an individual forum, "
1954
  "topic, reply, user, or view."
1955
  msgstr ""
1956
 
1957
- #: includes/admin/settings.php:1325
1958
  msgid ""
1959
  "In the event of a slug collision with WordPress or BuddyPress, a warning "
1960
  "will appear next to the problem slug(s)."
1961
  msgstr ""
1962
 
1963
- #: includes/admin/settings.php:1423
1964
  #: templates/default/bbpress/loop-forums.php:21
1965
  #: templates/default/bbpress/loop-replies.php:24
1966
  #: templates/default/bbpress/loop-replies.php:58
@@ -1968,39 +1978,39 @@ msgstr ""
1968
  msgid "Posts"
1969
  msgstr ""
1970
 
1971
- #: includes/admin/settings.php:1424
1972
  msgid "Pages"
1973
  msgstr ""
1974
 
1975
- #: includes/admin/settings.php:1426
1976
  msgid "Attachments"
1977
  msgstr ""
1978
 
1979
- #: includes/admin/settings.php:1427
1980
  msgid "Menus"
1981
  msgstr ""
1982
 
1983
- #: includes/admin/settings.php:1430
1984
  msgid "Tag base"
1985
  msgstr ""
1986
 
1987
- #: includes/admin/settings.php:1433
1988
  msgid "Category base"
1989
  msgstr ""
1990
 
1991
- #: includes/admin/settings.php:1453
1992
  msgid "User base"
1993
  msgstr ""
1994
 
1995
- #: includes/admin/settings.php:1456
1996
  msgid "View base"
1997
  msgstr ""
1998
 
1999
- #: includes/admin/settings.php:1471
2000
  msgid "%s page"
2001
  msgstr ""
2002
 
2003
- #: includes/admin/settings.php:1490
2004
  msgid "Possible %1$s conflict: <strong>%2$s</strong>"
2005
  msgstr ""
2006
 
@@ -2047,226 +2057,239 @@ msgid "Recalculate last activity in each topic and forum"
2047
  msgstr ""
2048
 
2049
  #: includes/admin/tools.php:164
2050
- msgid "Repair BuddyPress Group Forum relationships"
2051
  msgstr ""
2052
 
2053
  #: includes/admin/tools.php:165
2054
- msgid "Count topics in each forum"
2055
  msgstr ""
2056
 
2057
  #: includes/admin/tools.php:166
2058
- msgid "Count replies in each forum"
2059
  msgstr ""
2060
 
2061
  #: includes/admin/tools.php:167
2062
- msgid "Count replies in each topic"
2063
  msgstr ""
2064
 
2065
  #: includes/admin/tools.php:168
2066
- msgid "Count voices in each topic"
2067
  msgstr ""
2068
 
2069
  #: includes/admin/tools.php:169
2070
- msgid "Count spammed & trashed replies in each topic"
2071
  msgstr ""
2072
 
2073
  #: includes/admin/tools.php:170
2074
- msgid "Count topics for each user"
2075
  msgstr ""
2076
 
2077
  #: includes/admin/tools.php:171
2078
- msgid "Count replies for each user"
2079
  msgstr ""
2080
 
2081
  #: includes/admin/tools.php:172
2082
- msgid "Remove trashed topics from user favorites"
2083
  msgstr ""
2084
 
2085
  #: includes/admin/tools.php:173
2086
- msgid "Remove trashed topics from user subscriptions"
2087
  msgstr ""
2088
 
2089
  #: includes/admin/tools.php:174
 
 
 
 
2090
  msgid "Remap existing users to default forum roles"
2091
  msgstr ""
2092
 
2093
- #: includes/admin/tools.php:194
2094
  msgid "Counting the number of replies in each topic&hellip; %s"
2095
  msgstr ""
2096
 
2097
- #: includes/admin/tools.php:195 includes/admin/tools.php:238
2098
- #: includes/admin/tools.php:280 includes/admin/tools.php:323
2099
- #: includes/admin/tools.php:404 includes/admin/tools.php:438
2100
- #: includes/admin/tools.php:470 includes/admin/tools.php:515
2101
- #: includes/admin/tools.php:560 includes/admin/tools.php:622
2102
- #: includes/admin/tools.php:689 includes/admin/tools.php:734
2103
- #: includes/admin/tools.php:841 includes/admin/tools.php:890
2104
- #: includes/admin/tools.php:944
2105
  msgid "Failed!"
2106
  msgstr ""
2107
 
2108
- #: includes/admin/tools.php:221 includes/admin/tools.php:264
2109
- #: includes/admin/tools.php:290 includes/admin/tools.php:419
2110
- #: includes/admin/tools.php:453 includes/admin/tools.php:498
2111
- #: includes/admin/tools.php:543 includes/admin/tools.php:605
2112
- #: includes/admin/tools.php:666 includes/admin/tools.php:824
2113
- #: includes/admin/tools.php:874 includes/admin/tools.php:928
2114
- #: includes/admin/tools.php:973
2115
  msgid "Complete!"
2116
  msgstr ""
2117
 
2118
- #: includes/admin/tools.php:237
2119
  msgid "Counting the number of voices in each topic&hellip; %s"
2120
  msgstr ""
2121
 
2122
- #: includes/admin/tools.php:279
2123
  msgid ""
2124
  "Counting the number of spammed and trashed replies in each topic&hellip; %s"
2125
  msgstr ""
2126
 
2127
- #: includes/admin/tools.php:304
2128
  msgid "Repairing BuddyPress group-forum relationships&hellip; %s"
2129
  msgstr ""
2130
 
2131
- #: includes/admin/tools.php:375
2132
  msgid "Group Forums"
2133
  msgstr ""
2134
 
2135
- #: includes/admin/tools.php:384
2136
- msgid "Complete! %s groups updated; %s forums updated."
 
2137
  msgstr ""
2138
 
2139
- #: includes/admin/tools.php:403
2140
  msgid "Counting the number of topics in each forum&hellip; %s"
2141
  msgstr ""
2142
 
2143
- #: includes/admin/tools.php:437
2144
  msgid "Counting the number of replies in each forum&hellip; %s"
2145
  msgstr ""
2146
 
2147
- #: includes/admin/tools.php:469
2148
  msgid "Counting the number of topics each user has created&hellip; %s"
2149
  msgstr ""
2150
 
2151
- #: includes/admin/tools.php:514
2152
  msgid "Counting the number of topics to which each user has replied&hellip; %s"
2153
  msgstr ""
2154
 
2155
- #: includes/admin/tools.php:559
2156
  msgid "Removing trashed topics from user favorites&hellip; %s"
2157
  msgstr ""
2158
 
2159
- #: includes/admin/tools.php:589 includes/admin/tools.php:650
2160
  msgid "Nothing to remove!"
2161
  msgstr ""
2162
 
2163
- #: includes/admin/tools.php:621
2164
  msgid "Removing trashed topics from user subscriptions&hellip; %s"
2165
  msgstr ""
2166
 
2167
- #: includes/admin/tools.php:683
2168
  msgid "Remapping forum role for each user on this site&hellip; %s"
2169
  msgstr ""
2170
 
2171
- #: includes/admin/tools.php:717
2172
  msgid "Complete! %s users updated."
2173
  msgstr ""
2174
 
2175
- #: includes/admin/tools.php:733
2176
  msgid "Recomputing latest post in every topic and forum&hellip; %s"
2177
  msgstr ""
2178
 
2179
- #: includes/admin/tools.php:840
 
 
 
 
2180
  msgid "Recalculating forum visibility &hellip; %s"
2181
  msgstr ""
2182
 
2183
- #: includes/admin/tools.php:889
2184
  msgid "Recalculating the forum for each post &hellip; %s"
2185
  msgstr ""
2186
 
2187
- #: includes/admin/tools.php:943
2188
  msgid "Recalculating the topic for each post &hellip; %s"
2189
  msgstr ""
2190
 
2191
- #: includes/admin/tools.php:996
2192
  msgid ""
2193
  "This will revert your forums back to a brand new installation. This process "
2194
  "cannot be undone. <strong>Backup your database before proceeding</strong>."
2195
  msgstr ""
2196
 
2197
- #: includes/admin/tools.php:1002
2198
  msgid "The following data will be removed:"
2199
  msgstr ""
2200
 
2201
- #: includes/admin/tools.php:1007
2202
  msgid "All Topic Tags"
2203
  msgstr ""
2204
 
2205
- #: includes/admin/tools.php:1008
2206
  msgid "Related Meta Data"
2207
  msgstr ""
2208
 
2209
- #: includes/admin/tools.php:1009
2210
  msgid "Forum Settings"
2211
  msgstr ""
2212
 
2213
- #: includes/admin/tools.php:1010
2214
  msgid "Forum Activity"
2215
  msgstr ""
2216
 
2217
- #: includes/admin/tools.php:1011
2218
  msgid "Forum User Roles"
2219
  msgstr ""
2220
 
2221
- #: includes/admin/tools.php:1012
2222
  msgid "Importer Helper Data"
2223
  msgstr ""
2224
 
2225
- #: includes/admin/tools.php:1016
2226
  msgid "Are you sure you want to do this?"
2227
  msgstr ""
2228
 
2229
- #: includes/admin/tools.php:1019
2230
  msgid "Say it ain't so!"
2231
  msgstr ""
2232
 
2233
- #: includes/admin/tools.php:1020
2234
  msgid "This process cannot be undone."
2235
  msgstr ""
2236
 
2237
- #: includes/admin/tools.php:1028
2238
  msgid "Reset bbPress"
2239
  msgstr ""
2240
 
2241
- #: includes/admin/tools.php:1053
2242
  msgid "Failed"
2243
  msgstr ""
2244
 
2245
- #: includes/admin/tools.php:1054
2246
  msgid "Success!"
2247
  msgstr ""
2248
 
2249
- #: includes/admin/tools.php:1061
2250
  msgid "Deleting Posts&hellip; %s"
2251
  msgstr ""
2252
 
2253
- #: includes/admin/tools.php:1074
2254
  msgid "Deleting Post Meta&hellip; %s"
2255
  msgstr ""
2256
 
2257
- #: includes/admin/tools.php:1087
 
 
 
 
2258
  msgid "Deleting User Meta&hellip; %s"
2259
  msgstr ""
2260
 
2261
- #: includes/admin/tools.php:1094
2262
  msgid "Deleting Conversion Table&hellip; %s"
2263
  msgstr ""
2264
 
2265
- #: includes/admin/tools.php:1106
2266
  msgid "Deleting Settings&hellip; %s"
2267
  msgstr ""
2268
 
2269
- #: includes/admin/tools.php:1112
2270
  msgid "Deleting Roles and Capabilities&hellip; %s"
2271
  msgstr ""
2272
 
@@ -2522,7 +2545,7 @@ msgstr ""
2522
  msgid "(No Forum)"
2523
  msgstr ""
2524
 
2525
- #: includes/admin/topics.php:783 includes/topics/template-tags.php:1828
2526
  msgid "No Replies"
2527
  msgstr ""
2528
 
@@ -2548,7 +2571,7 @@ msgstr ""
2548
  msgid "Unstick this topic"
2549
  msgstr ""
2550
 
2551
- #: includes/admin/topics.php:851 includes/topics/template-tags.php:2517
2552
  msgid "Unstick"
2553
  msgstr ""
2554
 
@@ -2556,7 +2579,7 @@ msgstr ""
2556
  msgid "Stick this topic to its forum"
2557
  msgstr ""
2558
 
2559
- #: includes/admin/topics.php:854 includes/topics/template-tags.php:2516
2560
  msgid "Stick"
2561
  msgstr ""
2562
 
@@ -2564,7 +2587,7 @@ msgstr ""
2564
  msgid "Stick this topic to front"
2565
  msgstr ""
2566
 
2567
- #: includes/admin/topics.php:854 includes/topics/template-tags.php:2518
2568
  msgid "to front"
2569
  msgstr ""
2570
 
@@ -2611,25 +2634,25 @@ msgstr ""
2611
  msgid "Topic draft updated. <a target=\"_blank\" href=\"%s\">Preview topic</a>"
2612
  msgstr ""
2613
 
2614
- #: includes/admin/users.php:87 includes/admin/users.php:217
2615
  #: templates/default/bbpress/form-user-roles.php:9
2616
  msgid "Forum Role"
2617
  msgstr ""
2618
 
2619
  #: includes/admin/users.php:96 includes/admin/users.php:100
2620
- #: includes/users/template-tags.php:1017
2621
- msgid "&mdash; No role for this forum &mdash;"
2622
  msgstr ""
2623
 
2624
  #: includes/admin/users.php:138 includes/admin/users.php:140
2625
  msgid "Change forum role to&hellip;"
2626
  msgstr ""
2627
 
2628
- #: includes/admin/users.php:148
2629
  msgid "Change"
2630
  msgstr ""
2631
 
2632
- #: includes/admin/users.php:216
2633
  msgid "Site Role"
2634
  msgstr ""
2635
 
@@ -2698,32 +2721,32 @@ msgctxt "Separator in time since"
2698
  msgid ","
2699
  msgstr ""
2700
 
2701
- #: includes/common/functions.php:488 includes/common/functions.php:520
2702
  msgid "Private: %s"
2703
  msgstr ""
2704
 
2705
- #: includes/common/functions.php:489 includes/common/functions.php:521
2706
  msgid "Spammed: %s"
2707
  msgstr ""
2708
 
2709
- #: includes/common/functions.php:490 includes/common/functions.php:522
2710
  msgid "Trashed: %s"
2711
  msgstr ""
2712
 
2713
- #: includes/common/functions.php:597
2714
  msgid "<strong>ERROR</strong>: Invalid author name submitted!"
2715
  msgstr ""
2716
 
2717
- #: includes/common/functions.php:601
2718
  msgid "<strong>ERROR</strong>: Invalid email address submitted!"
2719
  msgstr ""
2720
 
2721
- #: includes/common/functions.php:1024
2722
  msgid ""
2723
  "%1$s wrote:\n"
2724
  "\n"
2725
  "%2$s\n"
2726
- "\t\t\t\n"
2727
  "Post Link: %3$s\n"
2728
  "\n"
2729
  "-----------\n"
@@ -2733,81 +2756,90 @@ msgid ""
2733
  "Login and visit the topic to unsubscribe from these emails."
2734
  msgstr ""
2735
 
2736
- #: includes/common/functions.php:1664
2737
  msgid ""
2738
  "Conditional query tags do not work before the query is run. Before then, "
2739
  "they always return false."
2740
  msgstr ""
2741
 
2742
- #: includes/common/template-tags.php:1339
2743
  msgid "No topics available"
2744
  msgstr ""
2745
 
2746
- #: includes/common/template-tags.php:1344
2747
  msgid "No forums available"
2748
  msgstr ""
2749
 
2750
- #: includes/common/template-tags.php:1349
2751
  msgid "None available"
2752
  msgstr ""
2753
 
2754
- #: includes/common/template-tags.php:1466
2755
- #: includes/common/template-tags.php:1477 includes/topics/functions.php:1239
2756
- #: includes/topics/functions.php:1597
2757
  #: templates/default/bbpress/form-reply.php:29
2758
  msgid "Reply To: %s"
2759
  msgstr ""
2760
 
2761
- #: includes/common/template-tags.php:1888
2762
  msgid "Home"
2763
  msgstr ""
2764
 
2765
- #: includes/common/template-tags.php:1951
2766
  msgid "(Edit)"
2767
  msgstr ""
2768
 
2769
- #: includes/common/template-tags.php:1955
2770
- #: includes/common/template-tags.php:2065
2771
- #: includes/common/template-tags.php:2282 includes/core/theme-compat.php:607
2772
  #: templates/default/extras/taxonomy-topic-tag-edit.php:17
2773
  #: templates/default/extras/taxonomy-topic-tag.php:17
2774
  msgid "Topic Tag: %s"
2775
  msgstr ""
2776
 
2777
- #: includes/common/template-tags.php:1976
 
 
 
 
2778
  msgid "&rsaquo;"
2779
  msgstr ""
2780
 
2781
- #: includes/common/template-tags.php:2216
 
 
 
 
 
 
2782
  msgid "Log Out"
2783
  msgstr ""
2784
 
2785
- #: includes/common/template-tags.php:2269
2786
  msgid "Forum: %s"
2787
  msgstr ""
2788
 
2789
- #: includes/common/template-tags.php:2273
2790
  msgid "Topic: %s"
2791
  msgstr ""
2792
 
2793
- #: includes/common/template-tags.php:2291
2794
  msgid "Your Profile"
2795
  msgstr ""
2796
 
2797
- #: includes/common/template-tags.php:2296
2798
  #: templates/default/bbpress/user-details.php:29
2799
  msgid "%s's Profile"
2800
  msgstr ""
2801
 
2802
- #: includes/common/template-tags.php:2304
2803
  msgid "Edit Your Profile"
2804
  msgstr ""
2805
 
2806
- #: includes/common/template-tags.php:2309
2807
  msgid "Edit %s's Profile"
2808
  msgstr ""
2809
 
2810
- #: includes/common/template-tags.php:2316
2811
  msgid "View: %s"
2812
  msgstr ""
2813
 
@@ -2820,207 +2852,220 @@ msgstr ""
2820
  msgid "(bbPress) Login Widget"
2821
  msgstr ""
2822
 
2823
- #: includes/common/widgets.php:82 includes/common/widgets.php:103
2824
  #: templates/default/bbpress/form-user-login.php:14
2825
  #: templates/default/bbpress/form-user-login.php:35
2826
  msgid "Log In"
2827
  msgstr ""
2828
 
2829
- #: includes/common/widgets.php:85
2830
- #: templates/default/bbpress/form-user-edit.php:99
2831
  #: templates/default/bbpress/form-user-login.php:17
2832
  #: templates/default/bbpress/form-user-register.php:23
2833
  msgid "Username"
2834
  msgstr ""
2835
 
2836
- #: includes/common/widgets.php:90
2837
  #: templates/default/bbpress/form-user-login.php:22
2838
  msgid "Password"
2839
  msgstr ""
2840
 
2841
- #: includes/common/widgets.php:96
2842
  msgid "Remember Me"
2843
  msgstr ""
2844
 
2845
- #: includes/common/widgets.php:115
2846
  #: templates/default/bbpress/form-user-register.php:36
2847
  msgid "Register"
2848
  msgstr ""
2849
 
2850
- #: includes/common/widgets.php:121
2851
  #: templates/default/bbpress/form-user-lost-pass.php:14
2852
  msgid "Lost Password"
2853
  msgstr ""
2854
 
2855
- #: includes/common/widgets.php:182 includes/common/widgets.php:308
2856
- #: includes/common/widgets.php:450 includes/common/widgets.php:668
2857
- #: includes/common/widgets.php:856
 
2858
  msgid "Title:"
2859
  msgstr ""
2860
 
2861
- #: includes/common/widgets.php:187
2862
  msgid "Register URI:"
2863
  msgstr ""
2864
 
2865
- #: includes/common/widgets.php:192
2866
  msgid "Lost Password URI:"
2867
  msgstr ""
2868
 
2869
- #: includes/common/widgets.php:224
2870
  msgid "A list of registered optional topic views."
2871
  msgstr ""
2872
 
2873
- #: includes/common/widgets.php:227
2874
  msgid "(bbPress) Topic Views List"
2875
  msgstr ""
2876
 
2877
- #: includes/common/widgets.php:341
 
 
 
 
 
 
 
 
2878
  msgid "A list of forums with an option to set the parent."
2879
  msgstr ""
2880
 
2881
- #: includes/common/widgets.php:344
2882
  msgid "(bbPress) Forums List"
2883
  msgstr ""
2884
 
2885
- #: includes/common/widgets.php:456
2886
  msgid "Parent Forum ID:"
2887
  msgstr ""
2888
 
2889
- #: includes/common/widgets.php:462
2890
  msgid "\"0\" to show only root - \"any\" to show all"
2891
  msgstr ""
2892
 
2893
- #: includes/common/widgets.php:493
2894
  msgid "A list of recent topics, sorted by popularity or freshness."
2895
  msgstr ""
2896
 
2897
- #: includes/common/widgets.php:496
2898
  msgid "(bbPress) Recent Topics"
2899
  msgstr ""
2900
 
2901
- #: includes/common/widgets.php:609
2902
  msgctxt "widgets"
2903
  msgid "by %1$s"
2904
  msgstr ""
2905
 
2906
- #: includes/common/widgets.php:669
2907
  msgid "Maximum topics to show:"
2908
  msgstr ""
2909
 
2910
- #: includes/common/widgets.php:670 includes/common/widgets.php:858
2911
  msgid "Show post date:"
2912
  msgstr ""
2913
 
2914
- #: includes/common/widgets.php:671
2915
  msgid "Show topic author:"
2916
  msgstr ""
2917
 
2918
- #: includes/common/widgets.php:674
2919
  msgid "Order By:"
2920
  msgstr ""
2921
 
2922
- #: includes/common/widgets.php:676
2923
  msgid "Newest Topics"
2924
  msgstr ""
2925
 
2926
- #: includes/common/widgets.php:677
2927
- #: templates/default/extras/page-forum-statistics.php:100
2928
  msgid "Popular Topics"
2929
  msgstr ""
2930
 
2931
- #: includes/common/widgets.php:678
2932
  msgid "Topics With Recent Replies"
2933
  msgstr ""
2934
 
2935
- #: includes/common/widgets.php:710
 
 
 
 
 
 
 
 
2936
  msgid "A list of the most recent replies."
2937
  msgstr ""
2938
 
2939
- #: includes/common/widgets.php:713
2940
  msgid "(bbPress) Recent Replies"
2941
  msgstr ""
2942
 
2943
  #. translators: 1: reply author, 2: reply link, 3: reply timestamp
2944
- #: includes/common/widgets.php:785
2945
  msgctxt "widgets"
2946
  msgid "%1$s on %2$s %3$s"
2947
  msgstr ""
2948
 
2949
  #. translators: 1: reply link, 2: reply timestamp
2950
- #: includes/common/widgets.php:791
2951
  msgctxt "widgets"
2952
  msgid "%1$s %2$s"
2953
  msgstr ""
2954
 
2955
  #. translators: 1: reply author, 2: reply link
2956
- #: includes/common/widgets.php:797
2957
  msgctxt "widgets"
2958
  msgid "%1$s on %2$s"
2959
  msgstr ""
2960
 
2961
  #. translators: 1: reply link
2962
- #: includes/common/widgets.php:803
2963
  msgctxt "widgets"
2964
  msgid "%1$s"
2965
  msgstr ""
2966
 
2967
- #: includes/common/widgets.php:857
2968
  msgid "Maximum replies to show:"
2969
  msgstr ""
2970
 
2971
- #: includes/common/widgets.php:859
2972
  msgid "Show reply author:"
2973
  msgstr ""
2974
 
2975
- #: includes/core/capabilities.php:407
2976
  msgid "Keymaster"
2977
  msgstr ""
2978
 
2979
- #: includes/core/capabilities.php:413 includes/users/template-tags.php:450
2980
  msgid "Moderator"
2981
  msgstr ""
2982
 
2983
- #: includes/core/capabilities.php:419 includes/users/template-tags.php:454
2984
  msgid "Participant"
2985
  msgstr ""
2986
 
2987
- #: includes/core/capabilities.php:425
2988
  msgid "Spectator"
2989
  msgstr ""
2990
 
2991
- #: includes/core/capabilities.php:431
2992
- msgid "Visitor"
2993
- msgstr ""
2994
-
2995
- #: includes/core/capabilities.php:437
2996
  msgid "Blocked"
2997
  msgstr ""
2998
 
2999
- #: includes/core/capabilities.php:553 includes/core/capabilities.php:563
3000
  msgid "Editable forum roles no longer exist."
3001
  msgstr ""
3002
 
3003
- #: includes/core/update.php:164
3004
  msgid "General"
3005
  msgstr ""
3006
 
3007
- #: includes/core/update.php:165
3008
  msgid "General chit-chat"
3009
  msgstr ""
3010
 
3011
- #: includes/core/update.php:166
3012
  msgid "Hello World!"
3013
  msgstr ""
3014
 
3015
- #: includes/core/update.php:167
3016
  msgid "I am the first topic in your new forums."
3017
  msgstr ""
3018
 
3019
- #: includes/core/update.php:168
3020
  msgid "Re: Hello World!"
3021
  msgstr ""
3022
 
3023
- #: includes/core/update.php:169
3024
  msgid "Oh, and this is what a reply looks like."
3025
  msgstr ""
3026
 
@@ -3054,56 +3099,56 @@ msgid ""
3054
  "retry again later."
3055
  msgstr ""
3056
 
3057
- #: includes/extend/buddypress/activity.php:238
3058
- msgid "New topic created"
3059
  msgstr ""
3060
 
3061
- #: includes/extend/buddypress/activity.php:239
3062
- msgid "New reply created"
3063
  msgstr ""
3064
 
3065
- #: includes/extend/buddypress/activity.php:469
3066
  msgid "%1$s started the topic %2$s in the forum %3$s"
3067
  msgstr ""
3068
 
3069
- #: includes/extend/buddypress/activity.php:622
3070
  msgid "%1$s replied to the topic %2$s in the forum %3$s"
3071
  msgstr ""
3072
 
3073
- #: includes/extend/buddypress/group.php:201
3074
  msgid "Enable Group Forum"
3075
  msgstr ""
3076
 
3077
- #: includes/extend/buddypress/group.php:203
3078
- #: includes/extend/buddypress/group.php:267
3079
  msgid ""
3080
  "Create a discussion forum to allow members of this group to communicate in a "
3081
  "structured, bulletin-board style fashion."
3082
  msgstr ""
3083
 
3084
- #: includes/extend/buddypress/group.php:206
3085
- #: includes/extend/buddypress/group.php:270
3086
  msgid "Yes. I want this group to have a forum."
3087
  msgstr ""
3088
 
3089
- #: includes/extend/buddypress/group.php:209
3090
  msgid "Saying no will not delete existing forum content."
3091
  msgstr ""
3092
 
3093
- #: includes/extend/buddypress/group.php:211
3094
  msgid "Save Settings"
3095
  msgstr ""
3096
 
3097
- #: includes/extend/buddypress/group.php:265
3098
  msgid "Group Forum"
3099
  msgstr ""
3100
 
3101
- #: includes/extend/buddypress/group.php:531
3102
- #: includes/extend/buddypress/group.php:540
3103
  msgid "This group does not currently have any forums."
3104
  msgstr ""
3105
 
3106
- #: includes/extend/buddypress/loader.php:100
3107
  msgid "Search Forums..."
3108
  msgstr ""
3109
 
@@ -3127,778 +3172,823 @@ msgstr ""
3127
  msgid "Subscribed Topics"
3128
  msgstr ""
3129
 
3130
- #: includes/forums/functions.php:121 includes/forums/functions.php:400
3131
- #: includes/replies/functions.php:117 includes/replies/functions.php:408
3132
- #: includes/topics/functions.php:129 includes/topics/functions.php:482
3133
- #: includes/topics/functions.php:1098 includes/topics/functions.php:1400
3134
- #: includes/topics/functions.php:1751 includes/topics/functions.php:1790
3135
- #: includes/topics/functions.php:1847 includes/users/functions.php:467
3136
- #: includes/users/functions.php:787 includes/users/functions.php:914
3137
- #: includes/users/functions.php:920
3138
  msgid "<strong>ERROR</strong>: Are you sure you wanted to do that?"
3139
  msgstr ""
3140
 
3141
- #: includes/forums/functions.php:134
3142
  msgid ""
3143
  "<strong>ERROR</strong>: You do not have permission to create new forums."
3144
  msgstr ""
3145
 
3146
- #: includes/forums/functions.php:157 includes/forums/functions.php:459
3147
  msgid "<strong>ERROR</strong>: Your forum needs a title."
3148
  msgstr ""
3149
 
3150
- #: includes/forums/functions.php:169 includes/forums/functions.php:471
3151
  msgid "<strong>ERROR</strong>: Your forum description cannot be empty."
3152
  msgstr ""
3153
 
3154
- #: includes/forums/functions.php:182
3155
  msgid "<strong>ERROR</strong>: Your forum must have a parent."
3156
  msgstr ""
3157
 
3158
- #: includes/forums/functions.php:189
3159
  msgid ""
3160
  "<strong>ERROR</strong>: This forum is a category. No forums can be created "
3161
  "in this forum."
3162
  msgstr ""
3163
 
3164
- #: includes/forums/functions.php:194 includes/forums/functions.php:435
3165
  msgid "<strong>ERROR</strong>: This forum has been closed to new forums."
3166
  msgstr ""
3167
 
3168
- #: includes/forums/functions.php:199 includes/forums/functions.php:440
3169
  msgid ""
3170
  "<strong>ERROR</strong>: This forum is private and you do not have the "
3171
  "capability to read or create new forums in it."
3172
  msgstr ""
3173
 
3174
- #: includes/forums/functions.php:204 includes/forums/functions.php:445
3175
  msgid ""
3176
  "<strong>ERROR</strong>: This forum is hidden and you do not have the "
3177
  "capability to read or create new forums in it."
3178
  msgstr ""
3179
 
3180
- #: includes/forums/functions.php:211 includes/replies/functions.php:206
3181
- #: includes/topics/functions.php:228
3182
  msgid "<strong>ERROR</strong>: Slow down; you move too fast."
3183
  msgstr ""
3184
 
3185
- #: includes/forums/functions.php:216
3186
  msgid "<strong>ERROR</strong>: This forum already exists."
3187
  msgstr ""
3188
 
3189
- #: includes/forums/functions.php:221
3190
  msgid "<strong>ERROR</strong>: Your forum cannot be created at this time."
3191
  msgstr ""
3192
 
3193
- #: includes/forums/functions.php:389
3194
  msgid "<strong>ERROR</strong>: Forum ID not found."
3195
  msgstr ""
3196
 
3197
- #: includes/forums/functions.php:405
3198
  msgid "<strong>ERROR</strong>: The forum you want to edit was not found."
3199
  msgstr ""
3200
 
3201
- #: includes/forums/functions.php:410
3202
  msgid "<strong>ERROR</strong>: You do not have permission to edit that forum."
3203
  msgstr ""
3204
 
3205
- #: includes/forums/functions.php:476
3206
  msgid "<strong>ERROR</strong>: Your forum cannot be edited at this time."
3207
  msgstr ""
3208
 
3209
- #: includes/forums/template-tags.php:1121
3210
- #: includes/forums/template-tags.php:1860
3211
  msgid "%s topic"
3212
  msgid_plural "%s topics"
3213
  msgstr[0] ""
3214
  msgstr[1] ""
3215
 
3216
- #: includes/forums/template-tags.php:1137
3217
- #: includes/topics/template-tags.php:1884
3218
  msgid " (+ %d hidden)"
3219
  msgstr ""
3220
 
3221
- #: includes/forums/template-tags.php:1849
3222
- #: includes/topics/template-tags.php:1868
3223
  msgid "%s reply"
3224
  msgid_plural "%s replies"
3225
  msgstr[0] ""
3226
  msgstr[1] ""
3227
 
3228
- #: includes/forums/template-tags.php:1869
3229
  msgid ""
3230
  "This category contains %1$s and %2$s, and was last updated by %3$s %4$s."
3231
  msgstr ""
3232
 
3233
- #: includes/forums/template-tags.php:1871
3234
  msgid "This forum contains %1$s and %2$s, and was last updated by %3$s %4$s."
3235
  msgstr ""
3236
 
3237
- #: includes/forums/template-tags.php:1877
3238
  msgid "This category contains %1$s, and was last updated by %2$s %3$s."
3239
  msgstr ""
3240
 
3241
- #: includes/forums/template-tags.php:1879
3242
  msgid "This forum contains %1$s, and was last updated by %2$s %3$s."
3243
  msgstr ""
3244
 
3245
- #: includes/forums/template-tags.php:1889
3246
  msgid "This category contains %1$s and %2$s."
3247
  msgstr ""
3248
 
3249
- #: includes/forums/template-tags.php:1891
3250
  msgid "This forum contains %1$s and %2$s."
3251
  msgstr ""
3252
 
3253
- #: includes/forums/template-tags.php:1899
3254
  msgid "This category contains %1$s."
3255
  msgstr ""
3256
 
3257
- #: includes/forums/template-tags.php:1901
3258
  msgid "This forum contains %1$s."
3259
  msgstr ""
3260
 
3261
- #: includes/forums/template-tags.php:1905
3262
  msgid "This forum is empty."
3263
  msgstr ""
3264
 
3265
- #: includes/forums/template-tags.php:2136
3266
  msgid "Category"
3267
  msgstr ""
3268
 
3269
- #: includes/forums/template-tags.php:2173
3270
  msgctxt "Forum Status"
3271
  msgid "Open"
3272
  msgstr ""
3273
 
3274
- #: includes/forums/template-tags.php:2174
3275
  msgctxt "Forum Status"
3276
  msgid "Closed"
3277
  msgstr ""
3278
 
3279
- #: includes/forums/template-tags.php:2211
3280
  msgid "Public"
3281
  msgstr ""
3282
 
3283
- #: includes/forums/template-tags.php:2212
3284
  #: templates/default/bbpress/feedback-no-access.php:13
3285
  msgid "Private"
3286
  msgstr ""
3287
 
3288
- #: includes/forums/template-tags.php:2213
3289
  msgid "Hidden"
3290
  msgstr ""
3291
 
3292
- #: includes/replies/functions.php:143
3293
  msgid "<strong>ERROR</strong>: You do not have permission to reply."
3294
  msgstr ""
3295
 
3296
- #: includes/replies/functions.php:157
3297
  msgid "<strong>ERROR</strong>: Topic ID is missing."
3298
  msgstr ""
3299
 
3300
- #: includes/replies/functions.php:168 includes/topics/functions.php:199
3301
- #: includes/topics/functions.php:496
3302
  msgid "<strong>ERROR</strong>: Forum ID is missing."
3303
  msgstr ""
3304
 
3305
- #: includes/replies/functions.php:189
3306
  msgid "<strong>ERROR</strong>: Your reply needs a title."
3307
  msgstr ""
3308
 
3309
- #: includes/replies/functions.php:201 includes/replies/functions.php:492
3310
  msgid "<strong>ERROR</strong>: Your reply cannot be empty."
3311
  msgstr ""
3312
 
3313
- #: includes/replies/functions.php:211
3314
  msgid ""
3315
  "<strong>ERROR</strong>: Duplicate reply detected; it looks as though "
3316
  "you&#8217;ve already said that!"
3317
  msgstr ""
3318
 
3319
- #: includes/replies/functions.php:216
3320
  msgid "<strong>ERROR</strong>: Your reply cannot be created at this time."
3321
  msgstr ""
3322
 
3323
- #: includes/replies/functions.php:285 includes/replies/functions.php:576
3324
  msgid ""
3325
  "<strong>ERROR</strong>: There was a problem adding the tags to the topic."
3326
  msgstr ""
3327
 
3328
- #: includes/replies/functions.php:397
3329
  msgid "<strong>ERROR</strong>: Reply ID not found."
3330
  msgstr ""
3331
 
3332
- #: includes/replies/functions.php:414
3333
  msgid "<strong>ERROR</strong>: The reply you want to edit was not found."
3334
  msgstr ""
3335
 
3336
- #: includes/replies/functions.php:425
3337
  msgid "<strong>ERROR</strong>: You do not have permission to edit that reply."
3338
  msgstr ""
3339
 
3340
- #: includes/replies/functions.php:459
3341
  msgid ""
3342
  "<strong>ERROR</strong>: This forum is a category. No topics or replies can "
3343
  "be created in it."
3344
  msgstr ""
3345
 
3346
- #: includes/replies/functions.php:463
3347
  msgid ""
3348
  "<strong>ERROR</strong>: This forum has been closed to new topics and replies."
3349
  msgstr ""
3350
 
3351
- #: includes/replies/functions.php:467
3352
  msgid ""
3353
  "<strong>ERROR</strong>: This forum is private and you do not have the "
3354
  "capability to read or create new replies in it."
3355
  msgstr ""
3356
 
3357
- #: includes/replies/functions.php:471
3358
  msgid ""
3359
  "<strong>ERROR</strong>: This forum is hidden and you do not have the "
3360
  "capability to read or create new replies in it."
3361
  msgstr ""
3362
 
3363
- #: includes/replies/functions.php:497
3364
  msgid "<strong>ERROR</strong>: Your reply cannot be edited at this time."
3365
  msgstr ""
3366
 
3367
- #: includes/replies/functions.php:1075
3368
- msgid "<strong>ERROR:</strong> You do not have the permission to do that!"
 
 
 
 
3369
  msgstr ""
3370
 
3371
  #: includes/replies/functions.php:1088
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3372
  msgid ""
3373
  "<strong>ERROR</strong>: There was a problem unmarking the reply as spam!"
3374
  msgstr ""
3375
 
3376
- #: includes/replies/functions.php:1088
3377
  msgid "<strong>ERROR</strong>: There was a problem marking the reply as spam!"
3378
  msgstr ""
3379
 
3380
- #: includes/replies/functions.php:1107
3381
  msgid "<strong>ERROR</strong>: There was a problem trashing the reply!"
3382
  msgstr ""
3383
 
3384
- #: includes/replies/functions.php:1115
3385
  msgid "<strong>ERROR</strong>: There was a problem untrashing the reply!"
3386
  msgstr ""
3387
 
3388
- #: includes/replies/functions.php:1123
3389
  msgid "<strong>ERROR</strong>: There was a problem deleting the reply!"
3390
  msgstr ""
3391
 
3392
- #: includes/replies/functions.php:1512
3393
  msgid "All Posts"
3394
  msgstr ""
3395
 
3396
- #: includes/replies/functions.php:1554 includes/topics/functions.php:3249
3397
  msgid "Replies: %s"
3398
  msgstr ""
3399
 
3400
- #: includes/replies/template-tags.php:545
3401
- #: includes/topics/template-tags.php:688
3402
  msgctxt "date at time"
3403
  msgid "%1$s at %2$s"
3404
  msgstr ""
3405
 
3406
- #: includes/replies/template-tags.php:643
3407
  msgid "This reply was modified %1$s by %2$s. Reason: %3$s"
3408
  msgstr ""
3409
 
3410
- #: includes/replies/template-tags.php:645
3411
  msgid "This reply was modified %1$s by %2$s."
3412
  msgstr ""
3413
 
3414
- #: includes/replies/template-tags.php:930
3415
- #: includes/topics/template-tags.php:1235 includes/users/template-tags.php:165
3416
  msgid "Anonymous"
3417
  msgstr ""
3418
 
3419
- #: includes/replies/template-tags.php:1031
3420
- #: includes/topics/template-tags.php:1340
3421
- #: includes/users/template-tags.php:1383
3422
  msgid "View %s's profile"
3423
  msgstr ""
3424
 
3425
- #: includes/replies/template-tags.php:1031
3426
- #: includes/topics/template-tags.php:1340
3427
- #: includes/users/template-tags.php:1383
3428
  msgid "Visit %s's website"
3429
  msgstr ""
3430
 
3431
- #: includes/replies/template-tags.php:1650
3432
- #: includes/topics/template-tags.php:2388
3433
  #: templates/default/bbpress/form-topic-tag.php:88
3434
  #: templates/default/bbpress/form-topic-tag.php:101
3435
  msgid "Delete"
3436
  msgstr ""
3437
 
3438
- #: includes/replies/template-tags.php:1669
3439
- #: includes/topics/template-tags.php:2407
3440
  msgid "Are you sure you want to delete that permanently?"
3441
  msgstr ""
3442
 
3443
- #: includes/replies/template-tags.php:1720
3444
- #: includes/topics/template-tags.php:2644
3445
  msgid "Unspam"
3446
  msgstr ""
3447
 
3448
- #: includes/replies/template-tags.php:1783
 
 
 
 
 
 
 
 
3449
  msgid "Split"
3450
  msgstr ""
3451
 
3452
- #: includes/replies/template-tags.php:1784
3453
  msgid "Split the topic from this reply"
3454
  msgstr ""
3455
 
3456
- #: includes/replies/template-tags.php:1891
3457
  msgid "Viewing %1$s reply"
3458
  msgid_plural "Viewing %1$s replies"
3459
  msgstr[0] ""
3460
  msgstr[1] ""
3461
 
3462
- #: includes/replies/template-tags.php:1895
3463
  msgid "Viewing %2$s replies (of %4$s total)"
3464
  msgid_plural "Viewing %1$s replies - %2$s through %3$s (of %4$s total)"
3465
  msgstr[0] ""
3466
  msgstr[1] ""
3467
 
3468
- #: includes/replies/template-tags.php:1903
3469
  msgid "Viewing %1$s post"
3470
  msgid_plural "Viewing %1$s posts"
3471
  msgstr[0] ""
3472
  msgstr[1] ""
3473
 
3474
- #: includes/replies/template-tags.php:1907
3475
  msgid "Viewing %2$s post (of %4$s total)"
3476
  msgid_plural "Viewing %1$s posts - %2$s through %3$s (of %4$s total)"
3477
  msgstr[0] ""
3478
  msgstr[1] ""
3479
 
3480
- #: includes/topics/functions.php:157
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3481
  msgid ""
3482
  "<strong>ERROR</strong>: You do not have permission to create new topics."
3483
  msgstr ""
3484
 
3485
- #: includes/topics/functions.php:181 includes/topics/functions.php:536
3486
  msgid "<strong>ERROR</strong>: Your topic needs a title."
3487
  msgstr ""
3488
 
3489
- #: includes/topics/functions.php:193 includes/topics/functions.php:548
3490
  msgid "<strong>ERROR</strong>: Your topic cannot be empty."
3491
  msgstr ""
3492
 
3493
- #: includes/topics/functions.php:210
3494
  msgid ""
3495
  "<strong>ERROR</strong>: This forum is a category. No topics can be created "
3496
  "in this forum."
3497
  msgstr ""
3498
 
3499
- #: includes/topics/functions.php:214 includes/topics/functions.php:515
3500
  msgid "<strong>ERROR</strong>: This forum has been closed to new topics."
3501
  msgstr ""
3502
 
3503
- #: includes/topics/functions.php:218 includes/topics/functions.php:519
3504
  msgid ""
3505
  "<strong>ERROR</strong>: This forum is private and you do not have the "
3506
  "capability to read or create new topics in it."
3507
  msgstr ""
3508
 
3509
- #: includes/topics/functions.php:222 includes/topics/functions.php:523
3510
  msgid ""
3511
  "<strong>ERROR</strong>: This forum is hidden and you do not have the "
3512
  "capability to read or create new topics in it."
3513
  msgstr ""
3514
 
3515
- #: includes/topics/functions.php:233
3516
  msgid ""
3517
  "<strong>ERROR</strong>: Duplicate topic detected; it looks as though "
3518
  "you&#8217;ve already said that!"
3519
  msgstr ""
3520
 
3521
- #: includes/topics/functions.php:238
3522
  msgid "<strong>ERROR</strong>: Your topic cannot be created at this time."
3523
  msgstr ""
3524
 
3525
- #: includes/topics/functions.php:444 includes/topics/functions.php:1092
3526
  msgid "<strong>ERROR</strong>: Topic ID not found."
3527
  msgstr ""
3528
 
3529
- #: includes/topics/functions.php:455
3530
  msgid "<strong>ERROR</strong>: The topic you want to edit was not found."
3531
  msgstr ""
3532
 
3533
- #: includes/topics/functions.php:466
3534
  msgid "<strong>ERROR</strong>: You do not have permission to edit that topic."
3535
  msgstr ""
3536
 
3537
- #: includes/topics/functions.php:511
3538
  msgid ""
3539
  "<strong>ERROR</strong>: This forum is a category. No topics can be created "
3540
  "in it."
3541
  msgstr ""
3542
 
3543
- #: includes/topics/functions.php:553
3544
  msgid "<strong>ERROR</strong>: Your topic cannot be edited at this time."
3545
  msgstr ""
3546
 
3547
- #: includes/topics/functions.php:1103
3548
  msgid "<strong>ERROR</strong>: The topic you want to merge was not found."
3549
  msgstr ""
3550
 
3551
- #: includes/topics/functions.php:1109 includes/topics/functions.php:1406
3552
- msgid ""
3553
- "<strong>ERROR</strong>: You do not have the permissions to edit the source "
3554
- "topic."
3555
- msgstr ""
3556
-
3557
- #: includes/topics/functions.php:1117
3558
  msgid "<strong>ERROR</strong>: Destination topic ID not found."
3559
  msgstr ""
3560
 
3561
- #: includes/topics/functions.php:1123
3562
  msgid "<strong>ERROR</strong>: The topic you want to merge to was not found."
3563
  msgstr ""
3564
 
3565
- #: includes/topics/functions.php:1127
3566
  msgid ""
3567
  "<strong>ERROR</strong>: You do not have the permissions to edit the "
3568
  "destination topic."
3569
  msgstr ""
3570
 
3571
- #: includes/topics/functions.php:1379
3572
  msgid "<strong>ERROR</strong>: Reply ID to split the topic from not found!"
3573
  msgstr ""
3574
 
3575
- #: includes/topics/functions.php:1387
3576
  msgid "<strong>ERROR</strong>: The reply you want to split from was not found."
3577
  msgstr ""
3578
 
3579
- #: includes/topics/functions.php:1396
3580
  msgid "<strong>ERROR</strong>: The topic you want to split was not found."
3581
  msgstr ""
3582
 
3583
- #: includes/topics/functions.php:1414
3584
  msgid "<strong>ERROR</strong>: You need to choose a valid split option."
3585
  msgstr ""
3586
 
3587
- #: includes/topics/functions.php:1427
3588
- msgid "<strong>ERROR</strong>: Destination topic ID not found!"
3589
- msgstr ""
3590
-
3591
- #: includes/topics/functions.php:1436
3592
  msgid "<strong>ERROR</strong>: The topic you want to split to was not found!"
3593
  msgstr ""
3594
 
3595
- #: includes/topics/functions.php:1440
3596
- msgid ""
3597
- "<strong>ERROR</strong>: You do not have the permissions to edit the "
3598
- "destination topic!"
3599
- msgstr ""
3600
-
3601
- #: includes/topics/functions.php:1479
3602
- msgid ""
3603
- "<strong>ERROR</strong>: There was a problem converting the reply into the "
3604
- "topic. Please try again."
3605
- msgstr ""
3606
-
3607
- #: includes/topics/functions.php:1484
3608
- msgid ""
3609
- "<strong>ERROR</strong>: You do not have the permissions to create new "
3610
- "topics. The reply could not be converted into a topic."
3611
- msgstr ""
3612
-
3613
- #: includes/topics/functions.php:1739
3614
  msgid ""
3615
  "<strong>ERROR</strong>: The following problem(s) have been found while "
3616
  "getting the tag: %s"
3617
  msgstr ""
3618
 
3619
- #: includes/topics/functions.php:1757 includes/topics/functions.php:1796
3620
  msgid ""
3621
  "<strong>ERROR</strong>: You do not have the permissions to edit the topic "
3622
  "tags."
3623
  msgstr ""
3624
 
3625
- #: includes/topics/functions.php:1763 includes/topics/functions.php:1802
3626
  msgid "<strong>ERROR</strong>: You need to enter a tag name."
3627
  msgstr ""
3628
 
3629
- #: includes/topics/functions.php:1773
3630
  msgid ""
3631
  "<strong>ERROR</strong>: The following problem(s) have been found while "
3632
  "updating the tag: %s"
3633
  msgstr ""
3634
 
3635
- #: includes/topics/functions.php:1812 includes/topics/functions.php:1830
3636
  msgid ""
3637
  "<strong>ERROR</strong>: The following problem(s) have been found while "
3638
  "merging the tags: %s"
3639
  msgstr ""
3640
 
3641
- #: includes/topics/functions.php:1821
3642
  msgid ""
3643
  "<strong>ERROR</strong>: The tags which are being merged can not be the same."
3644
  msgstr ""
3645
 
3646
- #: includes/topics/functions.php:1853
3647
  msgid ""
3648
  "<strong>ERROR</strong>: You do not have the permissions to delete the topic "
3649
  "tags."
3650
  msgstr ""
3651
 
3652
- #: includes/topics/functions.php:1862
3653
  msgid ""
3654
  "<strong>ERROR</strong>: The following problem(s) have been found while "
3655
  "deleting the tag: %s"
3656
  msgstr ""
3657
 
3658
- #: includes/topics/functions.php:1991
3659
  msgid "<strong>ERROR:</strong> You do not have the permission to do that."
3660
  msgstr ""
3661
 
3662
- #: includes/topics/functions.php:2004
3663
  msgid "<strong>ERROR</strong>: There was a problem closing the topic."
3664
  msgstr ""
3665
 
3666
- #: includes/topics/functions.php:2004
3667
  msgid "<strong>ERROR</strong>: There was a problem opening the topic."
3668
  msgstr ""
3669
 
3670
- #: includes/topics/functions.php:2015
3671
  msgid "<strong>ERROR</strong>: There was a problem unsticking the topic."
3672
  msgstr ""
3673
 
3674
- #: includes/topics/functions.php:2015
3675
  msgid "<strong>ERROR</strong>: There was a problem sticking the topic."
3676
  msgstr ""
3677
 
3678
- #: includes/topics/functions.php:2025
3679
  msgid ""
3680
  "<strong>ERROR</strong>: There was a problem unmarking the topic as spam."
3681
  msgstr ""
3682
 
3683
- #: includes/topics/functions.php:2025
3684
  msgid "<strong>ERROR</strong>: There was a problem marking the topic as spam."
3685
  msgstr ""
3686
 
3687
- #: includes/topics/functions.php:2044
3688
  msgid "<strong>ERROR</strong>: There was a problem trashing the topic."
3689
  msgstr ""
3690
 
3691
- #: includes/topics/functions.php:2052
3692
  msgid "<strong>ERROR</strong>: There was a problem untrashing the topic."
3693
  msgstr ""
3694
 
3695
- #: includes/topics/functions.php:2060
3696
  msgid "<strong>ERROR</strong>: There was a problem deleting the topic."
3697
  msgstr ""
3698
 
3699
- #: includes/topics/template-tags.php:865
3700
  msgid "This topic was modified %1$s by %2$s. Reason: %3$s"
3701
  msgstr ""
3702
 
3703
- #: includes/topics/template-tags.php:867
3704
  msgid "This topic was modified %1$s by %2$s."
3705
  msgstr ""
3706
 
3707
- #: includes/topics/template-tags.php:2060
3708
  msgid "Tagged:"
3709
  msgstr ""
3710
 
3711
- #: includes/topics/template-tags.php:2456
3712
  msgctxt "Topic Status"
3713
  msgid "Close"
3714
  msgstr ""
3715
 
3716
- #: includes/topics/template-tags.php:2457
3717
  msgctxt "Topic Status"
3718
  msgid "Open"
3719
  msgstr ""
3720
 
3721
- #: includes/topics/template-tags.php:2587
3722
  #: templates/default/bbpress/form-topic-tag.php:59
3723
  #: templates/default/bbpress/form-topic-tag.php:73
3724
  msgid "Merge"
3725
  msgstr ""
3726
 
3727
- #: includes/topics/template-tags.php:2699
3728
  msgid "Viewing %1$s topic"
3729
  msgid_plural "Viewing %1$s topics"
3730
  msgstr[0] ""
3731
  msgstr[1] ""
3732
 
3733
- #: includes/topics/template-tags.php:2703
3734
  msgid "Viewing topic %2$s (of %4$s total)"
3735
  msgid_plural "Viewing %1$s topics - %2$s through %3$s (of %4$s total)"
3736
  msgstr[0] ""
3737
  msgstr[1] ""
3738
 
3739
- #: includes/topics/template-tags.php:2763
3740
  msgid "This topic is marked as spam."
3741
  msgstr ""
3742
 
3743
- #: includes/topics/template-tags.php:2768
3744
  msgid "This topic is in the trash."
3745
  msgstr ""
3746
 
3747
- #: includes/topics/template-tags.php:2806
3748
  msgid "Normal"
3749
  msgstr ""
3750
 
3751
- #: includes/topics/template-tags.php:2807
3752
  msgid "Sticky"
3753
  msgstr ""
3754
 
3755
- #: includes/topics/template-tags.php:2808
3756
  msgid "Super Sticky"
3757
  msgstr ""
3758
 
3759
- #: includes/topics/template-tags.php:2929
3760
  msgid "%s voice"
3761
  msgid_plural "%s voices"
3762
  msgstr[0] ""
3763
  msgstr[1] ""
3764
 
3765
- #: includes/topics/template-tags.php:2935
3766
  msgid "This topic contains %1$s, has %2$s, and was last updated by %3$s %4$s."
3767
  msgstr ""
3768
 
3769
- #: includes/topics/template-tags.php:2939
3770
  msgid "This topic contains %1$s and has %2$s."
3771
  msgstr ""
3772
 
3773
- #: includes/topics/template-tags.php:2943
3774
  msgid "This topic has no replies."
3775
  msgstr ""
3776
 
3777
- #: includes/users/functions.php:463
3778
  msgid ""
3779
  "<strong>ERROR</strong>: No topic was found! Which topic are you marking/"
3780
  "unmarking as favorite?"
3781
  msgstr ""
3782
 
3783
- #: includes/users/functions.php:471 includes/users/functions.php:791
3784
  msgid ""
3785
  "<strong>ERROR</strong>: You don't have the permission to edit favorites of "
3786
  "that user!"
3787
  msgstr ""
3788
 
3789
- #: includes/users/functions.php:512
3790
  msgid ""
3791
  "<strong>ERROR</strong>: There was a problem removing that topic from "
3792
  "favorites!"
3793
  msgstr ""
3794
 
3795
- #: includes/users/functions.php:514
3796
  msgid "<strong>ERROR</strong>: There was a problem favoriting that topic!"
3797
  msgstr ""
3798
 
3799
- #: includes/users/functions.php:783
3800
  msgid ""
3801
  "<strong>ERROR</strong>: No topic was found! Which topic are you subscribing/"
3802
  "unsubscribing to?"
3803
  msgstr ""
3804
 
3805
- #: includes/users/functions.php:832
3806
  msgid ""
3807
  "<strong>ERROR</strong>: There was a problem unsubscribing from that topic!"
3808
  msgstr ""
3809
 
3810
- #: includes/users/functions.php:834
3811
  msgid "<strong>ERROR</strong>: There was a problem subscribing to that topic!"
3812
  msgstr ""
3813
 
3814
- #: includes/users/template-tags.php:438
3815
  msgid "Key Master"
3816
  msgstr ""
3817
 
3818
- #: includes/users/template-tags.php:442
3819
  msgid "Inactive"
3820
  msgstr ""
3821
 
3822
- #: includes/users/template-tags.php:446
3823
  msgid "Guest"
3824
  msgstr ""
3825
 
3826
- #: includes/users/template-tags.php:458
3827
  msgid "Member"
3828
  msgstr ""
3829
 
3830
- #: includes/users/template-tags.php:497
3831
  msgid "Admin"
3832
  msgstr ""
3833
 
3834
- #: includes/users/template-tags.php:674
3835
- #: templates/default/bbpress-functions.php:256
3836
- msgid "Add this topic to your favorites"
3837
  msgstr ""
3838
 
3839
- #: includes/users/template-tags.php:675
3840
- msgid " (%?%)"
3841
  msgstr ""
3842
 
3843
- #: includes/users/template-tags.php:681
3844
- msgid "This topic is one of your %favorites% ["
3845
- msgstr ""
3846
-
3847
- #: includes/users/template-tags.php:682
3848
- #: templates/default/bbpress-functions.php:255
3849
- msgid "&times;"
3850
- msgstr ""
3851
-
3852
- #: includes/users/template-tags.php:683
3853
- msgid "]"
3854
- msgstr ""
3855
-
3856
- #: includes/users/template-tags.php:825
3857
- #: templates/default/bbpress-functions.php:265
3858
  msgid "Subscribe"
3859
  msgstr ""
3860
 
3861
- #: includes/users/template-tags.php:826
3862
- #: templates/default/bbpress-functions.php:266
3863
  msgid "Unsubscribe"
3864
  msgstr ""
3865
 
3866
- #: includes/users/template-tags.php:892
3867
  msgid "User updated."
3868
  msgstr ""
3869
 
3870
- #: includes/users/template-tags.php:917
3871
  msgid "You have super admin privileges."
3872
  msgstr ""
3873
 
3874
- #: includes/users/template-tags.php:917
3875
  msgid "This user has super admin privileges."
3876
  msgstr ""
3877
 
3878
- #: includes/users/template-tags.php:982
3879
  msgid "&mdash; No role for this site &mdash;"
3880
  msgstr ""
3881
 
3882
- #: includes/users/template-tags.php:1180
3883
  msgid "You are now logged out."
3884
  msgstr ""
3885
 
3886
- #: includes/users/template-tags.php:1184
3887
  msgid "New user registration is currently not allowed."
3888
  msgstr ""
3889
 
3890
- #: includes/users/template-tags.php:1193
3891
  msgid "Check your e-mail for the confirmation link."
3892
  msgstr ""
3893
 
3894
- #: includes/users/template-tags.php:1198
3895
  msgid "Check your e-mail for your new password."
3896
  msgstr ""
3897
 
3898
- #: includes/users/template-tags.php:1203
3899
  msgid "Registration complete. Please check your e-mail."
3900
  msgstr ""
3901
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3902
  #: templates/default/bbpress/feedback-logged-in.php:13
3903
  msgid "You are already logged in."
3904
  msgstr ""
@@ -3915,6 +4005,10 @@ msgstr ""
3915
  msgid "Oh bother! No replies were found here!"
3916
  msgstr ""
3917
 
 
 
 
 
3918
  #: templates/default/bbpress/feedback-no-topics.php:13
3919
  msgid "Oh bother! No topics were found here!"
3920
  msgstr ""
@@ -3977,7 +4071,8 @@ msgid "(No Parent)"
3977
  msgstr ""
3978
 
3979
  #: templates/default/bbpress/form-forum.php:149
3980
- #: templates/default/bbpress/form-reply.php:149
 
3981
  #: templates/default/bbpress/form-topic-merge.php:94
3982
  #: templates/default/bbpress/form-topic-split.php:98
3983
  #: templates/default/bbpress/form-topic.php:198
@@ -4000,6 +4095,59 @@ msgstr ""
4000
  msgid "Protected"
4001
  msgstr ""
4002
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4003
  #: templates/default/bbpress/form-reply.php:36
4004
  msgid ""
4005
  "This topic is marked as closed to new replies, however your posting "
@@ -4040,23 +4188,27 @@ msgstr ""
4040
  msgid "Optional reason for editing:"
4041
  msgstr ""
4042
 
4043
- #: templates/default/bbpress/form-reply.php:172
4044
  msgid "The topic &#8216;%s&#8217; is closed to new replies."
4045
  msgstr ""
4046
 
4047
- #: templates/default/bbpress/form-reply.php:180
4048
  #: templates/default/bbpress/form-topic.php:221
4049
  msgid "The forum &#8216;%s&#8217; is closed to new topics and replies."
4050
  msgstr ""
4051
 
4052
- #: templates/default/bbpress/form-reply.php:188
4053
  msgid "You cannot reply to this topic."
4054
  msgstr ""
4055
 
4056
- #: templates/default/bbpress/form-reply.php:188
4057
  msgid "You must be logged in to reply to this topic."
4058
  msgstr ""
4059
 
 
 
 
 
4060
  #: templates/default/bbpress/form-topic-merge.php:24
4061
  msgid "Merge topic \"%s\""
4062
  msgstr ""
@@ -4114,11 +4266,6 @@ msgstr ""
4114
  msgid "Merge topic tags"
4115
  msgstr ""
4116
 
4117
- #: templates/default/bbpress/form-topic-merge.php:90
4118
- #: templates/default/bbpress/form-topic-split.php:94
4119
- msgid "<strong>WARNING:</strong> This process cannot be undone."
4120
- msgstr ""
4121
-
4122
  #: templates/default/bbpress/form-topic-merge.php:107
4123
  #: templates/default/bbpress/form-topic-split.php:111
4124
  msgid "You do not have the permissions to edit this topic!"
@@ -4151,22 +4298,10 @@ msgstr ""
4151
  msgid "Split Method"
4152
  msgstr ""
4153
 
4154
- #: templates/default/bbpress/form-topic-split.php:41
4155
- msgid "New topic in <strong>%s</strong> titled:"
4156
- msgstr ""
4157
-
4158
  #: templates/default/bbpress/form-topic-split.php:42
4159
  msgid "Split: %s"
4160
  msgstr ""
4161
 
4162
- #: templates/default/bbpress/form-topic-split.php:49
4163
- msgid "Use an existing topic in this forum:"
4164
- msgstr ""
4165
-
4166
- #: templates/default/bbpress/form-topic-split.php:58
4167
- msgid "No other topics found!"
4168
- msgstr ""
4169
-
4170
  #: templates/default/bbpress/form-topic-split.php:76
4171
  msgid "Copy subscribers to the new topic"
4172
  msgstr ""
@@ -4301,65 +4436,55 @@ msgstr ""
4301
  msgid "Biographical Info"
4302
  msgstr ""
4303
 
4304
- #: templates/default/bbpress/form-user-edit.php:84
4305
- msgid ""
4306
- "Share a little biographical information to fill out your profile. This may "
4307
- "be shown publicly."
4308
- msgstr ""
4309
-
4310
- #: templates/default/bbpress/form-user-edit.php:91
4311
- #: templates/default/bbpress/form-user-edit.php:94
4312
  msgid "Account"
4313
  msgstr ""
4314
 
4315
- #: templates/default/bbpress/form-user-edit.php:101
4316
- msgid "Usernames cannot be changed."
4317
- msgstr ""
4318
-
4319
- #: templates/default/bbpress/form-user-edit.php:117
4320
  msgid ""
4321
  "There is a pending email address change to <code>%1$s</code>. <a href=\"%2$s"
4322
  "\">Cancel</a>"
4323
  msgstr ""
4324
 
4325
- #: templates/default/bbpress/form-user-edit.php:126
4326
  msgid "New Password"
4327
  msgstr ""
4328
 
4329
- #: templates/default/bbpress/form-user-edit.php:129
4330
  msgid ""
4331
  "If you would like to change the password type a new one. Otherwise leave "
4332
  "this blank."
4333
  msgstr ""
4334
 
4335
- #: templates/default/bbpress/form-user-edit.php:132
4336
  msgid "Type your new password again."
4337
  msgstr ""
4338
 
4339
- #: templates/default/bbpress/form-user-edit.php:135
4340
  msgid ""
4341
  "Your password should be at least ten characters long. Use upper and lower "
4342
  "case letters, numbers, and symbols to make it even stronger."
4343
  msgstr ""
4344
 
4345
- #: templates/default/bbpress/form-user-edit.php:145
4346
- #: templates/default/bbpress/form-user-edit.php:148
4347
  msgid "User Role"
4348
  msgstr ""
4349
 
4350
- #: templates/default/bbpress/form-user-edit.php:155
4351
  msgid "Network Role"
4352
  msgstr ""
4353
 
4354
- #: templates/default/bbpress/form-user-edit.php:158
4355
  msgid "Grant this user super admin privileges for the Network."
4356
  msgstr ""
4357
 
4358
- #: templates/default/bbpress/form-user-edit.php:180
4359
  msgid "Update Profile"
4360
  msgstr ""
4361
 
4362
- #: templates/default/bbpress/form-user-edit.php:180
4363
  msgid "Update User"
4364
  msgstr ""
4365
 
@@ -4393,15 +4518,44 @@ msgstr ""
4393
  msgid "Blog Role"
4394
  msgstr ""
4395
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4396
  #: templates/default/bbpress/loop-single-reply.php:21
4397
  msgid "in reply to: "
4398
  msgstr ""
4399
 
4400
- #: templates/default/bbpress/loop-single-topic.php:30
4401
  msgid "Started by: %1$s"
4402
  msgstr ""
4403
 
4404
- #: templates/default/bbpress/loop-single-topic.php:38
4405
  msgid "in: <a href=\"%1$s\">%2$s</a>"
4406
  msgstr ""
4407
 
@@ -4490,40 +4644,48 @@ msgstr ""
4490
  msgid "This user has not created any topics."
4491
  msgstr ""
4492
 
4493
- #: templates/default/bbpress-functions.php:251
4494
- msgid "favorites"
4495
  msgstr ""
4496
 
4497
- #: templates/default/bbpress-functions.php:252
4498
- msgid "?"
4499
  msgstr ""
4500
 
4501
- #: templates/default/bbpress-functions.php:253
4502
- msgid "This topic is one of your %favLinkYes% [%favDel%]"
4503
  msgstr ""
4504
 
4505
- #: templates/default/bbpress-functions.php:254
4506
- msgid "%favAdd% (%favLinkNo%)"
 
4507
  msgstr ""
4508
 
4509
- #: templates/default/extras/page-forum-statistics.php:26
4510
- msgid "<p>Here are the statistics and popular topics of our forums.</p>"
 
4511
  msgstr ""
4512
 
4513
- #: templates/default/extras/page-forum-statistics.php:34
4514
- msgid "Registered Users"
 
4515
  msgstr ""
4516
 
4517
- #: templates/default/extras/page-forum-statistics.php:61
4518
- msgid "Empty Topic Tags"
 
4519
  msgstr ""
4520
 
4521
- #: templates/default/extras/page-forum-statistics.php:70
4522
- msgid "Hidden Topics"
4523
  msgstr ""
4524
 
4525
- #: templates/default/extras/page-forum-statistics.php:81
4526
- msgid "Hidden Replies"
 
 
 
 
4527
  msgstr ""
4528
 
4529
  #: templates/default/extras/page-topic-tags.php:22
@@ -4535,9 +4697,9 @@ msgstr ""
4535
  msgid "bbPress"
4536
  msgstr ""
4537
 
4538
- #. #-#-#-#-# plugin.pot (bbPress 2.2) #-#-#-#-#
4539
  #. Plugin URI of the plugin/theme
4540
- #. #-#-#-#-# plugin.pot (bbPress 2.2) #-#-#-#-#
4541
  #. Author URI of the plugin/theme
4542
  msgid "http://bbpress.org"
4543
  msgstr ""
1
+ # Copyright (C) 2013 bbPress
2
  # This file is distributed under the same license as the bbPress package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: bbPress 2.3\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/bbpress\n"
7
+ "POT-Creation-Date: 2013-01-28 18:51:15+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: 2013-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
 
15
+ #: bbpress.php:131 bbpress.php:138
16
  msgid "Cheatin&#8217; huh?"
17
  msgstr ""
18
 
19
+ #: bbpress.php:404 templates/default/bbpress-functions.php:68
20
  msgid "bbPress Default"
21
  msgstr ""
22
 
23
+ #: bbpress.php:487 bbpress.php:488 includes/admin/admin.php:211
24
+ #: includes/admin/admin.php:212 includes/admin/admin.php:222
25
+ #: includes/admin/admin.php:223 includes/admin/users.php:82
26
+ #: includes/extend/buddypress/group.php:638
27
  #: includes/extend/buddypress/loader.php:42
28
  #: includes/extend/buddypress/loader.php:170
29
  #: includes/extend/buddypress/loader.php:259
30
  #: includes/extend/buddypress/loader.php:310
31
+ #: templates/default/bbpress/content-statistics.php:22
32
  msgid "Forums"
33
  msgstr ""
34
 
35
+ #: bbpress.php:489 includes/admin/forums.php:420
36
  #: includes/admin/metaboxes.php:50 includes/admin/metaboxes.php:358
37
  #: includes/admin/metaboxes.php:411 includes/admin/replies.php:621
38
+ #: includes/admin/topics.php:686 includes/extend/buddypress/group.php:48
39
+ #: includes/extend/buddypress/group.php:49
40
+ #: includes/forums/template-tags.php:2145
41
  #: templates/default/bbpress/loop-forums.php:19
42
  msgid "Forum"
43
  msgstr ""
44
 
45
+ #: bbpress.php:490 includes/admin/tools.php:1103
46
  msgid "All Forums"
47
  msgstr ""
48
 
49
+ #: bbpress.php:491 bbpress.php:495
50
  msgid "New Forum"
51
  msgstr ""
52
 
53
+ #: bbpress.php:492 templates/default/bbpress/form-forum.php:37
54
  msgid "Create New Forum"
55
  msgstr ""
56
 
57
+ #: bbpress.php:493 bbpress.php:550 bbpress.php:607
58
+ #: includes/common/template-tags.php:2148
59
+ #: includes/replies/template-tags.php:1570
60
+ #: includes/topics/template-tags.php:2307
61
  #: templates/default/bbpress/user-details.php:65
62
  msgid "Edit"
63
  msgstr ""
64
 
65
+ #: bbpress.php:494
66
  msgid "Edit Forum"
67
  msgstr ""
68
 
69
+ #: bbpress.php:496 bbpress.php:497
70
  msgid "View Forum"
71
  msgstr ""
72
 
73
+ #: bbpress.php:498
74
  msgid "Search Forums"
75
  msgstr ""
76
 
77
+ #: bbpress.php:499
78
  msgid "No forums found"
79
  msgstr ""
80
 
81
+ #: bbpress.php:500
82
  msgid "No forums found in Trash"
83
  msgstr ""
84
 
85
+ #: bbpress.php:501 templates/default/bbpress/form-forum.php:129
86
  msgid "Parent Forum:"
87
  msgstr ""
88
 
89
+ #: bbpress.php:524
90
  msgid "bbPress Forums"
91
  msgstr ""
92
 
93
+ #: bbpress.php:544 bbpress.php:545 includes/admin/forums.php:421
94
  #: includes/admin/settings.php:187 includes/admin/settings.php:208
95
+ #: includes/admin/topics.php:685 includes/extend/buddypress/activity.php:400
96
+ #: includes/extend/buddypress/group.php:642
97
+ #: includes/forums/template-tags.php:2293
98
+ #: templates/default/bbpress/content-statistics.php:27
99
  #: templates/default/bbpress/loop-forums.php:20
 
100
  msgid "Topics"
101
  msgstr ""
102
 
103
+ #: bbpress.php:546 includes/admin/metaboxes.php:67
104
  #: includes/admin/metaboxes.php:437 includes/admin/replies.php:622
105
  #: templates/default/bbpress/content-single-topic-lead.php:22
106
  #: templates/default/bbpress/content-single-topic-lead.php:94
108
  msgid "Topic"
109
  msgstr ""
110
 
111
+ #: bbpress.php:547 includes/admin/tools.php:1104
112
+ #: includes/topics/functions.php:3302
113
  msgid "All Topics"
114
  msgstr ""
115
 
116
+ #: bbpress.php:548 bbpress.php:552
117
  msgid "New Topic"
118
  msgstr ""
119
 
120
+ #: bbpress.php:549 templates/default/bbpress/form-topic.php:43
121
  msgid "Create New Topic"
122
  msgstr ""
123
 
124
+ #: bbpress.php:551
125
  msgid "Edit Topic"
126
  msgstr ""
127
 
128
+ #: bbpress.php:553 bbpress.php:554
129
  msgid "View Topic"
130
  msgstr ""
131
 
132
+ #: bbpress.php:555
133
  msgid "Search Topics"
134
  msgstr ""
135
 
136
+ #: bbpress.php:556
137
  msgid "No topics found"
138
  msgstr ""
139
 
140
+ #: bbpress.php:557
141
  msgid "No topics found in Trash"
142
  msgstr ""
143
 
144
+ #: bbpress.php:558 includes/admin/metaboxes.php:357
145
+ #: includes/admin/metaboxes.php:410 includes/extend/buddypress/group.php:948
146
  #: templates/default/bbpress/form-topic.php:125
147
  msgid "Forum:"
148
  msgstr ""
149
 
150
+ #: bbpress.php:581
151
  msgid "bbPress Topics"
152
  msgstr ""
153
 
154
+ #: bbpress.php:601 bbpress.php:602 includes/admin/forums.php:422
155
  #: includes/admin/settings.php:195 includes/admin/settings.php:216
156
+ #: includes/admin/topics.php:687 includes/core/theme-compat.php:560
157
+ #: includes/extend/buddypress/activity.php:401
158
+ #: includes/forums/template-tags.php:2357
159
+ #: templates/default/bbpress/content-statistics.php:32
160
  #: templates/default/bbpress/loop-forums.php:21
161
  #: templates/default/bbpress/loop-replies.php:32
162
  #: templates/default/bbpress/loop-replies.php:62
163
  #: templates/default/bbpress/loop-topics.php:21
 
164
  msgid "Replies"
165
  msgstr ""
166
 
167
+ #: bbpress.php:603 includes/admin/metaboxes.php:84
168
  msgid "Reply"
169
  msgstr ""
170
 
171
+ #: bbpress.php:604 includes/admin/tools.php:1105
172
+ #: includes/replies/functions.php:1810
173
  msgid "All Replies"
174
  msgstr ""
175
 
176
+ #: bbpress.php:605 bbpress.php:609
177
  msgid "New Reply"
178
  msgstr ""
179
 
180
+ #: bbpress.php:606
181
  msgid "Create New Reply"
182
  msgstr ""
183
 
184
+ #: bbpress.php:608
185
  msgid "Edit Reply"
186
  msgstr ""
187
 
188
+ #: bbpress.php:610 bbpress.php:611
189
  msgid "View Reply"
190
  msgstr ""
191
 
192
+ #: bbpress.php:612
193
  msgid "Search Replies"
194
  msgstr ""
195
 
196
+ #: bbpress.php:613
197
  msgid "No replies found"
198
  msgstr ""
199
 
200
+ #: bbpress.php:614
201
  msgid "No replies found in Trash"
202
  msgstr ""
203
 
204
+ #: bbpress.php:615 includes/admin/metaboxes.php:436
205
  msgid "Topic:"
206
  msgstr ""
207
 
208
+ #: bbpress.php:638
209
  msgid "bbPress Replies"
210
  msgstr ""
211
 
212
+ #: bbpress.php:673
213
  msgctxt "post"
214
  msgid "Closed"
215
  msgstr ""
216
 
217
+ #: bbpress.php:674
218
  msgctxt "bbpress"
219
  msgid "Closed <span class=\"count\">(%s)</span>"
220
  msgid_plural "Closed <span class=\"count\">(%s)</span>"
221
  msgstr[0] ""
222
  msgstr[1] ""
223
 
224
+ #: bbpress.php:684
225
  msgctxt "post"
226
  msgid "Spam"
227
  msgstr ""
228
 
229
+ #: bbpress.php:685
230
  msgctxt "bbpress"
231
  msgid "Spam <span class=\"count\">(%s)</span>"
232
  msgid_plural "Spam <span class=\"count\">(%s)</span>"
233
  msgstr[0] ""
234
  msgstr[1] ""
235
 
236
+ #: bbpress.php:697
237
  msgctxt "post"
238
  msgid "Orphan"
239
  msgstr ""
240
 
241
+ #: bbpress.php:698
242
  msgctxt "bbpress"
243
  msgid "Orphan <span class=\"count\">(%s)</span>"
244
  msgid_plural "Orphans <span class=\"count\">(%s)</span>"
245
  msgstr[0] ""
246
  msgstr[1] ""
247
 
248
+ #: bbpress.php:710
249
  msgctxt "post"
250
  msgid "Hidden"
251
  msgstr ""
252
 
253
+ #: bbpress.php:711
254
  msgctxt "bbpress"
255
  msgid "Hidden <span class=\"count\">(%s)</span>"
256
  msgid_plural "Hidden <span class=\"count\">(%s)</span>"
257
  msgstr[0] ""
258
  msgstr[1] ""
259
 
260
+ #: bbpress.php:756 templates/default/bbpress/content-statistics.php:37
261
  msgid "Topic Tags"
262
  msgstr ""
263
 
264
+ #: bbpress.php:757 includes/admin/metaboxes.php:103
265
  msgid "Topic Tag"
266
  msgstr ""
267
 
268
+ #: bbpress.php:758
269
  msgid "Search Tags"
270
  msgstr ""
271
 
272
+ #: bbpress.php:759
273
  msgid "Popular Tags"
274
  msgstr ""
275
 
276
+ #: bbpress.php:760
277
  msgid "All Tags"
278
  msgstr ""
279
 
280
+ #: bbpress.php:761
281
  msgid "Edit Tag"
282
  msgstr ""
283
 
284
+ #: bbpress.php:762
285
  msgid "Update Tag"
286
  msgstr ""
287
 
288
+ #: bbpress.php:763
289
  msgid "Add New Tag"
290
  msgstr ""
291
 
292
+ #: bbpress.php:764
293
  msgid "New Tag Name"
294
  msgstr ""
295
 
296
+ #: bbpress.php:765
297
  msgid "View Topic Tag"
298
  msgstr ""
299
 
300
+ #: bbpress.php:803
301
  msgid "Topics with no replies"
302
  msgstr ""
303
 
304
+ #: includes/admin/admin.php:176 includes/admin/functions.php:224
305
  #: includes/admin/tools.php:34
306
  msgid "Repair Forums"
307
  msgstr ""
308
 
309
+ #: includes/admin/admin.php:177
310
  msgid "Forum Repair"
311
  msgstr ""
312
 
313
+ #: includes/admin/admin.php:186 includes/admin/functions.php:228
314
+ #: includes/admin/settings.php:1269
315
  msgid "Import Forums"
316
  msgstr ""
317
 
318
+ #: includes/admin/admin.php:187
319
  msgid "Forum Import"
320
  msgstr ""
321
 
322
+ #: includes/admin/admin.php:196 includes/admin/functions.php:232
323
+ #: includes/admin/tools.php:1094
324
  msgid "Reset Forums"
325
  msgstr ""
326
 
327
+ #: includes/admin/admin.php:197
328
  msgid "Forum Reset"
329
  msgstr ""
330
 
331
+ #: includes/admin/admin.php:235 includes/admin/admin.php:236
332
+ #: includes/admin/admin.php:244 includes/admin/admin.php:245
333
  msgid "Welcome to bbPress"
334
  msgstr ""
335
 
336
+ #: includes/admin/admin.php:258 includes/admin/admin.php:259
337
+ #: includes/admin/admin.php:280 includes/admin/admin.php:281
338
+ #: includes/admin/admin.php:1607 includes/admin/admin.php:1696
339
  msgid "Update Forums"
340
  msgstr ""
341
 
342
+ #: includes/admin/admin.php:471
343
  msgid "Settings"
344
  msgstr ""
345
 
346
+ #: includes/admin/admin.php:472
347
  msgid "About"
348
  msgstr ""
349
 
350
+ #: includes/admin/admin.php:484
351
  msgid "Right Now in Forums"
352
  msgstr ""
353
 
354
+ #: includes/admin/admin.php:1248
355
  msgctxt "admin color scheme"
356
  msgid "Green"
357
  msgstr ""
358
 
359
+ #: includes/admin/admin.php:1302
360
  msgid "%s - %s"
361
  msgstr ""
362
 
363
+ #: includes/admin/admin.php:1320 includes/admin/admin.php:1426
364
  msgid "Welcome to bbPress %s"
365
  msgstr ""
366
 
367
+ #: includes/admin/admin.php:1321 includes/admin/admin.php:1427
368
  msgid ""
369
  "Thank you for updating to the latest version! bbPress %s is ready to make "
370
  "your community a safer, faster, and better looking place to hang out!"
371
  msgstr ""
372
 
373
+ #: includes/admin/admin.php:1322 includes/admin/admin.php:1428
374
  msgid "Version %s"
375
  msgstr ""
376
 
377
+ #: includes/admin/admin.php:1326 includes/admin/admin.php:1432
378
  msgid "What&#8217;s New"
379
  msgstr ""
380
 
381
+ #: includes/admin/admin.php:1328 includes/admin/admin.php:1434
382
  msgid "Credits"
383
  msgstr ""
384
 
385
+ #: includes/admin/admin.php:1333
386
  msgid "In-depth User Profiles"
387
  msgstr ""
388
 
389
+ #: includes/admin/admin.php:1336
390
  msgid "User Details"
391
  msgstr ""
392
 
393
+ #: includes/admin/admin.php:1337
394
  msgid ""
395
  "Forum profiles include the details of your forum activity, including your "
396
  "topics and replies, subscriptions, and favorites."
397
  msgstr ""
398
 
399
+ #: includes/admin/admin.php:1339
400
  msgid "Easy Updating"
401
  msgstr ""
402
 
403
+ #: includes/admin/admin.php:1340
404
  msgid "You can easily update your profile without leaving bbPress."
405
  msgstr ""
406
 
407
+ #: includes/admin/admin.php:1345
408
+ msgid "Theme Compatibility"
409
  msgstr ""
410
 
411
+ #: includes/admin/admin.php:1348
412
  msgid "Twenty Twelve"
413
  msgstr ""
414
 
415
+ #: includes/admin/admin.php:1349
416
  msgid ""
417
  "Updated default templates are now Twenty Twelve compatible, and we refreshed "
418
  "our CSS to better integrate with other popular themes, too."
419
  msgstr ""
420
 
421
+ #: includes/admin/admin.php:1354
422
  msgid "Improved User Management"
423
  msgstr ""
424
 
425
+ #: includes/admin/admin.php:1357
426
  msgid "Dynamic User Roles and Capabilities"
427
  msgstr ""
428
 
429
+ #: includes/admin/admin.php:1358
430
  msgid ""
431
  "bbPress now includes some fancy user-roles with smart default capabilities "
432
  "to help you manage your forums. New roles include Key Master (for complete "
433
  "administrative access), Moderator, and Participant for regular forum users."
434
  msgstr ""
435
 
436
+ #: includes/admin/admin.php:1360
437
  msgid "Manage Forum Users from WordPress"
438
  msgstr ""
439
 
440
+ #: includes/admin/admin.php:1361
441
  msgid ""
442
  "You can assign Forums roles to users individually, or bulk update them from "
443
  "the WordPress Users page. Users automatically start out as forum "
444
  "participants."
445
  msgstr ""
446
 
447
+ #: includes/admin/admin.php:1366
448
  msgid "Better BuddyPress Integration"
449
  msgstr ""
450
 
451
+ #: includes/admin/admin.php:1369
452
  msgid "Use bbPress for Your BuddyPress Group Forums"
453
  msgstr ""
454
 
455
+ #: includes/admin/admin.php:1370
456
  msgid ""
457
  "You can now use bbPress to manage your BuddyPress Group Forums, allowing for "
458
  "seamless integration and improved plugin performance. Plugins developed for "
460
  "experience."
461
  msgstr ""
462
 
463
+ #: includes/admin/admin.php:1372
464
  msgid "Activity Stream Syncing"
465
  msgstr ""
466
 
467
+ #: includes/admin/admin.php:1373
468
  msgid ""
469
  "bbPress now keeps track of changes to topics and replies and keeps their "
470
  "corresponding BuddyPress Activity Stream updates synced."
471
  msgstr ""
472
 
473
+ #: includes/admin/admin.php:1378
474
  msgid "Under the Hood"
475
  msgstr ""
476
 
477
+ #: includes/admin/admin.php:1382
478
  msgid "Template Logic"
479
  msgstr ""
480
 
481
+ #: includes/admin/admin.php:1383
482
  msgid ""
483
  "New functions and template stacks are in place to help plugin developers "
484
  "extend bbPress further."
485
  msgstr ""
486
 
487
+ #: includes/admin/admin.php:1385
488
  msgid "Plugin Directory Structure"
489
  msgstr ""
490
 
491
+ #: includes/admin/admin.php:1386
492
  msgid ""
493
  "We simplified the bbPress plugin directory structure, making it easier for "
494
  "plugin developers to find the relevant code."
495
  msgstr ""
496
 
497
+ #: includes/admin/admin.php:1390
498
  msgid "Autocomplete"
499
  msgstr ""
500
 
501
+ #: includes/admin/admin.php:1391
502
  msgid ""
503
  "In WordPress Admin, you now select a parent forum or topic via autocomplete "
504
  "rather than a dropdown."
505
  msgstr ""
506
 
507
+ #: includes/admin/admin.php:1393
508
  msgid "Fancy Editor Support"
509
  msgstr ""
510
 
511
+ #: includes/admin/admin.php:1394
512
  msgid ""
513
  "We improved our support of the Fancy Editor, giving forum users a better "
514
  "experience."
515
  msgstr ""
516
 
517
+ #: includes/admin/admin.php:1398
518
  msgid "WordPress 3.5-ready"
519
  msgstr ""
520
 
521
+ #: includes/admin/admin.php:1399
522
  msgid ""
523
  "bbPress 2.2 has been thoroughly tested against the ongoing development of "
524
  "WordPress 3.5."
525
  msgstr ""
526
 
527
+ #: includes/admin/admin.php:1405 includes/admin/admin.php:1533
528
  msgid "Go to Forum Settings"
529
  msgstr ""
530
 
531
+ #: includes/admin/admin.php:1438
532
  msgid "bbPress is created by a worldwide swarm of busy, busy bees."
533
  msgstr ""
534
 
535
+ #: includes/admin/admin.php:1440
536
  msgid "Project Leaders"
537
  msgstr ""
538
 
539
+ #: includes/admin/admin.php:1445
540
  msgid "Founding Developer"
541
  msgstr ""
542
 
543
+ #: includes/admin/admin.php:1450
544
  msgid "Lead Developer"
545
  msgstr ""
546
 
547
+ #: includes/admin/admin.php:1454
548
  msgid "Contributing Developers"
549
  msgstr ""
550
 
551
+ #: includes/admin/admin.php:1473
552
  msgid "Codex Rockstars"
553
  msgstr ""
554
 
555
+ #: includes/admin/admin.php:1492
556
  msgid "Core Contributors to bbPress 2.2"
557
  msgstr ""
558
 
559
+ #: includes/admin/admin.php:1559 includes/admin/admin.php:1581
560
  msgid "Update Forum"
561
  msgstr ""
562
 
563
+ #: includes/admin/admin.php:1570 includes/admin/admin.php:1624
564
  msgid "All done!"
565
  msgstr ""
566
 
567
+ #: includes/admin/admin.php:1571 includes/admin/admin.php:1625
568
  msgid "Go Back"
569
  msgstr ""
570
 
571
+ #: includes/admin/admin.php:1580
572
  msgid ""
573
  "You can update your forum through this page. Hit the link below to update."
574
  msgstr ""
575
 
576
+ #: includes/admin/admin.php:1652
577
  msgid ""
578
  "Warning! Problem updating %1$s. Your server may not be able to connect to "
579
  "sites running on it. Error message: <em>%2$s</em>"
580
  msgstr ""
581
 
582
+ #: includes/admin/admin.php:1676
583
  msgid ""
584
  "If your browser doesn&#8217;t start loading the next page automatically, "
585
  "click this link:"
586
  msgstr ""
587
 
588
+ #: includes/admin/admin.php:1677
589
  msgid "Next Forums"
590
  msgstr ""
591
 
592
+ #: includes/admin/admin.php:1695
593
  msgid ""
594
  "You can update all the forums on your network through this page. It works by "
595
  "calling the update script of each site automatically. Hit the link below to "
724
  msgid "Converting replies (%1$s - %2$s)"
725
  msgstr ""
726
 
727
+ #: includes/admin/converters/Invision.php:502
728
+ #: includes/admin/converters/SimplePress5.php:495
729
+ #: includes/admin/converters/Vanilla.php:514
730
+ #: includes/admin/converters/bbPress1.php:539
731
+ #: includes/admin/converters/vBulletin.php:536
732
  msgid "Re: "
733
  msgstr ""
734
 
735
  #: includes/admin/forums.php:120 includes/admin/replies.php:132
736
+ #: includes/admin/settings.php:1309 includes/admin/topics.php:132
737
  msgid "Overview"
738
  msgstr ""
739
 
827
 
828
  #: includes/admin/forums.php:162 includes/admin/forums.php:233
829
  #: includes/admin/replies.php:177 includes/admin/replies.php:245
830
+ #: includes/admin/settings.php:1355 includes/admin/topics.php:178
831
  #: includes/admin/topics.php:246
832
  msgid "For more information:"
833
  msgstr ""
834
 
835
  #: includes/admin/forums.php:163 includes/admin/forums.php:234
836
  #: includes/admin/replies.php:178 includes/admin/replies.php:246
837
+ #: includes/admin/settings.php:1356 includes/admin/topics.php:179
838
  #: includes/admin/topics.php:247
839
  msgid ""
840
  "<a href=\"http://codex.bbpress.org\" target=\"_blank\">bbPress "
843
 
844
  #: includes/admin/forums.php:164 includes/admin/forums.php:235
845
  #: includes/admin/replies.php:179 includes/admin/replies.php:247
846
+ #: includes/admin/settings.php:1357 includes/admin/topics.php:180
847
  #: includes/admin/topics.php:248
848
  msgid ""
849
  "<a href=\"http://bbpress.org/forums/\" target=\"_blank\">bbPress Support "
1002
  msgid "%1$s <br /> %2$s"
1003
  msgstr ""
1004
 
1005
+ #: includes/admin/forums.php:474 includes/forums/template-tags.php:541
1006
  msgid "No Topics"
1007
  msgstr ""
1008
 
1149
  msgstr ""
1150
 
1151
  #: includes/admin/metaboxes.php:474
1152
+ #: templates/default/bbpress/form-user-edit.php:103
1153
  #: templates/default/bbpress/form-user-register.php:28
1154
  msgid "Email"
1155
  msgstr ""
1376
  #: includes/admin/replies.php:623 includes/admin/topics.php:689
1377
  #: templates/default/bbpress/loop-replies.php:18
1378
  #: templates/default/bbpress/loop-replies.php:52
1379
+ #: templates/default/bbpress/loop-search.php:18
1380
+ #: templates/default/bbpress/loop-search.php:40
1381
  msgid "Author"
1382
  msgstr ""
1383
 
1415
  msgstr ""
1416
 
1417
  #: includes/admin/replies.php:790 includes/admin/topics.php:863
1418
+ #: includes/replies/template-tags.php:1765
1419
+ #: includes/topics/template-tags.php:2688
1420
  msgid "Spam"
1421
  msgstr ""
1422
 
1423
  #: includes/admin/replies.php:799 includes/admin/topics.php:871
1424
+ #: includes/replies/template-tags.php:1707
1425
+ #: includes/topics/template-tags.php:2444
1426
  msgid "Restore this item from the Trash"
1427
  msgstr ""
1428
 
1429
  #: includes/admin/replies.php:799 includes/admin/topics.php:871
1430
+ #: includes/replies/template-tags.php:1695
1431
+ #: includes/topics/template-tags.php:2432
1432
  msgid "Restore"
1433
  msgstr ""
1434
 
1435
  #: includes/admin/replies.php:801 includes/admin/topics.php:873
1436
+ #: includes/replies/template-tags.php:1709
1437
+ #: includes/topics/template-tags.php:2446
1438
  msgid "Move this item to the Trash"
1439
  msgstr ""
1440
 
1441
  #: includes/admin/replies.php:801 includes/admin/topics.php:873
1442
+ #: includes/replies/template-tags.php:1694
1443
+ #: includes/topics/template-tags.php:2431
1444
  msgid "Trash"
1445
  msgstr ""
1446
 
1447
  #: includes/admin/replies.php:805 includes/admin/topics.php:877
1448
+ #: includes/replies/template-tags.php:1713
1449
+ #: includes/topics/template-tags.php:2450
1450
  msgid "Delete this item permanently"
1451
  msgstr ""
1452
 
1497
  msgid "Reply draft updated. <a target=\"_blank\" href=\"%s\">Preview topic</a>"
1498
  msgstr ""
1499
 
1500
+ #: includes/admin/settings.php:24 includes/admin/settings.php:1317
1501
  msgid "Main Settings"
1502
  msgstr ""
1503
 
1505
  msgid "Theme Packages"
1506
  msgstr ""
1507
 
1508
+ #: includes/admin/settings.php:34 includes/admin/settings.php:1337
1509
  msgid "Per Page"
1510
  msgstr ""
1511
 
1537
  msgid "Throttle posting every"
1538
  msgstr ""
1539
 
1540
+ #: includes/admin/settings.php:97 includes/admin/settings.php:1450
1541
  msgid "Revisions"
1542
  msgstr ""
1543
 
1579
  msgid "Current Package"
1580
  msgstr ""
1581
 
1582
+ #: includes/admin/settings.php:229 includes/admin/settings.php:1463
1583
  msgid "Forums base"
1584
  msgstr ""
1585
 
1586
+ #: includes/admin/settings.php:237 includes/admin/settings.php:1466
1587
  msgid "Topics base"
1588
  msgstr ""
1589
 
1591
  msgid "Forum Prefix"
1592
  msgstr ""
1593
 
1594
+ #: includes/admin/settings.php:258 includes/admin/settings.php:1469
1595
  msgid "Forum slug"
1596
  msgstr ""
1597
 
1598
+ #: includes/admin/settings.php:266 includes/admin/settings.php:1472
1599
  msgid "Topic slug"
1600
  msgstr ""
1601
 
1602
+ #: includes/admin/settings.php:274 includes/admin/settings.php:1484
1603
  msgid "Topic tag slug"
1604
  msgstr ""
1605
 
1606
+ #: includes/admin/settings.php:282 includes/admin/settings.php:1475
1607
  msgid "Reply slug"
1608
  msgstr ""
1609
 
1615
  msgid "Topic view slug"
1616
  msgstr ""
1617
 
1618
+ #: includes/admin/settings.php:306
1619
+ msgid "Search slug"
1620
  msgstr ""
1621
 
1622
  #: includes/admin/settings.php:319
1623
+ msgid "Enable Group Forums"
1624
+ msgstr ""
1625
+
1626
+ #: includes/admin/settings.php:327
1627
  msgid "Group Forums Parent"
1628
  msgstr ""
1629
 
1630
+ #: includes/admin/settings.php:340
1631
  msgid "Use Akismet"
1632
  msgstr ""
1633
 
1634
+ #: includes/admin/settings.php:378
1635
  msgid "Main forum settings for enabling features and setting time limits"
1636
  msgstr ""
1637
 
1638
+ #: includes/admin/settings.php:394 includes/common/functions.php:121
1639
  msgid "minutes"
1640
  msgstr ""
1641
 
1642
+ #: includes/admin/settings.php:410 includes/common/functions.php:122
1643
  msgid "seconds"
1644
  msgstr ""
1645
 
1646
+ #: includes/admin/settings.php:426
1647
  msgid "Allow users to mark topics as favorites"
1648
  msgstr ""
1649
 
1650
+ #: includes/admin/settings.php:442
1651
  msgid "Allow users to subscribe to topics"
1652
  msgstr ""
1653
 
1654
+ #: includes/admin/settings.php:458
1655
  msgid "Allow topics to have tags"
1656
  msgstr ""
1657
 
1658
+ #: includes/admin/settings.php:474
1659
  msgid "Allow topic and reply revision logging"
1660
  msgstr ""
1661
 
1662
+ #: includes/admin/settings.php:490
1663
  msgid "Allow guest users without accounts to create topics and replies"
1664
  msgstr ""
1665
 
1666
+ #: includes/admin/settings.php:506
1667
  msgid ""
1668
  "Automatically assign default role to new, registered users upon visiting the "
1669
  "site."
1670
  msgstr ""
1671
 
1672
+ #: includes/admin/settings.php:544
1673
  msgid "Use the fancy WordPress editor to create and edit topics and replies"
1674
  msgstr ""
1675
 
1676
+ #: includes/admin/settings.php:557
1677
  msgid "How your forum content is displayed within your existing theme."
1678
  msgstr ""
1679
 
1680
+ #: includes/admin/settings.php:581
1681
  msgid "%1$s - %2$s"
1682
  msgstr ""
1683
 
1684
+ #: includes/admin/settings.php:587
1685
  msgid "will serve all bbPress templates"
1686
  msgstr ""
1687
 
1688
+ #: includes/admin/settings.php:591
1689
  msgid "No template packages available."
1690
  msgstr ""
1691
 
1692
+ #: includes/admin/settings.php:607
1693
  msgid ""
1694
  "Embed media (YouTube, Twitter, Flickr, etc...) directly into topics and "
1695
  "replies"
1696
  msgstr ""
1697
 
1698
+ #: includes/admin/settings.php:622
1699
  msgid "How many topics and replies to show per page"
1700
  msgstr ""
1701
 
1702
+ #: includes/admin/settings.php:638 includes/admin/settings.php:654
1703
+ #: includes/admin/settings.php:685 includes/admin/settings.php:701
1704
  msgid "per page"
1705
  msgstr ""
1706
 
1707
+ #: includes/admin/settings.php:669
1708
  msgid "How many topics and replies to show per RSS page"
1709
  msgstr ""
1710
 
1711
+ #: includes/admin/settings.php:719
1712
  msgid ""
1713
  "Custom root slugs to prefix your forums and topics with. These can be "
1714
  "partnered with WordPress pages to allow more flexibility."
1715
  msgstr ""
1716
 
1717
+ #: includes/admin/settings.php:768
1718
  msgid ""
1719
  "Custom slugs for single forums, topics, replies, tags, users, and views "
1720
  "here. If you change these, existing permalinks will also change."
1721
  msgstr ""
1722
 
1723
+ #: includes/admin/settings.php:784
1724
  msgid "Prefix your forum area with the Forum Base slug (Recommended)"
1725
  msgstr ""
1726
 
1727
+ #: includes/admin/settings.php:921
1728
  msgid "Forum settings for BuddyPress"
1729
  msgstr ""
1730
 
1731
+ #: includes/admin/settings.php:937
1732
  msgid "Allow BuddyPress Groups to have their own forums"
1733
  msgstr ""
1734
 
1735
+ #: includes/admin/settings.php:954
1736
  msgid "&mdash; Forum root &mdash;"
1737
  msgstr ""
1738
 
1739
+ #: includes/admin/settings.php:962
1740
  msgid "is the parent for all group forums"
1741
  msgstr ""
1742
 
1743
+ #: includes/admin/settings.php:963
1744
  msgid ""
1745
  "Using the Forum Root is not recommended. Changing this does not move "
1746
  "existing forums."
1747
  msgstr ""
1748
 
1749
+ #: includes/admin/settings.php:978
1750
  msgid "Forum settings for Akismet"
1751
  msgstr ""
1752
 
1753
+ #: includes/admin/settings.php:995
1754
  msgid "Allow Akismet to actively prevent forum spam."
1755
  msgstr ""
1756
 
1757
+ #: includes/admin/settings.php:1018
1758
  msgid "Forums Settings"
1759
  msgstr ""
1760
 
1761
+ #: includes/admin/settings.php:1027
1762
+ #: templates/default/bbpress/form-user-edit.php:173
1763
  msgid "Save Changes"
1764
  msgstr ""
1765
 
1766
+ #: includes/admin/settings.php:1046
1767
  msgid ""
1768
  "Information about your previous forums database so that they can be "
1769
  "converted. <strong>Backup your database before proceeding.</strong>"
1770
  msgstr ""
1771
 
1772
+ #: includes/admin/settings.php:1076
1773
  msgid "is the previous forum software"
1774
  msgstr ""
1775
 
1776
+ #: includes/admin/settings.php:1090
1777
  msgid "IP or hostname"
1778
  msgstr ""
1779
 
1780
+ #: includes/admin/settings.php:1104
1781
  msgid "Use default 3306 if unsure"
1782
  msgstr ""
1783
 
1784
+ #: includes/admin/settings.php:1118
1785
  msgid "User for your database connection"
1786
  msgstr ""
1787
 
1788
+ #: includes/admin/settings.php:1132
1789
  msgid "Password to access the database"
1790
  msgstr ""
1791
 
1792
+ #: includes/admin/settings.php:1146
1793
  msgid "Name of the database with your old forum data"
1794
  msgstr ""
1795
 
1796
+ #: includes/admin/settings.php:1159
1797
  msgid "Some optional parameters to help tune the conversion process."
1798
  msgstr ""
1799
 
1800
+ #: includes/admin/settings.php:1173
1801
  msgid ""
1802
  "(If converting from BuddyPress Forums, use \"wp_bb_\" or your custom prefix)"
1803
  msgstr ""
1804
 
1805
+ #: includes/admin/settings.php:1187
1806
  msgid "rows to process at a time"
1807
  msgstr ""
1808
 
1809
+ #: includes/admin/settings.php:1188
1810
  msgid "Keep this low if you experience out-of-memory issues."
1811
  msgstr ""
1812
 
1813
+ #: includes/admin/settings.php:1202
1814
  msgid "second(s) delay between each group of rows"
1815
  msgstr ""
1816
 
1817
+ #: includes/admin/settings.php:1203
1818
  msgid "Keep this high to prevent too-many-connection issues."
1819
  msgstr ""
1820
 
1821
+ #: includes/admin/settings.php:1217
1822
  msgid "Start a fresh conversion from the beginning"
1823
  msgstr ""
1824
 
1825
+ #: includes/admin/settings.php:1218
1826
  msgid "You should clean old conversion information before starting over."
1827
  msgstr ""
1828
 
1829
+ #: includes/admin/settings.php:1232
1830
  msgid "Purge all information from a previously attempted import"
1831
  msgstr ""
1832
 
1833
+ #: includes/admin/settings.php:1233
1834
  msgid ""
1835
  "Use this if an import failed and you want to remove that incomplete data."
1836
  msgstr ""
1837
 
1838
+ #: includes/admin/settings.php:1247
1839
  msgid "Attempt to import user accounts from previous forums"
1840
  msgstr ""
1841
 
1842
+ #: includes/admin/settings.php:1248
1843
  msgid ""
1844
  "Non-bbPress passwords cannot be automatically converted. They will be "
1845
  "converted as each user logs in."
1846
  msgstr ""
1847
 
1848
+ #: includes/admin/settings.php:1278
1849
  msgid "Start"
1850
  msgstr ""
1851
 
1852
+ #: includes/admin/settings.php:1279
1853
  msgid "Stop"
1854
  msgstr ""
1855
 
1856
+ #: includes/admin/settings.php:1310
1857
  msgid "This screen provides access to all of the Forums settings."
1858
  msgstr ""
1859
 
1860
+ #: includes/admin/settings.php:1311
1861
  msgid ""
1862
  "Please see the additional help tabs for more information on each indiviual "
1863
  "section."
1864
  msgstr ""
1865
 
1866
+ #: includes/admin/settings.php:1318
1867
  msgid "In the Main Settings you have a number of options:"
1868
  msgstr ""
1869
 
1870
+ #: includes/admin/settings.php:1321
1871
  msgid ""
1872
  "You can choose to lock a post after a certain number of minutes. \"Locking "
1873
  "post editing\" will prevent the author from editing some amount of time "
1874
  "after saving a post."
1875
  msgstr ""
1876
 
1877
+ #: includes/admin/settings.php:1322
1878
  msgid ""
1879
  "\"Throttle time\" is the amount of time required between posts from a single "
1880
  "author. The higher the throttle time, the longer a user will need to wait "
1881
  "between posting to the forum."
1882
  msgstr ""
1883
 
1884
+ #: includes/admin/settings.php:1323
1885
  msgid ""
1886
  "Favorites are a way for users to save and later return to topics they favor. "
1887
  "This is enabled by default."
1888
  msgstr ""
1889
 
1890
+ #: includes/admin/settings.php:1324
1891
  msgid ""
1892
  "Subscriptions allow users to subscribe for notifications to topics that "
1893
  "interest them. This is enabled by default."
1894
  msgstr ""
1895
 
1896
+ #: includes/admin/settings.php:1325
1897
  msgid ""
1898
  "Topic-Tags allow users to filter topics between forums. This is enabled by "
1899
  "default."
1900
  msgstr ""
1901
 
1902
+ #: includes/admin/settings.php:1326
1903
  msgid ""
1904
  "\"Anonymous Posting\" allows guest users who do not have accounts on your "
1905
  "site to both create topics as well as replies."
1906
  msgstr ""
1907
 
1908
+ #: includes/admin/settings.php:1327
1909
  msgid ""
1910
  "The Fancy Editor brings the luxury of the Visual editor and HTML editor from "
1911
  "the traditional WordPress dashboard into your theme."
1912
  msgstr ""
1913
 
1914
+ #: includes/admin/settings.php:1328
1915
  msgid ""
1916
  "Auto-embed will embed the media content from a URL directly into the "
1917
  "replies. For example: links to Flickr and YouTube."
1918
  msgstr ""
1919
 
1920
+ #: includes/admin/settings.php:1331
1921
  msgid ""
1922
  "You must click the Save Changes button at the bottom of the screen for new "
1923
  "settings to take effect."
1924
  msgstr ""
1925
 
1926
+ #: includes/admin/settings.php:1338
1927
  msgid ""
1928
  "Per Page settings allow you to control the number of topics and replies "
1929
  "appear on each page."
1930
  msgstr ""
1931
 
1932
+ #: includes/admin/settings.php:1339
1933
  msgid ""
1934
  "This is comparable to the WordPress \"Reading Settings\" page, where you can "
1935
  "set the number of posts that should show on blog pages and in feeds."
1936
  msgstr ""
1937
 
1938
+ #: includes/admin/settings.php:1340
1939
  msgid ""
1940
  "These are broken up into two separate groups: one for what appears in your "
1941
  "theme, another for RSS feeds."
1942
  msgstr ""
1943
 
1944
+ #: includes/admin/settings.php:1346
1945
  msgid "Slugs"
1946
  msgstr ""
1947
 
1948
+ #: includes/admin/settings.php:1347
1949
  msgid ""
1950
  "The Slugs section allows you to control the permalink structure for your "
1951
  "forums."
1952
  msgstr ""
1953
 
1954
+ #: includes/admin/settings.php:1348
1955
  msgid ""
1956
  "\"Archive Slugs\" are used as the \"root\" for your forums and topics. If "
1957
  "you combine these values with existing page slugs, bbPress will attempt to "
1958
  "output the most correct title and content."
1959
  msgstr ""
1960
 
1961
+ #: includes/admin/settings.php:1349
1962
  msgid ""
1963
  "\"Single Slugs\" are used as a prefix when viewing an individual forum, "
1964
  "topic, reply, user, or view."
1965
  msgstr ""
1966
 
1967
+ #: includes/admin/settings.php:1350
1968
  msgid ""
1969
  "In the event of a slug collision with WordPress or BuddyPress, a warning "
1970
  "will appear next to the problem slug(s)."
1971
  msgstr ""
1972
 
1973
+ #: includes/admin/settings.php:1448
1974
  #: templates/default/bbpress/loop-forums.php:21
1975
  #: templates/default/bbpress/loop-replies.php:24
1976
  #: templates/default/bbpress/loop-replies.php:58
1978
  msgid "Posts"
1979
  msgstr ""
1980
 
1981
+ #: includes/admin/settings.php:1449
1982
  msgid "Pages"
1983
  msgstr ""
1984
 
1985
+ #: includes/admin/settings.php:1451
1986
  msgid "Attachments"
1987
  msgstr ""
1988
 
1989
+ #: includes/admin/settings.php:1452
1990
  msgid "Menus"
1991
  msgstr ""
1992
 
1993
+ #: includes/admin/settings.php:1455
1994
  msgid "Tag base"
1995
  msgstr ""
1996
 
1997
+ #: includes/admin/settings.php:1458
1998
  msgid "Category base"
1999
  msgstr ""
2000
 
2001
+ #: includes/admin/settings.php:1478
2002
  msgid "User base"
2003
  msgstr ""
2004
 
2005
+ #: includes/admin/settings.php:1481
2006
  msgid "View base"
2007
  msgstr ""
2008
 
2009
+ #: includes/admin/settings.php:1496
2010
  msgid "%s page"
2011
  msgstr ""
2012
 
2013
+ #: includes/admin/settings.php:1515
2014
  msgid "Possible %1$s conflict: <strong>%2$s</strong>"
2015
  msgstr ""
2016
 
2057
  msgstr ""
2058
 
2059
  #: includes/admin/tools.php:164
2060
+ msgid "Recalculate the sticky replationship of each topic"
2061
  msgstr ""
2062
 
2063
  #: includes/admin/tools.php:165
2064
+ msgid "Repair BuddyPress Group Forum relationships"
2065
  msgstr ""
2066
 
2067
  #: includes/admin/tools.php:166
2068
+ msgid "Count topics in each forum"
2069
  msgstr ""
2070
 
2071
  #: includes/admin/tools.php:167
2072
+ msgid "Count replies in each forum"
2073
  msgstr ""
2074
 
2075
  #: includes/admin/tools.php:168
2076
+ msgid "Count replies in each topic"
2077
  msgstr ""
2078
 
2079
  #: includes/admin/tools.php:169
2080
+ msgid "Count voices in each topic"
2081
  msgstr ""
2082
 
2083
  #: includes/admin/tools.php:170
2084
+ msgid "Count spammed & trashed replies in each topic"
2085
  msgstr ""
2086
 
2087
  #: includes/admin/tools.php:171
2088
+ msgid "Count topics for each user"
2089
  msgstr ""
2090
 
2091
  #: includes/admin/tools.php:172
2092
+ msgid "Count replies for each user"
2093
  msgstr ""
2094
 
2095
  #: includes/admin/tools.php:173
2096
+ msgid "Remove trashed topics from user favorites"
2097
  msgstr ""
2098
 
2099
  #: includes/admin/tools.php:174
2100
+ msgid "Remove trashed topics from user subscriptions"
2101
+ msgstr ""
2102
+
2103
+ #: includes/admin/tools.php:175
2104
  msgid "Remap existing users to default forum roles"
2105
  msgstr ""
2106
 
2107
+ #: includes/admin/tools.php:195
2108
  msgid "Counting the number of replies in each topic&hellip; %s"
2109
  msgstr ""
2110
 
2111
+ #: includes/admin/tools.php:196 includes/admin/tools.php:239
2112
+ #: includes/admin/tools.php:281 includes/admin/tools.php:326
2113
+ #: includes/admin/tools.php:442 includes/admin/tools.php:476
2114
+ #: includes/admin/tools.php:508 includes/admin/tools.php:553
2115
+ #: includes/admin/tools.php:598 includes/admin/tools.php:660
2116
+ #: includes/admin/tools.php:728 includes/admin/tools.php:776
2117
+ #: includes/admin/tools.php:882 includes/admin/tools.php:940
2118
+ #: includes/admin/tools.php:989 includes/admin/tools.php:1043
2119
  msgid "Failed!"
2120
  msgstr ""
2121
 
2122
+ #: includes/admin/tools.php:222 includes/admin/tools.php:265
2123
+ #: includes/admin/tools.php:291 includes/admin/tools.php:457
2124
+ #: includes/admin/tools.php:491 includes/admin/tools.php:536
2125
+ #: includes/admin/tools.php:581 includes/admin/tools.php:643
2126
+ #: includes/admin/tools.php:704 includes/admin/tools.php:866
2127
+ #: includes/admin/tools.php:923 includes/admin/tools.php:973
2128
+ #: includes/admin/tools.php:1027 includes/admin/tools.php:1072
2129
  msgid "Complete!"
2130
  msgstr ""
2131
 
2132
+ #: includes/admin/tools.php:238
2133
  msgid "Counting the number of voices in each topic&hellip; %s"
2134
  msgstr ""
2135
 
2136
+ #: includes/admin/tools.php:280
2137
  msgid ""
2138
  "Counting the number of spammed and trashed replies in each topic&hellip; %s"
2139
  msgstr ""
2140
 
2141
+ #: includes/admin/tools.php:305
2142
  msgid "Repairing BuddyPress group-forum relationships&hellip; %s"
2143
  msgstr ""
2144
 
2145
+ #: includes/admin/tools.php:406
2146
  msgid "Group Forums"
2147
  msgstr ""
2148
 
2149
+ #: includes/admin/tools.php:422
2150
+ msgid ""
2151
+ "Complete! %s groups updated; %s forums updated; %s forum statuses synced."
2152
  msgstr ""
2153
 
2154
+ #: includes/admin/tools.php:441
2155
  msgid "Counting the number of topics in each forum&hellip; %s"
2156
  msgstr ""
2157
 
2158
+ #: includes/admin/tools.php:475
2159
  msgid "Counting the number of replies in each forum&hellip; %s"
2160
  msgstr ""
2161
 
2162
+ #: includes/admin/tools.php:507
2163
  msgid "Counting the number of topics each user has created&hellip; %s"
2164
  msgstr ""
2165
 
2166
+ #: includes/admin/tools.php:552
2167
  msgid "Counting the number of topics to which each user has replied&hellip; %s"
2168
  msgstr ""
2169
 
2170
+ #: includes/admin/tools.php:597
2171
  msgid "Removing trashed topics from user favorites&hellip; %s"
2172
  msgstr ""
2173
 
2174
+ #: includes/admin/tools.php:627 includes/admin/tools.php:688
2175
  msgid "Nothing to remove!"
2176
  msgstr ""
2177
 
2178
+ #: includes/admin/tools.php:659
2179
  msgid "Removing trashed topics from user subscriptions&hellip; %s"
2180
  msgstr ""
2181
 
2182
+ #: includes/admin/tools.php:721
2183
  msgid "Remapping forum role for each user on this site&hellip; %s"
2184
  msgstr ""
2185
 
2186
+ #: includes/admin/tools.php:759
2187
  msgid "Complete! %s users updated."
2188
  msgstr ""
2189
 
2190
+ #: includes/admin/tools.php:775
2191
  msgid "Recomputing latest post in every topic and forum&hellip; %s"
2192
  msgstr ""
2193
 
2194
+ #: includes/admin/tools.php:881
2195
+ msgid "Repairing the sticky topic to the parent forum relationships&hellip; %s"
2196
+ msgstr ""
2197
+
2198
+ #: includes/admin/tools.php:939
2199
  msgid "Recalculating forum visibility &hellip; %s"
2200
  msgstr ""
2201
 
2202
+ #: includes/admin/tools.php:988
2203
  msgid "Recalculating the forum for each post &hellip; %s"
2204
  msgstr ""
2205
 
2206
+ #: includes/admin/tools.php:1042
2207
  msgid "Recalculating the topic for each post &hellip; %s"
2208
  msgstr ""
2209
 
2210
+ #: includes/admin/tools.php:1095
2211
  msgid ""
2212
  "This will revert your forums back to a brand new installation. This process "
2213
  "cannot be undone. <strong>Backup your database before proceeding</strong>."
2214
  msgstr ""
2215
 
2216
+ #: includes/admin/tools.php:1101
2217
  msgid "The following data will be removed:"
2218
  msgstr ""
2219
 
2220
+ #: includes/admin/tools.php:1106
2221
  msgid "All Topic Tags"
2222
  msgstr ""
2223
 
2224
+ #: includes/admin/tools.php:1107
2225
  msgid "Related Meta Data"
2226
  msgstr ""
2227
 
2228
+ #: includes/admin/tools.php:1108
2229
  msgid "Forum Settings"
2230
  msgstr ""
2231
 
2232
+ #: includes/admin/tools.php:1109
2233
  msgid "Forum Activity"
2234
  msgstr ""
2235
 
2236
+ #: includes/admin/tools.php:1110
2237
  msgid "Forum User Roles"
2238
  msgstr ""
2239
 
2240
+ #: includes/admin/tools.php:1111
2241
  msgid "Importer Helper Data"
2242
  msgstr ""
2243
 
2244
+ #: includes/admin/tools.php:1115
2245
  msgid "Are you sure you want to do this?"
2246
  msgstr ""
2247
 
2248
+ #: includes/admin/tools.php:1118
2249
  msgid "Say it ain't so!"
2250
  msgstr ""
2251
 
2252
+ #: includes/admin/tools.php:1119
2253
  msgid "This process cannot be undone."
2254
  msgstr ""
2255
 
2256
+ #: includes/admin/tools.php:1127
2257
  msgid "Reset bbPress"
2258
  msgstr ""
2259
 
2260
+ #: includes/admin/tools.php:1152
2261
  msgid "Failed"
2262
  msgstr ""
2263
 
2264
+ #: includes/admin/tools.php:1153
2265
  msgid "Success!"
2266
  msgstr ""
2267
 
2268
+ #: includes/admin/tools.php:1160
2269
  msgid "Deleting Posts&hellip; %s"
2270
  msgstr ""
2271
 
2272
+ #: includes/admin/tools.php:1173
2273
  msgid "Deleting Post Meta&hellip; %s"
2274
  msgstr ""
2275
 
2276
+ #: includes/admin/tools.php:1182
2277
+ msgid "Deleting Topic Tags&hellip; %s"
2278
+ msgstr ""
2279
+
2280
+ #: includes/admin/tools.php:1189
2281
  msgid "Deleting User Meta&hellip; %s"
2282
  msgstr ""
2283
 
2284
+ #: includes/admin/tools.php:1196
2285
  msgid "Deleting Conversion Table&hellip; %s"
2286
  msgstr ""
2287
 
2288
+ #: includes/admin/tools.php:1208
2289
  msgid "Deleting Settings&hellip; %s"
2290
  msgstr ""
2291
 
2292
+ #: includes/admin/tools.php:1214
2293
  msgid "Deleting Roles and Capabilities&hellip; %s"
2294
  msgstr ""
2295
 
2545
  msgid "(No Forum)"
2546
  msgstr ""
2547
 
2548
+ #: includes/admin/topics.php:783 includes/topics/template-tags.php:1873
2549
  msgid "No Replies"
2550
  msgstr ""
2551
 
2571
  msgid "Unstick this topic"
2572
  msgstr ""
2573
 
2574
+ #: includes/admin/topics.php:851 includes/topics/template-tags.php:2562
2575
  msgid "Unstick"
2576
  msgstr ""
2577
 
2579
  msgid "Stick this topic to its forum"
2580
  msgstr ""
2581
 
2582
+ #: includes/admin/topics.php:854 includes/topics/template-tags.php:2561
2583
  msgid "Stick"
2584
  msgstr ""
2585
 
2587
  msgid "Stick this topic to front"
2588
  msgstr ""
2589
 
2590
+ #: includes/admin/topics.php:854 includes/topics/template-tags.php:2563
2591
  msgid "to front"
2592
  msgstr ""
2593
 
2634
  msgid "Topic draft updated. <a target=\"_blank\" href=\"%s\">Preview topic</a>"
2635
  msgstr ""
2636
 
2637
+ #: includes/admin/users.php:87 includes/admin/users.php:213
2638
  #: templates/default/bbpress/form-user-roles.php:9
2639
  msgid "Forum Role"
2640
  msgstr ""
2641
 
2642
  #: includes/admin/users.php:96 includes/admin/users.php:100
2643
+ #: includes/users/template-tags.php:1064
2644
+ msgid "&mdash; No role for these forums &mdash;"
2645
  msgstr ""
2646
 
2647
  #: includes/admin/users.php:138 includes/admin/users.php:140
2648
  msgid "Change forum role to&hellip;"
2649
  msgstr ""
2650
 
2651
+ #: includes/admin/users.php:144
2652
  msgid "Change"
2653
  msgstr ""
2654
 
2655
+ #: includes/admin/users.php:212
2656
  msgid "Site Role"
2657
  msgstr ""
2658
 
2721
  msgid ","
2722
  msgstr ""
2723
 
2724
+ #: includes/common/functions.php:510 includes/common/functions.php:542
2725
  msgid "Private: %s"
2726
  msgstr ""
2727
 
2728
+ #: includes/common/functions.php:511 includes/common/functions.php:543
2729
  msgid "Spammed: %s"
2730
  msgstr ""
2731
 
2732
+ #: includes/common/functions.php:512 includes/common/functions.php:544
2733
  msgid "Trashed: %s"
2734
  msgstr ""
2735
 
2736
+ #: includes/common/functions.php:622
2737
  msgid "<strong>ERROR</strong>: Invalid author name submitted!"
2738
  msgstr ""
2739
 
2740
+ #: includes/common/functions.php:626
2741
  msgid "<strong>ERROR</strong>: Invalid email address submitted!"
2742
  msgstr ""
2743
 
2744
+ #: includes/common/functions.php:1063
2745
  msgid ""
2746
  "%1$s wrote:\n"
2747
  "\n"
2748
  "%2$s\n"
2749
+ "\n"
2750
  "Post Link: %3$s\n"
2751
  "\n"
2752
  "-----------\n"
2756
  "Login and visit the topic to unsubscribe from these emails."
2757
  msgstr ""
2758
 
2759
+ #: includes/common/functions.php:1701
2760
  msgid ""
2761
  "Conditional query tags do not work before the query is run. Before then, "
2762
  "they always return false."
2763
  msgstr ""
2764
 
2765
+ #: includes/common/template-tags.php:1417
2766
  msgid "No topics available"
2767
  msgstr ""
2768
 
2769
+ #: includes/common/template-tags.php:1422
2770
  msgid "No forums available"
2771
  msgstr ""
2772
 
2773
+ #: includes/common/template-tags.php:1427
2774
  msgid "None available"
2775
  msgstr ""
2776
 
2777
+ #: includes/common/template-tags.php:1555 includes/replies/functions.php:1146
2778
+ #: includes/topics/functions.php:1222 includes/topics/functions.php:1577
 
2779
  #: templates/default/bbpress/form-reply.php:29
2780
  msgid "Reply To: %s"
2781
  msgstr ""
2782
 
2783
+ #: includes/common/template-tags.php:2074
2784
  msgid "Home"
2785
  msgstr ""
2786
 
2787
+ #: includes/common/template-tags.php:2140
2788
  msgid "(Edit)"
2789
  msgstr ""
2790
 
2791
+ #: includes/common/template-tags.php:2144
2792
+ #: includes/common/template-tags.php:2254
2793
+ #: includes/common/template-tags.php:2491 includes/core/theme-compat.php:631
2794
  #: templates/default/extras/taxonomy-topic-tag-edit.php:17
2795
  #: templates/default/extras/taxonomy-topic-tag.php:17
2796
  msgid "Topic Tag: %s"
2797
  msgstr ""
2798
 
2799
+ #: includes/common/template-tags.php:2165
2800
+ msgid "&lsaquo;"
2801
+ msgstr ""
2802
+
2803
+ #: includes/common/template-tags.php:2165
2804
  msgid "&rsaquo;"
2805
  msgstr ""
2806
 
2807
+ #: includes/common/template-tags.php:2258
2808
+ #: includes/search/template-tags.php:213
2809
+ #: templates/default/bbpress/form-search.php:16
2810
+ msgid "Search"
2811
+ msgstr ""
2812
+
2813
+ #: includes/common/template-tags.php:2425
2814
  msgid "Log Out"
2815
  msgstr ""
2816
 
2817
+ #: includes/common/template-tags.php:2478
2818
  msgid "Forum: %s"
2819
  msgstr ""
2820
 
2821
+ #: includes/common/template-tags.php:2482
2822
  msgid "Topic: %s"
2823
  msgstr ""
2824
 
2825
+ #: includes/common/template-tags.php:2500
2826
  msgid "Your Profile"
2827
  msgstr ""
2828
 
2829
+ #: includes/common/template-tags.php:2505
2830
  #: templates/default/bbpress/user-details.php:29
2831
  msgid "%s's Profile"
2832
  msgstr ""
2833
 
2834
+ #: includes/common/template-tags.php:2513
2835
  msgid "Edit Your Profile"
2836
  msgstr ""
2837
 
2838
+ #: includes/common/template-tags.php:2518
2839
  msgid "Edit %s's Profile"
2840
  msgstr ""
2841
 
2842
+ #: includes/common/template-tags.php:2525
2843
  msgid "View: %s"
2844
  msgstr ""
2845
 
2852
  msgid "(bbPress) Login Widget"
2853
  msgstr ""
2854
 
2855
+ #: includes/common/widgets.php:85 includes/common/widgets.php:106
2856
  #: templates/default/bbpress/form-user-login.php:14
2857
  #: templates/default/bbpress/form-user-login.php:35
2858
  msgid "Log In"
2859
  msgstr ""
2860
 
2861
+ #: includes/common/widgets.php:88
2862
+ #: templates/default/bbpress/form-user-edit.php:98
2863
  #: templates/default/bbpress/form-user-login.php:17
2864
  #: templates/default/bbpress/form-user-register.php:23
2865
  msgid "Username"
2866
  msgstr ""
2867
 
2868
+ #: includes/common/widgets.php:93
2869
  #: templates/default/bbpress/form-user-login.php:22
2870
  msgid "Password"
2871
  msgstr ""
2872
 
2873
+ #: includes/common/widgets.php:99
2874
  msgid "Remember Me"
2875
  msgstr ""
2876
 
2877
+ #: includes/common/widgets.php:118
2878
  #: templates/default/bbpress/form-user-register.php:36
2879
  msgid "Register"
2880
  msgstr ""
2881
 
2882
+ #: includes/common/widgets.php:124
2883
  #: templates/default/bbpress/form-user-lost-pass.php:14
2884
  msgid "Lost Password"
2885
  msgstr ""
2886
 
2887
+ #: includes/common/widgets.php:185 includes/common/widgets.php:313
2888
+ #: includes/common/widgets.php:415 includes/common/widgets.php:560
2889
+ #: includes/common/widgets.php:780 includes/common/widgets.php:893
2890
+ #: includes/common/widgets.php:1075
2891
  msgid "Title:"
2892
  msgstr ""
2893
 
2894
+ #: includes/common/widgets.php:190
2895
  msgid "Register URI:"
2896
  msgstr ""
2897
 
2898
+ #: includes/common/widgets.php:195
2899
  msgid "Lost Password URI:"
2900
  msgstr ""
2901
 
2902
+ #: includes/common/widgets.php:227
2903
  msgid "A list of registered optional topic views."
2904
  msgstr ""
2905
 
2906
+ #: includes/common/widgets.php:230
2907
  msgid "(bbPress) Topic Views List"
2908
  msgstr ""
2909
 
2910
+ #: includes/common/widgets.php:346
2911
+ msgid "The bbPress forum search form."
2912
+ msgstr ""
2913
+
2914
+ #: includes/common/widgets.php:349
2915
+ msgid "(bbPress) Forum Search Form"
2916
+ msgstr ""
2917
+
2918
+ #: includes/common/widgets.php:448
2919
  msgid "A list of forums with an option to set the parent."
2920
  msgstr ""
2921
 
2922
+ #: includes/common/widgets.php:451
2923
  msgid "(bbPress) Forums List"
2924
  msgstr ""
2925
 
2926
+ #: includes/common/widgets.php:566
2927
  msgid "Parent Forum ID:"
2928
  msgstr ""
2929
 
2930
+ #: includes/common/widgets.php:572
2931
  msgid "\"0\" to show only root - \"any\" to show all"
2932
  msgstr ""
2933
 
2934
+ #: includes/common/widgets.php:603
2935
  msgid "A list of recent topics, sorted by popularity or freshness."
2936
  msgstr ""
2937
 
2938
+ #: includes/common/widgets.php:606
2939
  msgid "(bbPress) Recent Topics"
2940
  msgstr ""
2941
 
2942
+ #: includes/common/widgets.php:721
2943
  msgctxt "widgets"
2944
  msgid "by %1$s"
2945
  msgstr ""
2946
 
2947
+ #: includes/common/widgets.php:781
2948
  msgid "Maximum topics to show:"
2949
  msgstr ""
2950
 
2951
+ #: includes/common/widgets.php:782 includes/common/widgets.php:1077
2952
  msgid "Show post date:"
2953
  msgstr ""
2954
 
2955
+ #: includes/common/widgets.php:783
2956
  msgid "Show topic author:"
2957
  msgstr ""
2958
 
2959
+ #: includes/common/widgets.php:786
2960
  msgid "Order By:"
2961
  msgstr ""
2962
 
2963
+ #: includes/common/widgets.php:788
2964
  msgid "Newest Topics"
2965
  msgstr ""
2966
 
2967
+ #: includes/common/widgets.php:789
2968
+ #: templates/default/extras/page-forum-statistics.php:34
2969
  msgid "Popular Topics"
2970
  msgstr ""
2971
 
2972
+ #: includes/common/widgets.php:790
2973
  msgid "Topics With Recent Replies"
2974
  msgstr ""
2975
 
2976
+ #: includes/common/widgets.php:822
2977
+ msgid "Some statistics from your forum."
2978
+ msgstr ""
2979
+
2980
+ #: includes/common/widgets.php:825
2981
+ msgid "(bbPress) Statistics"
2982
+ msgstr ""
2983
+
2984
+ #: includes/common/widgets.php:927
2985
  msgid "A list of the most recent replies."
2986
  msgstr ""
2987
 
2988
+ #: includes/common/widgets.php:930
2989
  msgid "(bbPress) Recent Replies"
2990
  msgstr ""
2991
 
2992
  #. translators: 1: reply author, 2: reply link, 3: reply timestamp
2993
+ #: includes/common/widgets.php:1004
2994
  msgctxt "widgets"
2995
  msgid "%1$s on %2$s %3$s"
2996
  msgstr ""
2997
 
2998
  #. translators: 1: reply link, 2: reply timestamp
2999
+ #: includes/common/widgets.php:1010
3000
  msgctxt "widgets"
3001
  msgid "%1$s %2$s"
3002
  msgstr ""
3003
 
3004
  #. translators: 1: reply author, 2: reply link
3005
+ #: includes/common/widgets.php:1016
3006
  msgctxt "widgets"
3007
  msgid "%1$s on %2$s"
3008
  msgstr ""
3009
 
3010
  #. translators: 1: reply link
3011
+ #: includes/common/widgets.php:1022
3012
  msgctxt "widgets"
3013
  msgid "%1$s"
3014
  msgstr ""
3015
 
3016
+ #: includes/common/widgets.php:1076
3017
  msgid "Maximum replies to show:"
3018
  msgstr ""
3019
 
3020
+ #: includes/common/widgets.php:1078
3021
  msgid "Show reply author:"
3022
  msgstr ""
3023
 
3024
+ #: includes/core/capabilities.php:409
3025
  msgid "Keymaster"
3026
  msgstr ""
3027
 
3028
+ #: includes/core/capabilities.php:415 includes/users/template-tags.php:499
3029
  msgid "Moderator"
3030
  msgstr ""
3031
 
3032
+ #: includes/core/capabilities.php:421 includes/users/template-tags.php:503
3033
  msgid "Participant"
3034
  msgstr ""
3035
 
3036
+ #: includes/core/capabilities.php:427
3037
  msgid "Spectator"
3038
  msgstr ""
3039
 
3040
+ #: includes/core/capabilities.php:433
 
 
 
 
3041
  msgid "Blocked"
3042
  msgstr ""
3043
 
3044
+ #: includes/core/capabilities.php:537 includes/core/capabilities.php:547
3045
  msgid "Editable forum roles no longer exist."
3046
  msgstr ""
3047
 
3048
+ #: includes/core/update.php:172
3049
  msgid "General"
3050
  msgstr ""
3051
 
3052
+ #: includes/core/update.php:173
3053
  msgid "General chit-chat"
3054
  msgstr ""
3055
 
3056
+ #: includes/core/update.php:174
3057
  msgid "Hello World!"
3058
  msgstr ""
3059
 
3060
+ #: includes/core/update.php:175
3061
  msgid "I am the first topic in your new forums."
3062
  msgstr ""
3063
 
3064
+ #: includes/core/update.php:176
3065
  msgid "Re: Hello World!"
3066
  msgstr ""
3067
 
3068
+ #: includes/core/update.php:177
3069
  msgid "Oh, and this is what a reply looks like."
3070
  msgstr ""
3071
 
3099
  "retry again later."
3100
  msgstr ""
3101
 
3102
+ #: includes/extend/buddypress/activity.php:240
3103
+ msgid "New forum topic"
3104
  msgstr ""
3105
 
3106
+ #: includes/extend/buddypress/activity.php:241
3107
+ msgid "New forum reply"
3108
  msgstr ""
3109
 
3110
+ #: includes/extend/buddypress/activity.php:466
3111
  msgid "%1$s started the topic %2$s in the forum %3$s"
3112
  msgstr ""
3113
 
3114
+ #: includes/extend/buddypress/activity.php:616
3115
  msgid "%1$s replied to the topic %2$s in the forum %3$s"
3116
  msgstr ""
3117
 
3118
+ #: includes/extend/buddypress/group.php:245
3119
  msgid "Enable Group Forum"
3120
  msgstr ""
3121
 
3122
+ #: includes/extend/buddypress/group.php:247
3123
+ #: includes/extend/buddypress/group.php:356
3124
  msgid ""
3125
  "Create a discussion forum to allow members of this group to communicate in a "
3126
  "structured, bulletin-board style fashion."
3127
  msgstr ""
3128
 
3129
+ #: includes/extend/buddypress/group.php:250
3130
+ #: includes/extend/buddypress/group.php:359
3131
  msgid "Yes. I want this group to have a forum."
3132
  msgstr ""
3133
 
3134
+ #: includes/extend/buddypress/group.php:253
3135
  msgid "Saying no will not delete existing forum content."
3136
  msgstr ""
3137
 
3138
+ #: includes/extend/buddypress/group.php:255
3139
  msgid "Save Settings"
3140
  msgstr ""
3141
 
3142
+ #: includes/extend/buddypress/group.php:354
3143
  msgid "Group Forum"
3144
  msgstr ""
3145
 
3146
+ #: includes/extend/buddypress/group.php:666
3147
+ #: includes/extend/buddypress/group.php:675
3148
  msgid "This group does not currently have any forums."
3149
  msgstr ""
3150
 
3151
+ #: includes/extend/buddypress/loader.php:99
3152
  msgid "Search Forums..."
3153
  msgstr ""
3154
 
3172
  msgid "Subscribed Topics"
3173
  msgstr ""
3174
 
3175
+ #: includes/forums/functions.php:118 includes/forums/functions.php:394
3176
+ #: includes/replies/functions.php:114 includes/replies/functions.php:419
3177
+ #: includes/replies/functions.php:1093 includes/topics/functions.php:120
3178
+ #: includes/topics/functions.php:470 includes/topics/functions.php:1081
3179
+ #: includes/topics/functions.php:1380 includes/topics/functions.php:1727
3180
+ #: includes/topics/functions.php:1766 includes/topics/functions.php:1823
3181
+ #: includes/users/functions.php:463 includes/users/functions.php:781
3182
+ #: includes/users/functions.php:907 includes/users/functions.php:913
3183
  msgid "<strong>ERROR</strong>: Are you sure you wanted to do that?"
3184
  msgstr ""
3185
 
3186
+ #: includes/forums/functions.php:131
3187
  msgid ""
3188
  "<strong>ERROR</strong>: You do not have permission to create new forums."
3189
  msgstr ""
3190
 
3191
+ #: includes/forums/functions.php:154 includes/forums/functions.php:453
3192
  msgid "<strong>ERROR</strong>: Your forum needs a title."
3193
  msgstr ""
3194
 
3195
+ #: includes/forums/functions.php:166 includes/forums/functions.php:465
3196
  msgid "<strong>ERROR</strong>: Your forum description cannot be empty."
3197
  msgstr ""
3198
 
3199
+ #: includes/forums/functions.php:179
3200
  msgid "<strong>ERROR</strong>: Your forum must have a parent."
3201
  msgstr ""
3202
 
3203
+ #: includes/forums/functions.php:186
3204
  msgid ""
3205
  "<strong>ERROR</strong>: This forum is a category. No forums can be created "
3206
  "in this forum."
3207
  msgstr ""
3208
 
3209
+ #: includes/forums/functions.php:191 includes/forums/functions.php:429
3210
  msgid "<strong>ERROR</strong>: This forum has been closed to new forums."
3211
  msgstr ""
3212
 
3213
+ #: includes/forums/functions.php:196 includes/forums/functions.php:434
3214
  msgid ""
3215
  "<strong>ERROR</strong>: This forum is private and you do not have the "
3216
  "capability to read or create new forums in it."
3217
  msgstr ""
3218
 
3219
+ #: includes/forums/functions.php:201 includes/forums/functions.php:439
3220
  msgid ""
3221
  "<strong>ERROR</strong>: This forum is hidden and you do not have the "
3222
  "capability to read or create new forums in it."
3223
  msgstr ""
3224
 
3225
+ #: includes/forums/functions.php:208 includes/replies/functions.php:203
3226
+ #: includes/topics/functions.php:219
3227
  msgid "<strong>ERROR</strong>: Slow down; you move too fast."
3228
  msgstr ""
3229
 
3230
+ #: includes/forums/functions.php:213
3231
  msgid "<strong>ERROR</strong>: This forum already exists."
3232
  msgstr ""
3233
 
3234
+ #: includes/forums/functions.php:218
3235
  msgid "<strong>ERROR</strong>: Your forum cannot be created at this time."
3236
  msgstr ""
3237
 
3238
+ #: includes/forums/functions.php:383
3239
  msgid "<strong>ERROR</strong>: Forum ID not found."
3240
  msgstr ""
3241
 
3242
+ #: includes/forums/functions.php:399
3243
  msgid "<strong>ERROR</strong>: The forum you want to edit was not found."
3244
  msgstr ""
3245
 
3246
+ #: includes/forums/functions.php:404
3247
  msgid "<strong>ERROR</strong>: You do not have permission to edit that forum."
3248
  msgstr ""
3249
 
3250
+ #: includes/forums/functions.php:470
3251
  msgid "<strong>ERROR</strong>: Your forum cannot be edited at this time."
3252
  msgstr ""
3253
 
3254
+ #: includes/forums/template-tags.php:1128
3255
+ #: includes/forums/template-tags.php:1865
3256
  msgid "%s topic"
3257
  msgid_plural "%s topics"
3258
  msgstr[0] ""
3259
  msgstr[1] ""
3260
 
3261
+ #: includes/forums/template-tags.php:1144
3262
+ #: includes/topics/template-tags.php:1929
3263
  msgid " (+ %d hidden)"
3264
  msgstr ""
3265
 
3266
+ #: includes/forums/template-tags.php:1854
3267
+ #: includes/topics/template-tags.php:1913
3268
  msgid "%s reply"
3269
  msgid_plural "%s replies"
3270
  msgstr[0] ""
3271
  msgstr[1] ""
3272
 
3273
+ #: includes/forums/template-tags.php:1874
3274
  msgid ""
3275
  "This category contains %1$s and %2$s, and was last updated by %3$s %4$s."
3276
  msgstr ""
3277
 
3278
+ #: includes/forums/template-tags.php:1876
3279
  msgid "This forum contains %1$s and %2$s, and was last updated by %3$s %4$s."
3280
  msgstr ""
3281
 
3282
+ #: includes/forums/template-tags.php:1882
3283
  msgid "This category contains %1$s, and was last updated by %2$s %3$s."
3284
  msgstr ""
3285
 
3286
+ #: includes/forums/template-tags.php:1884
3287
  msgid "This forum contains %1$s, and was last updated by %2$s %3$s."
3288
  msgstr ""
3289
 
3290
+ #: includes/forums/template-tags.php:1894
3291
  msgid "This category contains %1$s and %2$s."
3292
  msgstr ""
3293
 
3294
+ #: includes/forums/template-tags.php:1896
3295
  msgid "This forum contains %1$s and %2$s."
3296
  msgstr ""
3297
 
3298
+ #: includes/forums/template-tags.php:1904
3299
  msgid "This category contains %1$s."
3300
  msgstr ""
3301
 
3302
+ #: includes/forums/template-tags.php:1906
3303
  msgid "This forum contains %1$s."
3304
  msgstr ""
3305
 
3306
+ #: includes/forums/template-tags.php:1910
3307
  msgid "This forum is empty."
3308
  msgstr ""
3309
 
3310
+ #: includes/forums/template-tags.php:2146
3311
  msgid "Category"
3312
  msgstr ""
3313
 
3314
+ #: includes/forums/template-tags.php:2183
3315
  msgctxt "Forum Status"
3316
  msgid "Open"
3317
  msgstr ""
3318
 
3319
+ #: includes/forums/template-tags.php:2184
3320
  msgctxt "Forum Status"
3321
  msgid "Closed"
3322
  msgstr ""
3323
 
3324
+ #: includes/forums/template-tags.php:2221
3325
  msgid "Public"
3326
  msgstr ""
3327
 
3328
+ #: includes/forums/template-tags.php:2222
3329
  #: templates/default/bbpress/feedback-no-access.php:13
3330
  msgid "Private"
3331
  msgstr ""
3332
 
3333
+ #: includes/forums/template-tags.php:2223
3334
  msgid "Hidden"
3335
  msgstr ""
3336
 
3337
+ #: includes/replies/functions.php:140
3338
  msgid "<strong>ERROR</strong>: You do not have permission to reply."
3339
  msgstr ""
3340
 
3341
+ #: includes/replies/functions.php:154
3342
  msgid "<strong>ERROR</strong>: Topic ID is missing."
3343
  msgstr ""
3344
 
3345
+ #: includes/replies/functions.php:165 includes/topics/functions.php:190
3346
+ #: includes/topics/functions.php:484
3347
  msgid "<strong>ERROR</strong>: Forum ID is missing."
3348
  msgstr ""
3349
 
3350
+ #: includes/replies/functions.php:186
3351
  msgid "<strong>ERROR</strong>: Your reply needs a title."
3352
  msgstr ""
3353
 
3354
+ #: includes/replies/functions.php:198 includes/replies/functions.php:503
3355
  msgid "<strong>ERROR</strong>: Your reply cannot be empty."
3356
  msgstr ""
3357
 
3358
+ #: includes/replies/functions.php:208
3359
  msgid ""
3360
  "<strong>ERROR</strong>: Duplicate reply detected; it looks as though "
3361
  "you&#8217;ve already said that!"
3362
  msgstr ""
3363
 
3364
+ #: includes/replies/functions.php:213
3365
  msgid "<strong>ERROR</strong>: Your reply cannot be created at this time."
3366
  msgstr ""
3367
 
3368
+ #: includes/replies/functions.php:282 includes/replies/functions.php:587
3369
  msgid ""
3370
  "<strong>ERROR</strong>: There was a problem adding the tags to the topic."
3371
  msgstr ""
3372
 
3373
+ #: includes/replies/functions.php:408
3374
  msgid "<strong>ERROR</strong>: Reply ID not found."
3375
  msgstr ""
3376
 
3377
+ #: includes/replies/functions.php:425
3378
  msgid "<strong>ERROR</strong>: The reply you want to edit was not found."
3379
  msgstr ""
3380
 
3381
+ #: includes/replies/functions.php:436
3382
  msgid "<strong>ERROR</strong>: You do not have permission to edit that reply."
3383
  msgstr ""
3384
 
3385
+ #: includes/replies/functions.php:470
3386
  msgid ""
3387
  "<strong>ERROR</strong>: This forum is a category. No topics or replies can "
3388
  "be created in it."
3389
  msgstr ""
3390
 
3391
+ #: includes/replies/functions.php:474
3392
  msgid ""
3393
  "<strong>ERROR</strong>: This forum has been closed to new topics and replies."
3394
  msgstr ""
3395
 
3396
+ #: includes/replies/functions.php:478
3397
  msgid ""
3398
  "<strong>ERROR</strong>: This forum is private and you do not have the "
3399
  "capability to read or create new replies in it."
3400
  msgstr ""
3401
 
3402
+ #: includes/replies/functions.php:482
3403
  msgid ""
3404
  "<strong>ERROR</strong>: This forum is hidden and you do not have the "
3405
  "capability to read or create new replies in it."
3406
  msgstr ""
3407
 
3408
+ #: includes/replies/functions.php:508
3409
  msgid "<strong>ERROR</strong>: Your reply cannot be edited at this time."
3410
  msgstr ""
3411
 
3412
+ #: includes/replies/functions.php:1070
3413
+ msgid "<strong>ERROR</strong>: Reply ID to move not found!"
3414
+ msgstr ""
3415
+
3416
+ #: includes/replies/functions.php:1079
3417
+ msgid "<strong>ERROR</strong>: The reply you want to move was not found."
3418
  msgstr ""
3419
 
3420
  #: includes/replies/functions.php:1088
3421
+ msgid "<strong>ERROR</strong>: The topic you want to move from was not found."
3422
+ msgstr ""
3423
+
3424
+ #: includes/replies/functions.php:1099 includes/topics/functions.php:1092
3425
+ #: includes/topics/functions.php:1386
3426
+ msgid ""
3427
+ "<strong>ERROR</strong>: You do not have the permissions to edit the source "
3428
+ "topic."
3429
+ msgstr ""
3430
+
3431
+ #: includes/replies/functions.php:1109
3432
+ msgid "<strong>ERROR</strong>: You need to choose a valid move option."
3433
+ msgstr ""
3434
+
3435
+ #: includes/replies/functions.php:1122 includes/topics/functions.php:1407
3436
+ msgid "<strong>ERROR</strong>: Destination topic ID not found!"
3437
+ msgstr ""
3438
+
3439
+ #: includes/replies/functions.php:1132
3440
+ msgid "<strong>ERROR</strong>: The topic you want to move to was not found!"
3441
+ msgstr ""
3442
+
3443
+ #: includes/replies/functions.php:1137 includes/topics/functions.php:1420
3444
+ msgid ""
3445
+ "<strong>ERROR</strong>: You do not have the permissions to edit the "
3446
+ "destination topic!"
3447
+ msgstr ""
3448
+
3449
+ #: includes/replies/functions.php:1197 includes/topics/functions.php:1459
3450
+ msgid ""
3451
+ "<strong>ERROR</strong>: There was a problem converting the reply into the "
3452
+ "topic. Please try again."
3453
+ msgstr ""
3454
+
3455
+ #: includes/replies/functions.php:1202 includes/topics/functions.php:1464
3456
+ msgid ""
3457
+ "<strong>ERROR</strong>: You do not have the permissions to create new "
3458
+ "topics. The reply could not be converted into a topic."
3459
+ msgstr ""
3460
+
3461
+ #: includes/replies/functions.php:1371
3462
+ msgid "<strong>ERROR:</strong> You do not have the permission to do that!"
3463
+ msgstr ""
3464
+
3465
+ #: includes/replies/functions.php:1384
3466
  msgid ""
3467
  "<strong>ERROR</strong>: There was a problem unmarking the reply as spam!"
3468
  msgstr ""
3469
 
3470
+ #: includes/replies/functions.php:1384
3471
  msgid "<strong>ERROR</strong>: There was a problem marking the reply as spam!"
3472
  msgstr ""
3473
 
3474
+ #: includes/replies/functions.php:1403
3475
  msgid "<strong>ERROR</strong>: There was a problem trashing the reply!"
3476
  msgstr ""
3477
 
3478
+ #: includes/replies/functions.php:1411
3479
  msgid "<strong>ERROR</strong>: There was a problem untrashing the reply!"
3480
  msgstr ""
3481
 
3482
+ #: includes/replies/functions.php:1419
3483
  msgid "<strong>ERROR</strong>: There was a problem deleting the reply!"
3484
  msgstr ""
3485
 
3486
+ #: includes/replies/functions.php:1808
3487
  msgid "All Posts"
3488
  msgstr ""
3489
 
3490
+ #: includes/replies/functions.php:1850 includes/topics/functions.php:3327
3491
  msgid "Replies: %s"
3492
  msgstr ""
3493
 
3494
+ #: includes/replies/template-tags.php:567
3495
+ #: includes/topics/template-tags.php:723
3496
  msgctxt "date at time"
3497
  msgid "%1$s at %2$s"
3498
  msgstr ""
3499
 
3500
+ #: includes/replies/template-tags.php:665
3501
  msgid "This reply was modified %1$s by %2$s. Reason: %3$s"
3502
  msgstr ""
3503
 
3504
+ #: includes/replies/template-tags.php:667
3505
  msgid "This reply was modified %1$s by %2$s."
3506
  msgstr ""
3507
 
3508
+ #: includes/replies/template-tags.php:953
3509
+ #: includes/topics/template-tags.php:1271 includes/users/template-tags.php:165
3510
  msgid "Anonymous"
3511
  msgstr ""
3512
 
3513
+ #: includes/replies/template-tags.php:1062
3514
+ #: includes/topics/template-tags.php:1380
3515
+ #: includes/users/template-tags.php:1425
3516
  msgid "View %s's profile"
3517
  msgstr ""
3518
 
3519
+ #: includes/replies/template-tags.php:1062
3520
+ #: includes/topics/template-tags.php:1380
3521
+ #: includes/users/template-tags.php:1425
3522
  msgid "Visit %s's website"
3523
  msgstr ""
3524
 
3525
+ #: includes/replies/template-tags.php:1696
3526
+ #: includes/topics/template-tags.php:2433
3527
  #: templates/default/bbpress/form-topic-tag.php:88
3528
  #: templates/default/bbpress/form-topic-tag.php:101
3529
  msgid "Delete"
3530
  msgstr ""
3531
 
3532
+ #: includes/replies/template-tags.php:1713
3533
+ #: includes/topics/template-tags.php:2450
3534
  msgid "Are you sure you want to delete that permanently?"
3535
  msgstr ""
3536
 
3537
+ #: includes/replies/template-tags.php:1766
3538
+ #: includes/topics/template-tags.php:2689
3539
  msgid "Unspam"
3540
  msgstr ""
3541
 
3542
+ #: includes/replies/template-tags.php:1829
3543
+ msgid "Move"
3544
+ msgstr ""
3545
+
3546
+ #: includes/replies/template-tags.php:1830
3547
+ msgid "Move this reply"
3548
+ msgstr ""
3549
+
3550
+ #: includes/replies/template-tags.php:1896
3551
  msgid "Split"
3552
  msgstr ""
3553
 
3554
+ #: includes/replies/template-tags.php:1897
3555
  msgid "Split the topic from this reply"
3556
  msgstr ""
3557
 
3558
+ #: includes/replies/template-tags.php:2002
3559
  msgid "Viewing %1$s reply"
3560
  msgid_plural "Viewing %1$s replies"
3561
  msgstr[0] ""
3562
  msgstr[1] ""
3563
 
3564
+ #: includes/replies/template-tags.php:2006
3565
  msgid "Viewing %2$s replies (of %4$s total)"
3566
  msgid_plural "Viewing %1$s replies - %2$s through %3$s (of %4$s total)"
3567
  msgstr[0] ""
3568
  msgstr[1] ""
3569
 
3570
+ #: includes/replies/template-tags.php:2014
3571
  msgid "Viewing %1$s post"
3572
  msgid_plural "Viewing %1$s posts"
3573
  msgstr[0] ""
3574
  msgstr[1] ""
3575
 
3576
+ #: includes/replies/template-tags.php:2018
3577
  msgid "Viewing %2$s post (of %4$s total)"
3578
  msgid_plural "Viewing %1$s posts - %2$s through %3$s (of %4$s total)"
3579
  msgstr[0] ""
3580
  msgstr[1] ""
3581
 
3582
+ #: includes/search/template-tags.php:217
3583
+ msgid "Search Results for '%s'"
3584
+ msgstr ""
3585
+
3586
+ #: includes/search/template-tags.php:332
3587
+ msgid "Viewing %1$s result"
3588
+ msgid_plural "Viewing %1$s results"
3589
+ msgstr[0] ""
3590
+ msgstr[1] ""
3591
+
3592
+ #: includes/search/template-tags.php:336
3593
+ msgid "Viewing %2$s results (of %4$s total)"
3594
+ msgid_plural "Viewing %1$s results - %2$s through %3$s (of %4$s total)"
3595
+ msgstr[0] ""
3596
+ msgstr[1] ""
3597
+
3598
+ #: includes/topics/functions.php:148
3599
  msgid ""
3600
  "<strong>ERROR</strong>: You do not have permission to create new topics."
3601
  msgstr ""
3602
 
3603
+ #: includes/topics/functions.php:172 includes/topics/functions.php:524
3604
  msgid "<strong>ERROR</strong>: Your topic needs a title."
3605
  msgstr ""
3606
 
3607
+ #: includes/topics/functions.php:184 includes/topics/functions.php:536
3608
  msgid "<strong>ERROR</strong>: Your topic cannot be empty."
3609
  msgstr ""
3610
 
3611
+ #: includes/topics/functions.php:201
3612
  msgid ""
3613
  "<strong>ERROR</strong>: This forum is a category. No topics can be created "
3614
  "in this forum."
3615
  msgstr ""
3616
 
3617
+ #: includes/topics/functions.php:205 includes/topics/functions.php:503
3618
  msgid "<strong>ERROR</strong>: This forum has been closed to new topics."
3619
  msgstr ""
3620
 
3621
+ #: includes/topics/functions.php:209 includes/topics/functions.php:507
3622
  msgid ""
3623
  "<strong>ERROR</strong>: This forum is private and you do not have the "
3624
  "capability to read or create new topics in it."
3625
  msgstr ""
3626
 
3627
+ #: includes/topics/functions.php:213 includes/topics/functions.php:511
3628
  msgid ""
3629
  "<strong>ERROR</strong>: This forum is hidden and you do not have the "
3630
  "capability to read or create new topics in it."
3631
  msgstr ""
3632
 
3633
+ #: includes/topics/functions.php:224
3634
  msgid ""
3635
  "<strong>ERROR</strong>: Duplicate topic detected; it looks as though "
3636
  "you&#8217;ve already said that!"
3637
  msgstr ""
3638
 
3639
+ #: includes/topics/functions.php:229
3640
  msgid "<strong>ERROR</strong>: Your topic cannot be created at this time."
3641
  msgstr ""
3642
 
3643
+ #: includes/topics/functions.php:432 includes/topics/functions.php:1075
3644
  msgid "<strong>ERROR</strong>: Topic ID not found."
3645
  msgstr ""
3646
 
3647
+ #: includes/topics/functions.php:443
3648
  msgid "<strong>ERROR</strong>: The topic you want to edit was not found."
3649
  msgstr ""
3650
 
3651
+ #: includes/topics/functions.php:454
3652
  msgid "<strong>ERROR</strong>: You do not have permission to edit that topic."
3653
  msgstr ""
3654
 
3655
+ #: includes/topics/functions.php:499
3656
  msgid ""
3657
  "<strong>ERROR</strong>: This forum is a category. No topics can be created "
3658
  "in it."
3659
  msgstr ""
3660
 
3661
+ #: includes/topics/functions.php:541
3662
  msgid "<strong>ERROR</strong>: Your topic cannot be edited at this time."
3663
  msgstr ""
3664
 
3665
+ #: includes/topics/functions.php:1086
3666
  msgid "<strong>ERROR</strong>: The topic you want to merge was not found."
3667
  msgstr ""
3668
 
3669
+ #: includes/topics/functions.php:1100
 
 
 
 
 
 
3670
  msgid "<strong>ERROR</strong>: Destination topic ID not found."
3671
  msgstr ""
3672
 
3673
+ #: includes/topics/functions.php:1106
3674
  msgid "<strong>ERROR</strong>: The topic you want to merge to was not found."
3675
  msgstr ""
3676
 
3677
+ #: includes/topics/functions.php:1110
3678
  msgid ""
3679
  "<strong>ERROR</strong>: You do not have the permissions to edit the "
3680
  "destination topic."
3681
  msgstr ""
3682
 
3683
+ #: includes/topics/functions.php:1359
3684
  msgid "<strong>ERROR</strong>: Reply ID to split the topic from not found!"
3685
  msgstr ""
3686
 
3687
+ #: includes/topics/functions.php:1367
3688
  msgid "<strong>ERROR</strong>: The reply you want to split from was not found."
3689
  msgstr ""
3690
 
3691
+ #: includes/topics/functions.php:1376
3692
  msgid "<strong>ERROR</strong>: The topic you want to split was not found."
3693
  msgstr ""
3694
 
3695
+ #: includes/topics/functions.php:1394
3696
  msgid "<strong>ERROR</strong>: You need to choose a valid split option."
3697
  msgstr ""
3698
 
3699
+ #: includes/topics/functions.php:1416
 
 
 
 
3700
  msgid "<strong>ERROR</strong>: The topic you want to split to was not found!"
3701
  msgstr ""
3702
 
3703
+ #: includes/topics/functions.php:1715
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3704
  msgid ""
3705
  "<strong>ERROR</strong>: The following problem(s) have been found while "
3706
  "getting the tag: %s"
3707
  msgstr ""
3708
 
3709
+ #: includes/topics/functions.php:1733 includes/topics/functions.php:1772
3710
  msgid ""
3711
  "<strong>ERROR</strong>: You do not have the permissions to edit the topic "
3712
  "tags."
3713
  msgstr ""
3714
 
3715
+ #: includes/topics/functions.php:1739 includes/topics/functions.php:1778
3716
  msgid "<strong>ERROR</strong>: You need to enter a tag name."
3717
  msgstr ""
3718
 
3719
+ #: includes/topics/functions.php:1749
3720
  msgid ""
3721
  "<strong>ERROR</strong>: The following problem(s) have been found while "
3722
  "updating the tag: %s"
3723
  msgstr ""
3724
 
3725
+ #: includes/topics/functions.php:1788 includes/topics/functions.php:1806
3726
  msgid ""
3727
  "<strong>ERROR</strong>: The following problem(s) have been found while "
3728
  "merging the tags: %s"
3729
  msgstr ""
3730
 
3731
+ #: includes/topics/functions.php:1797
3732
  msgid ""
3733
  "<strong>ERROR</strong>: The tags which are being merged can not be the same."
3734
  msgstr ""
3735
 
3736
+ #: includes/topics/functions.php:1829
3737
  msgid ""
3738
  "<strong>ERROR</strong>: You do not have the permissions to delete the topic "
3739
  "tags."
3740
  msgstr ""
3741
 
3742
+ #: includes/topics/functions.php:1838
3743
  msgid ""
3744
  "<strong>ERROR</strong>: The following problem(s) have been found while "
3745
  "deleting the tag: %s"
3746
  msgstr ""
3747
 
3748
+ #: includes/topics/functions.php:1963
3749
  msgid "<strong>ERROR:</strong> You do not have the permission to do that."
3750
  msgstr ""
3751
 
3752
+ #: includes/topics/functions.php:1976
3753
  msgid "<strong>ERROR</strong>: There was a problem closing the topic."
3754
  msgstr ""
3755
 
3756
+ #: includes/topics/functions.php:1976
3757
  msgid "<strong>ERROR</strong>: There was a problem opening the topic."
3758
  msgstr ""
3759
 
3760
+ #: includes/topics/functions.php:1987
3761
  msgid "<strong>ERROR</strong>: There was a problem unsticking the topic."
3762
  msgstr ""
3763
 
3764
+ #: includes/topics/functions.php:1987
3765
  msgid "<strong>ERROR</strong>: There was a problem sticking the topic."
3766
  msgstr ""
3767
 
3768
+ #: includes/topics/functions.php:1997
3769
  msgid ""
3770
  "<strong>ERROR</strong>: There was a problem unmarking the topic as spam."
3771
  msgstr ""
3772
 
3773
+ #: includes/topics/functions.php:1997
3774
  msgid "<strong>ERROR</strong>: There was a problem marking the topic as spam."
3775
  msgstr ""
3776
 
3777
+ #: includes/topics/functions.php:2016
3778
  msgid "<strong>ERROR</strong>: There was a problem trashing the topic."
3779
  msgstr ""
3780
 
3781
+ #: includes/topics/functions.php:2024
3782
  msgid "<strong>ERROR</strong>: There was a problem untrashing the topic."
3783
  msgstr ""
3784
 
3785
+ #: includes/topics/functions.php:2032
3786
  msgid "<strong>ERROR</strong>: There was a problem deleting the topic."
3787
  msgstr ""
3788
 
3789
+ #: includes/topics/template-tags.php:900
3790
  msgid "This topic was modified %1$s by %2$s. Reason: %3$s"
3791
  msgstr ""
3792
 
3793
+ #: includes/topics/template-tags.php:902
3794
  msgid "This topic was modified %1$s by %2$s."
3795
  msgstr ""
3796
 
3797
+ #: includes/topics/template-tags.php:2106
3798
  msgid "Tagged:"
3799
  msgstr ""
3800
 
3801
+ #: includes/topics/template-tags.php:2501
3802
  msgctxt "Topic Status"
3803
  msgid "Close"
3804
  msgstr ""
3805
 
3806
+ #: includes/topics/template-tags.php:2502
3807
  msgctxt "Topic Status"
3808
  msgid "Open"
3809
  msgstr ""
3810
 
3811
+ #: includes/topics/template-tags.php:2632
3812
  #: templates/default/bbpress/form-topic-tag.php:59
3813
  #: templates/default/bbpress/form-topic-tag.php:73
3814
  msgid "Merge"
3815
  msgstr ""
3816
 
3817
+ #: includes/topics/template-tags.php:2742
3818
  msgid "Viewing %1$s topic"
3819
  msgid_plural "Viewing %1$s topics"
3820
  msgstr[0] ""
3821
  msgstr[1] ""
3822
 
3823
+ #: includes/topics/template-tags.php:2746
3824
  msgid "Viewing topic %2$s (of %4$s total)"
3825
  msgid_plural "Viewing %1$s topics - %2$s through %3$s (of %4$s total)"
3826
  msgstr[0] ""
3827
  msgstr[1] ""
3828
 
3829
+ #: includes/topics/template-tags.php:2806
3830
  msgid "This topic is marked as spam."
3831
  msgstr ""
3832
 
3833
+ #: includes/topics/template-tags.php:2811
3834
  msgid "This topic is in the trash."
3835
  msgstr ""
3836
 
3837
+ #: includes/topics/template-tags.php:2850
3838
  msgid "Normal"
3839
  msgstr ""
3840
 
3841
+ #: includes/topics/template-tags.php:2851
3842
  msgid "Sticky"
3843
  msgstr ""
3844
 
3845
+ #: includes/topics/template-tags.php:2852
3846
  msgid "Super Sticky"
3847
  msgstr ""
3848
 
3849
+ #: includes/topics/template-tags.php:2970
3850
  msgid "%s voice"
3851
  msgid_plural "%s voices"
3852
  msgstr[0] ""
3853
  msgstr[1] ""
3854
 
3855
+ #: includes/topics/template-tags.php:2976
3856
  msgid "This topic contains %1$s, has %2$s, and was last updated by %3$s %4$s."
3857
  msgstr ""
3858
 
3859
+ #: includes/topics/template-tags.php:2980
3860
  msgid "This topic contains %1$s and has %2$s."
3861
  msgstr ""
3862
 
3863
+ #: includes/topics/template-tags.php:2984
3864
  msgid "This topic has no replies."
3865
  msgstr ""
3866
 
3867
+ #: includes/users/functions.php:459
3868
  msgid ""
3869
  "<strong>ERROR</strong>: No topic was found! Which topic are you marking/"
3870
  "unmarking as favorite?"
3871
  msgstr ""
3872
 
3873
+ #: includes/users/functions.php:467 includes/users/functions.php:785
3874
  msgid ""
3875
  "<strong>ERROR</strong>: You don't have the permission to edit favorites of "
3876
  "that user!"
3877
  msgstr ""
3878
 
3879
+ #: includes/users/functions.php:510
3880
  msgid ""
3881
  "<strong>ERROR</strong>: There was a problem removing that topic from "
3882
  "favorites!"
3883
  msgstr ""
3884
 
3885
+ #: includes/users/functions.php:512
3886
  msgid "<strong>ERROR</strong>: There was a problem favoriting that topic!"
3887
  msgstr ""
3888
 
3889
+ #: includes/users/functions.php:777
3890
  msgid ""
3891
  "<strong>ERROR</strong>: No topic was found! Which topic are you subscribing/"
3892
  "unsubscribing to?"
3893
  msgstr ""
3894
 
3895
+ #: includes/users/functions.php:828
3896
  msgid ""
3897
  "<strong>ERROR</strong>: There was a problem unsubscribing from that topic!"
3898
  msgstr ""
3899
 
3900
+ #: includes/users/functions.php:830
3901
  msgid "<strong>ERROR</strong>: There was a problem subscribing to that topic!"
3902
  msgstr ""
3903
 
3904
+ #: includes/users/template-tags.php:487
3905
  msgid "Key Master"
3906
  msgstr ""
3907
 
3908
+ #: includes/users/template-tags.php:491
3909
  msgid "Inactive"
3910
  msgstr ""
3911
 
3912
+ #: includes/users/template-tags.php:495
3913
  msgid "Guest"
3914
  msgstr ""
3915
 
3916
+ #: includes/users/template-tags.php:507
3917
  msgid "Member"
3918
  msgstr ""
3919
 
3920
+ #: includes/users/template-tags.php:547
3921
  msgid "Admin"
3922
  msgstr ""
3923
 
3924
+ #: includes/users/template-tags.php:713
3925
+ msgid "Favorite"
 
3926
  msgstr ""
3927
 
3928
+ #: includes/users/template-tags.php:714
3929
+ msgid "Favorited"
3930
  msgstr ""
3931
 
3932
+ #: includes/users/template-tags.php:871
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3933
  msgid "Subscribe"
3934
  msgstr ""
3935
 
3936
+ #: includes/users/template-tags.php:872
 
3937
  msgid "Unsubscribe"
3938
  msgstr ""
3939
 
3940
+ #: includes/users/template-tags.php:939
3941
  msgid "User updated."
3942
  msgstr ""
3943
 
3944
+ #: includes/users/template-tags.php:964
3945
  msgid "You have super admin privileges."
3946
  msgstr ""
3947
 
3948
+ #: includes/users/template-tags.php:964
3949
  msgid "This user has super admin privileges."
3950
  msgstr ""
3951
 
3952
+ #: includes/users/template-tags.php:1029
3953
  msgid "&mdash; No role for this site &mdash;"
3954
  msgstr ""
3955
 
3956
+ #: includes/users/template-tags.php:1227
3957
  msgid "You are now logged out."
3958
  msgstr ""
3959
 
3960
+ #: includes/users/template-tags.php:1231
3961
  msgid "New user registration is currently not allowed."
3962
  msgstr ""
3963
 
3964
+ #: includes/users/template-tags.php:1240
3965
  msgid "Check your e-mail for the confirmation link."
3966
  msgstr ""
3967
 
3968
+ #: includes/users/template-tags.php:1245
3969
  msgid "Check your e-mail for your new password."
3970
  msgstr ""
3971
 
3972
+ #: includes/users/template-tags.php:1250
3973
  msgid "Registration complete. Please check your e-mail."
3974
  msgstr ""
3975
 
3976
+ #: templates/default/bbpress/content-statistics.php:17
3977
+ msgid "Registered Users"
3978
+ msgstr ""
3979
+
3980
+ #: templates/default/bbpress/content-statistics.php:44
3981
+ msgid "Empty Topic Tags"
3982
+ msgstr ""
3983
+
3984
+ #: templates/default/bbpress/content-statistics.php:53
3985
+ msgid "Hidden Topics"
3986
+ msgstr ""
3987
+
3988
+ #: templates/default/bbpress/content-statistics.php:64
3989
+ msgid "Hidden Replies"
3990
+ msgstr ""
3991
+
3992
  #: templates/default/bbpress/feedback-logged-in.php:13
3993
  msgid "You are already logged in."
3994
  msgstr ""
4005
  msgid "Oh bother! No replies were found here!"
4006
  msgstr ""
4007
 
4008
+ #: templates/default/bbpress/feedback-no-search.php:13
4009
+ msgid "Oh bother! No search results were found here!"
4010
+ msgstr ""
4011
+
4012
  #: templates/default/bbpress/feedback-no-topics.php:13
4013
  msgid "Oh bother! No topics were found here!"
4014
  msgstr ""
4071
  msgstr ""
4072
 
4073
  #: templates/default/bbpress/form-forum.php:149
4074
+ #: templates/default/bbpress/form-reply-move.php:73
4075
+ #: templates/default/bbpress/form-reply.php:145
4076
  #: templates/default/bbpress/form-topic-merge.php:94
4077
  #: templates/default/bbpress/form-topic-split.php:98
4078
  #: templates/default/bbpress/form-topic.php:198
4095
  msgid "Protected"
4096
  msgstr ""
4097
 
4098
+ #: templates/default/bbpress/form-reply-move.php:24
4099
+ msgid "Move reply \"%s\""
4100
+ msgstr ""
4101
+
4102
+ #: templates/default/bbpress/form-reply-move.php:29
4103
+ msgid ""
4104
+ "You can either make this reply a new topic with a new title, or merge it "
4105
+ "into an existing topic."
4106
+ msgstr ""
4107
+
4108
+ #: templates/default/bbpress/form-reply-move.php:33
4109
+ msgid ""
4110
+ "If you choose an existing topic, replies will be ordered by the time and "
4111
+ "date they were created."
4112
+ msgstr ""
4113
+
4114
+ #: templates/default/bbpress/form-reply-move.php:37
4115
+ msgid "Move Method"
4116
+ msgstr ""
4117
+
4118
+ #: templates/default/bbpress/form-reply-move.php:41
4119
+ #: templates/default/bbpress/form-topic-split.php:41
4120
+ msgid "New topic in <strong>%s</strong> titled:"
4121
+ msgstr ""
4122
+
4123
+ #: templates/default/bbpress/form-reply-move.php:42
4124
+ msgid "Moved: %s"
4125
+ msgstr ""
4126
+
4127
+ #: templates/default/bbpress/form-reply-move.php:49
4128
+ #: templates/default/bbpress/form-topic-split.php:49
4129
+ msgid "Use an existing topic in this forum:"
4130
+ msgstr ""
4131
+
4132
+ #: templates/default/bbpress/form-reply-move.php:58
4133
+ #: templates/default/bbpress/form-topic-split.php:58
4134
+ msgid "No other topics found!"
4135
+ msgstr ""
4136
+
4137
+ #: templates/default/bbpress/form-reply-move.php:69
4138
+ #: templates/default/bbpress/form-topic-merge.php:90
4139
+ #: templates/default/bbpress/form-topic-split.php:94
4140
+ msgid "<strong>WARNING:</strong> This process cannot be undone."
4141
+ msgstr ""
4142
+
4143
+ #: templates/default/bbpress/form-reply-move.php:86
4144
+ msgid "You do not have the permissions to edit this reply!"
4145
+ msgstr ""
4146
+
4147
+ #: templates/default/bbpress/form-reply-move.php:86
4148
+ msgid "You cannot edit this reply."
4149
+ msgstr ""
4150
+
4151
  #: templates/default/bbpress/form-reply.php:36
4152
  msgid ""
4153
  "This topic is marked as closed to new replies, however your posting "
4188
  msgid "Optional reason for editing:"
4189
  msgstr ""
4190
 
4191
+ #: templates/default/bbpress/form-reply.php:168
4192
  msgid "The topic &#8216;%s&#8217; is closed to new replies."
4193
  msgstr ""
4194
 
4195
+ #: templates/default/bbpress/form-reply.php:176
4196
  #: templates/default/bbpress/form-topic.php:221
4197
  msgid "The forum &#8216;%s&#8217; is closed to new topics and replies."
4198
  msgstr ""
4199
 
4200
+ #: templates/default/bbpress/form-reply.php:184
4201
  msgid "You cannot reply to this topic."
4202
  msgstr ""
4203
 
4204
+ #: templates/default/bbpress/form-reply.php:184
4205
  msgid "You must be logged in to reply to this topic."
4206
  msgstr ""
4207
 
4208
+ #: templates/default/bbpress/form-search.php:14
4209
+ msgid "Search for:"
4210
+ msgstr ""
4211
+
4212
  #: templates/default/bbpress/form-topic-merge.php:24
4213
  msgid "Merge topic \"%s\""
4214
  msgstr ""
4266
  msgid "Merge topic tags"
4267
  msgstr ""
4268
 
 
 
 
 
 
4269
  #: templates/default/bbpress/form-topic-merge.php:107
4270
  #: templates/default/bbpress/form-topic-split.php:111
4271
  msgid "You do not have the permissions to edit this topic!"
4298
  msgid "Split Method"
4299
  msgstr ""
4300
 
 
 
 
 
4301
  #: templates/default/bbpress/form-topic-split.php:42
4302
  msgid "Split: %s"
4303
  msgstr ""
4304
 
 
 
 
 
 
 
 
 
4305
  #: templates/default/bbpress/form-topic-split.php:76
4306
  msgid "Copy subscribers to the new topic"
4307
  msgstr ""
4436
  msgid "Biographical Info"
4437
  msgstr ""
4438
 
4439
+ #: templates/default/bbpress/form-user-edit.php:90
4440
+ #: templates/default/bbpress/form-user-edit.php:93
 
 
 
 
 
 
4441
  msgid "Account"
4442
  msgstr ""
4443
 
4444
+ #: templates/default/bbpress/form-user-edit.php:115
 
 
 
 
4445
  msgid ""
4446
  "There is a pending email address change to <code>%1$s</code>. <a href=\"%2$s"
4447
  "\">Cancel</a>"
4448
  msgstr ""
4449
 
4450
+ #: templates/default/bbpress/form-user-edit.php:124
4451
  msgid "New Password"
4452
  msgstr ""
4453
 
4454
+ #: templates/default/bbpress/form-user-edit.php:127
4455
  msgid ""
4456
  "If you would like to change the password type a new one. Otherwise leave "
4457
  "this blank."
4458
  msgstr ""
4459
 
4460
+ #: templates/default/bbpress/form-user-edit.php:130
4461
  msgid "Type your new password again."
4462
  msgstr ""
4463
 
4464
+ #: templates/default/bbpress/form-user-edit.php:133
4465
  msgid ""
4466
  "Your password should be at least ten characters long. Use upper and lower "
4467
  "case letters, numbers, and symbols to make it even stronger."
4468
  msgstr ""
4469
 
4470
+ #: templates/default/bbpress/form-user-edit.php:143
4471
+ #: templates/default/bbpress/form-user-edit.php:146
4472
  msgid "User Role"
4473
  msgstr ""
4474
 
4475
+ #: templates/default/bbpress/form-user-edit.php:153
4476
  msgid "Network Role"
4477
  msgstr ""
4478
 
4479
+ #: templates/default/bbpress/form-user-edit.php:156
4480
  msgid "Grant this user super admin privileges for the Network."
4481
  msgstr ""
4482
 
4483
+ #: templates/default/bbpress/form-user-edit.php:178
4484
  msgid "Update Profile"
4485
  msgstr ""
4486
 
4487
+ #: templates/default/bbpress/form-user-edit.php:178
4488
  msgid "Update User"
4489
  msgstr ""
4490
 
4518
  msgid "Blog Role"
4519
  msgstr ""
4520
 
4521
+ #: templates/default/bbpress/loop-search-forum.php:16
4522
+ msgid "Last updated %s"
4523
+ msgstr ""
4524
+
4525
+ #: templates/default/bbpress/loop-search-forum.php:26
4526
+ msgid "Forum: "
4527
+ msgstr ""
4528
+
4529
+ #: templates/default/bbpress/loop-search-reply.php:30
4530
+ msgid "In reply to: "
4531
+ msgstr ""
4532
+
4533
+ #: templates/default/bbpress/loop-search-topic.php:32
4534
+ msgid "Topic: "
4535
+ msgstr ""
4536
+
4537
+ #: templates/default/bbpress/loop-search-topic.php:39
4538
+ msgid "in group forum "
4539
+ msgstr ""
4540
+
4541
+ #: templates/default/bbpress/loop-search-topic.php:43
4542
+ msgid "in forum "
4543
+ msgstr ""
4544
+
4545
+ #: templates/default/bbpress/loop-search.php:22
4546
+ #: templates/default/bbpress/loop-search.php:44
4547
+ msgid "Search Results"
4548
+ msgstr ""
4549
+
4550
  #: templates/default/bbpress/loop-single-reply.php:21
4551
  msgid "in reply to: "
4552
  msgstr ""
4553
 
4554
+ #: templates/default/bbpress/loop-single-topic.php:60
4555
  msgid "Started by: %1$s"
4556
  msgstr ""
4557
 
4558
+ #: templates/default/bbpress/loop-single-topic.php:68
4559
  msgid "in: <a href=\"%1$s\">%2$s</a>"
4560
  msgstr ""
4561
 
4644
  msgid "This user has not created any topics."
4645
  msgstr ""
4646
 
4647
+ #: templates/default/bbpress-functions.php:294
4648
+ msgid "Something went wrong. Refresh your browser and try again."
4649
  msgstr ""
4650
 
4651
+ #: templates/default/bbpress-functions.php:319
4652
+ msgid "Favorites are no longer active."
4653
  msgstr ""
4654
 
4655
+ #: templates/default/bbpress-functions.php:324
4656
+ msgid "Please login to make this topic a favorite."
4657
  msgstr ""
4658
 
4659
+ #: templates/default/bbpress-functions.php:333
4660
+ #: templates/default/bbpress-functions.php:400
4661
+ msgid "You do not have permission to do this."
4662
  msgstr ""
4663
 
4664
+ #: templates/default/bbpress-functions.php:341
4665
+ #: templates/default/bbpress-functions.php:408
4666
+ msgid "The topic could not be found."
4667
  msgstr ""
4668
 
4669
+ #: templates/default/bbpress-functions.php:346
4670
+ #: templates/default/bbpress-functions.php:413
4671
+ msgid "Are you sure you meant to do that?"
4672
  msgstr ""
4673
 
4674
+ #: templates/default/bbpress-functions.php:354
4675
+ #: templates/default/bbpress-functions.php:421
4676
+ msgid "The request was unsuccessful. Please try again."
4677
  msgstr ""
4678
 
4679
+ #: templates/default/bbpress-functions.php:386
4680
+ msgid "Subscriptions are no longer active."
4681
  msgstr ""
4682
 
4683
+ #: templates/default/bbpress-functions.php:391
4684
+ msgid "Please login to subscribe to this topic."
4685
+ msgstr ""
4686
+
4687
+ #: templates/default/extras/page-forum-statistics.php:22
4688
+ msgid "<p>Here are the statistics and popular topics of our forums.</p>"
4689
  msgstr ""
4690
 
4691
  #: templates/default/extras/page-topic-tags.php:22
4697
  msgid "bbPress"
4698
  msgstr ""
4699
 
4700
+ #. #-#-#-#-# plugin.pot (bbPress 2.3-beta1) #-#-#-#-#
4701
  #. Plugin URI of the plugin/theme
4702
+ #. #-#-#-#-# plugin.pot (bbPress 2.3-beta1) #-#-#-#-#
4703
  #. Author URI of the plugin/theme
4704
  msgid "http://bbpress.org"
4705
  msgstr ""
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
  === bbPress ===
2
- Contributors: matt, johnjamesjacoby
3
  Tags: forums, discussion, support, theme, akismet, multisite
4
- Requires at least: 3.4
5
  Tested up to: 3.5
6
  Stable tag: 2.2.4
7
  License: GPLv2 or later
1
  === bbPress ===
2
+ Contributors: matt, johnjamesjacoby, jmdodd
3
  Tags: forums, discussion, support, theme, akismet, multisite
4
+ Requires at least: 3.5
5
  Tested up to: 3.5
6
  Stable tag: 2.2.4
7
  License: GPLv2 or later
templates/default/bbpress-functions.php CHANGED
@@ -84,12 +84,12 @@ class BBP_Default extends BBP_Theme_Compat {
84
 
85
  /** Scripts ***********************************************************/
86
 
87
- add_action( 'bbp_enqueue_scripts', array( $this, 'enqueue_styles' ) ); // Enqueue theme CSS
88
- add_action( 'bbp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); // Enqueue theme JS
89
- add_filter( 'bbp_enqueue_scripts', array( $this, 'localize_topic_script' ) ); // Enqueue theme script localization
90
- add_action( 'bbp_head', array( $this, 'head_scripts' ) ); // Output some extra JS in the <head>
91
- add_action( 'wp_ajax_dim-favorite', array( $this, 'ajax_favorite' ) ); // Handles the ajax favorite/unfavorite
92
- add_action( 'wp_ajax_dim-subscription', array( $this, 'ajax_subscription' ) ); // Handles the ajax subscribe/unsubscribe
93
 
94
  /** Template Wrappers *************************************************/
95
 
@@ -174,11 +174,20 @@ class BBP_Default extends BBP_Theme_Compat {
174
  */
175
  public function enqueue_scripts() {
176
 
177
- if ( bbp_is_single_topic() )
178
- wp_enqueue_script( 'bbpress-topic', $this->url . 'js/topic.js', array( 'wp-lists' ), $this->version, true );
 
 
 
 
 
 
 
179
 
180
- elseif ( bbp_is_single_user_edit() )
 
181
  wp_enqueue_script( 'user-profile' );
 
182
  }
183
 
184
  /**
@@ -191,17 +200,65 @@ class BBP_Default extends BBP_Theme_Compat {
191
  * @uses bbp_is_single_user_edit() To check if it's the profile edit page
192
  */
193
  public function head_scripts() {
194
- ?>
 
 
 
195
 
196
  <script type="text/javascript">
197
  /* <![CDATA[ */
198
- var ajaxurl = '<?php echo admin_url( 'admin-ajax.php' ); ?>';
199
-
200
  <?php if ( bbp_is_single_user_edit() ) : ?>
201
  if ( window.location.hash == '#password' ) {
202
  document.getElementById('pass1').focus();
203
  }
204
  <?php endif; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
205
  /* ]]> */
206
  </script>
207
 
@@ -232,88 +289,83 @@ class BBP_Default extends BBP_Theme_Compat {
232
  if ( !bbp_is_single_topic() )
233
  return;
234
 
235
- // Bail if user is not logged in
236
- if ( !is_user_logged_in() )
237
- return;
238
-
239
- $user_id = bbp_get_current_user_id();
240
-
241
- $localizations = array(
242
- 'currentUserId' => $user_id,
243
- 'topicId' => bbp_get_topic_id(),
244
- );
245
-
246
- // Favorites
247
- if ( bbp_is_favorites_active() ) {
248
- $localizations['favoritesActive'] = 1;
249
- $localizations['favoritesLink'] = bbp_get_favorites_permalink( $user_id );
250
- $localizations['isFav'] = (int) bbp_is_user_favorite( $user_id );
251
- $localizations['favLinkYes'] = __( 'favorites', 'bbpress' );
252
- $localizations['favLinkNo'] = __( '?', 'bbpress' );
253
- $localizations['favYes'] = __( 'This topic is one of your %favLinkYes% [%favDel%]', 'bbpress' );
254
- $localizations['favNo'] = __( '%favAdd% (%favLinkNo%)', 'bbpress' );
255
- $localizations['favDel'] = __( '&times;', 'bbpress' );
256
- $localizations['favAdd'] = __( 'Add this topic to your favorites', 'bbpress' );
257
- } else {
258
- $localizations['favoritesActive'] = 0;
259
- }
260
-
261
- // Subscriptions
262
- if ( bbp_is_subscriptions_active() ) {
263
- $localizations['subsActive'] = 1;
264
- $localizations['isSubscribed'] = (int) bbp_is_user_subscribed( $user_id );
265
- $localizations['subsSub'] = __( 'Subscribe', 'bbpress' );
266
- $localizations['subsUns'] = __( 'Unsubscribe', 'bbpress' );
267
- $localizations['subsLink'] = bbp_get_topic_permalink();
268
- } else {
269
- $localizations['subsActive'] = 0;
270
- }
271
-
272
- wp_localize_script( 'bbpress-topic', 'bbpTopicJS', $localizations );
273
  }
274
 
275
  /**
276
- * Add or remove a topic from a user's favorites
277
  *
278
  * @since bbPress (r3732)
279
  *
280
  * @uses bbp_get_current_user_id() To get the current user id
281
  * @uses current_user_can() To check if the current user can edit the user
282
  * @uses bbp_get_topic() To get the topic
283
- * @uses check_ajax_referer() To verify the nonce & check the referer
284
  * @uses bbp_is_user_favorite() To check if the topic is user's favorite
285
  * @uses bbp_remove_user_favorite() To remove the topic from user's favorites
286
  * @uses bbp_add_user_favorite() To add the topic from user's favorites
 
287
  */
288
  public function ajax_favorite() {
 
 
 
 
 
 
 
 
 
 
 
 
289
  $user_id = bbp_get_current_user_id();
290
- $id = intval( $_POST['id'] );
291
 
292
- if ( !current_user_can( 'edit_user', $user_id ) )
293
- die( '-1' );
 
 
294
 
 
295
  $topic = bbp_get_topic( $id );
296
 
297
- if ( empty( $topic ) )
298
- die( '0' );
 
 
299
 
300
- check_ajax_referer( 'toggle-favorite_' . $topic->ID );
 
 
 
301
 
302
- if ( bbp_is_user_favorite( $user_id, $topic->ID ) ) {
303
- if ( bbp_remove_user_favorite( $user_id, $topic->ID ) ) {
304
- die( '1' );
305
- }
306
- } else {
307
- if ( bbp_add_user_favorite( $user_id, $topic->ID ) ) {
308
- die( '1' );
309
- }
310
  }
311
 
312
- die( '0' );
 
 
 
 
 
 
 
313
  }
314
 
315
  /**
316
- * Subscribe/Unsubscribe a user from a topic
317
  *
318
  * @since bbPress (r3732)
319
  *
@@ -321,41 +373,62 @@ class BBP_Default extends BBP_Theme_Compat {
321
  * @uses bbp_get_current_user_id() To get the current user id
322
  * @uses current_user_can() To check if the current user can edit the user
323
  * @uses bbp_get_topic() To get the topic
324
- * @uses check_ajax_referer() To verify the nonce & check the referer
325
- * @uses bbp_is_user_subscribed() To check if the topic is in user's
326
- * subscriptions
327
- * @uses bbp_remove_user_subscriptions() To remove the topic from user's
328
- * subscriptions
329
  * @uses bbp_add_user_subscriptions() To add the topic from user's subscriptions
 
330
  */
331
  public function ajax_subscription() {
332
- if ( !bbp_is_subscriptions_active() )
333
- return;
334
 
 
 
 
 
 
 
 
 
 
 
 
335
  $user_id = bbp_get_current_user_id();
336
  $id = intval( $_POST['id'] );
337
 
338
- if ( !current_user_can( 'edit_user', $user_id ) )
339
- die( '-1' );
 
 
340
 
 
341
  $topic = bbp_get_topic( $id );
342
 
343
- if ( empty( $topic ) )
344
- die( '0' );
 
 
345
 
346
- check_ajax_referer( 'toggle-subscription_' . $topic->ID );
 
 
 
347
 
348
- if ( bbp_is_user_subscribed( $user_id, $topic->ID ) ) {
349
- if ( bbp_remove_user_subscription( $user_id, $topic->ID ) ) {
350
- die( '1' );
351
- }
352
- } else {
353
- if ( bbp_add_user_subscription( $user_id, $topic->ID ) ) {
354
- die( '1' );
355
- }
356
  }
357
 
358
- die( '0' );
 
 
 
 
 
 
 
359
  }
360
  }
361
  new BBP_Default();
84
 
85
  /** Scripts ***********************************************************/
86
 
87
+ add_action( 'bbp_enqueue_scripts', array( $this, 'enqueue_styles' ) ); // Enqueue theme CSS
88
+ add_action( 'bbp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); // Enqueue theme JS
89
+ add_filter( 'bbp_enqueue_scripts', array( $this, 'localize_topic_script' ) ); // Enqueue theme script localization
90
+ add_action( 'bbp_head', array( $this, 'head_scripts' ) ); // Output some extra JS in the <head>
91
+ add_action( 'bbp_ajax_favorite', array( $this, 'ajax_favorite' ) ); // Handles the ajax favorite/unfavorite
92
+ add_action( 'bbp_ajax_subscription', array( $this, 'ajax_subscription' ) ); // Handles the ajax subscribe/unsubscribe
93
 
94
  /** Template Wrappers *************************************************/
95
 
174
  */
175
  public function enqueue_scripts() {
176
 
177
+ // Always pull in jQuery for TinyMCE shortcode usage
178
+ if ( bbp_use_wp_editor() ) {
179
+ wp_enqueue_script( 'jquery' );
180
+ }
181
+
182
+ // Topic favorite/subscribe
183
+ if ( bbp_is_single_topic() ) {
184
+ wp_enqueue_script( 'bbpress-topic', $this->url . 'js/topic.js', array( 'jquery' ), $this->version );
185
+ }
186
 
187
+ // User Profile edit
188
+ if ( bbp_is_single_user_edit() ) {
189
  wp_enqueue_script( 'user-profile' );
190
+ }
191
  }
192
 
193
  /**
200
  * @uses bbp_is_single_user_edit() To check if it's the profile edit page
201
  */
202
  public function head_scripts() {
203
+
204
+ // Bail if no extra JS is needed
205
+ if ( ! bbp_is_single_user_edit() && ! bbp_use_wp_editor() )
206
+ return; ?>
207
 
208
  <script type="text/javascript">
209
  /* <![CDATA[ */
 
 
210
  <?php if ( bbp_is_single_user_edit() ) : ?>
211
  if ( window.location.hash == '#password' ) {
212
  document.getElementById('pass1').focus();
213
  }
214
  <?php endif; ?>
215
+
216
+ <?php if ( bbp_use_wp_editor() ) : ?>
217
+ jQuery(document).ready( function() {
218
+
219
+ /* Tab from topic title */
220
+ jQuery( '#bbp_topic_title' ).bind( 'keydown.editor-focus', function(e) {
221
+ if ( e.which != 9 )
222
+ return;
223
+
224
+ if ( !e.ctrlKey && !e.altKey && !e.shiftKey ) {
225
+ if ( typeof( tinymce ) != 'undefined' ) {
226
+ if ( ! tinymce.activeEditor.isHidden() ) {
227
+ var editor = tinymce.activeEditor.editorContainer;
228
+ jQuery( '#' + editor + ' td.mceToolbar > a' ).focus();
229
+ } else {
230
+ jQuery( 'textarea.bbp-the-content' ).focus();
231
+ }
232
+ } else {
233
+ jQuery( 'textarea.bbp-the-content' ).focus();
234
+ }
235
+
236
+ e.preventDefault();
237
+ }
238
+ });
239
+
240
+ /* Shift + tab from topic tags */
241
+ jQuery( '#bbp_topic_tags' ).bind( 'keydown.editor-focus', function(e) {
242
+ if ( e.which != 9 )
243
+ return;
244
+
245
+ if ( e.shiftKey && !e.ctrlKey && !e.altKey ) {
246
+ if ( typeof( tinymce ) != 'undefined' ) {
247
+ if ( ! tinymce.activeEditor.isHidden() ) {
248
+ var editor = tinymce.activeEditor.editorContainer;
249
+ jQuery( '#' + editor + ' td.mceToolbar > a' ).focus();
250
+ } else {
251
+ jQuery( 'textarea.bbp-the-content' ).focus();
252
+ }
253
+ } else {
254
+ jQuery( 'textarea.bbp-the-content' ).focus();
255
+ }
256
+
257
+ e.preventDefault();
258
+ }
259
+ });
260
+ });
261
+ <?php endif; ?>
262
  /* ]]> */
263
  </script>
264
 
289
  if ( !bbp_is_single_topic() )
290
  return;
291
 
292
+ wp_localize_script( 'bbpress-topic', 'bbpTopicJS', array(
293
+ 'bbp_ajaxurl' => bbp_get_ajax_url(),
294
+ 'generic_ajax_error' => __( 'Something went wrong. Refresh your browser and try again.', 'bbpress' ),
295
+ 'is_user_logged_in' => is_user_logged_in(),
296
+ 'fav_nonce' => wp_create_nonce( 'toggle-favorite_' . get_the_ID() ),
297
+ 'subs_nonce' => wp_create_nonce( 'toggle-subscription_' . get_the_ID() )
298
+ ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
  }
300
 
301
  /**
302
+ * AJAX handler to add or remove a topic from a user's favorites
303
  *
304
  * @since bbPress (r3732)
305
  *
306
  * @uses bbp_get_current_user_id() To get the current user id
307
  * @uses current_user_can() To check if the current user can edit the user
308
  * @uses bbp_get_topic() To get the topic
309
+ * @uses wp_verify_nonce() To verify the nonce & check the referer
310
  * @uses bbp_is_user_favorite() To check if the topic is user's favorite
311
  * @uses bbp_remove_user_favorite() To remove the topic from user's favorites
312
  * @uses bbp_add_user_favorite() To add the topic from user's favorites
313
+ * @uses bbp_ajax_response() To return JSON
314
  */
315
  public function ajax_favorite() {
316
+
317
+ // Bail if favorites are not active
318
+ if ( ! bbp_is_favorites_active() ) {
319
+ bbp_ajax_response( false, __( 'Favorites are no longer active.', 'bbpress' ), 300 );
320
+ }
321
+
322
+ // Bail if user is not logged in
323
+ if ( !is_user_logged_in() ) {
324
+ bbp_ajax_response( false, __( 'Please login to make this topic a favorite.', 'bbpress' ), 301 );
325
+ }
326
+
327
+ // Get user and topic data
328
  $user_id = bbp_get_current_user_id();
329
+ $id = !empty( $_POST['id'] ) ? intval( $_POST['id'] ) : 0;
330
 
331
+ // Bail if user cannot add favorites for this user
332
+ if ( !current_user_can( 'edit_user', $user_id ) ) {
333
+ bbp_ajax_response( false, __( 'You do not have permission to do this.', 'bbpress' ), 302 );
334
+ }
335
 
336
+ // Get the topic
337
  $topic = bbp_get_topic( $id );
338
 
339
+ // Bail if topic cannot be found
340
+ if ( empty( $topic ) ) {
341
+ bbp_ajax_response( false, __( 'The topic could not be found.', 'bbpress' ), 303 );
342
+ }
343
 
344
+ // Bail if user did not take this action
345
+ if ( !isset( $_POST['nonce'] ) || !wp_verify_nonce( $_POST['nonce'], 'toggle-favorite_' . $topic->ID ) ) {
346
+ bbp_ajax_response( false, __( 'Are you sure you meant to do that?', 'bbpress' ), 304 );
347
+ }
348
 
349
+ // Take action
350
+ $status = bbp_is_user_favorite( $user_id, $topic->ID ) ? bbp_remove_user_favorite( $user_id, $topic->ID ) : bbp_add_user_favorite( $user_id, $topic->ID );
351
+
352
+ // Bail if action failed
353
+ if ( empty( $status ) ) {
354
+ bbp_ajax_response( false, __( 'The request was unsuccessful. Please try again.', 'bbpress' ), 305 );
 
 
355
  }
356
 
357
+ // Put subscription attributes in convenient array
358
+ $attrs = array(
359
+ 'topic_id' => $topic->ID,
360
+ 'user_id' => $user_id
361
+ );
362
+
363
+ // Action succeeded
364
+ bbp_ajax_response( true, bbp_get_user_favorites_link( $attrs, $user_id, false ), 200 );
365
  }
366
 
367
  /**
368
+ * AJAX handler to Subscribe/Unsubscribe a user from a topic
369
  *
370
  * @since bbPress (r3732)
371
  *
373
  * @uses bbp_get_current_user_id() To get the current user id
374
  * @uses current_user_can() To check if the current user can edit the user
375
  * @uses bbp_get_topic() To get the topic
376
+ * @uses wp_verify_nonce() To verify the nonce
377
+ * @uses bbp_is_user_subscribed() To check if the topic is in user's subscriptions
378
+ * @uses bbp_remove_user_subscriptions() To remove the topic from user's subscriptions
 
 
379
  * @uses bbp_add_user_subscriptions() To add the topic from user's subscriptions
380
+ * @uses bbp_ajax_response() To return JSON
381
  */
382
  public function ajax_subscription() {
 
 
383
 
384
+ // Bail if subscriptions are not active
385
+ if ( !bbp_is_subscriptions_active() ) {
386
+ bbp_ajax_response( false, __( 'Subscriptions are no longer active.', 'bbpress' ), 300 );
387
+ }
388
+
389
+ // Bail if user is not logged in
390
+ if ( !is_user_logged_in() ) {
391
+ bbp_ajax_response( false, __( 'Please login to subscribe to this topic.', 'bbpress' ), 301 );
392
+ }
393
+
394
+ // Get user and topic data
395
  $user_id = bbp_get_current_user_id();
396
  $id = intval( $_POST['id'] );
397
 
398
+ // Bail if user cannot add favorites for this user
399
+ if ( !current_user_can( 'edit_user', $user_id ) ) {
400
+ bbp_ajax_response( false, __( 'You do not have permission to do this.', 'bbpress' ), 302 );
401
+ }
402
 
403
+ // Get the topic
404
  $topic = bbp_get_topic( $id );
405
 
406
+ // Bail if topic cannot be found
407
+ if ( empty( $topic ) ) {
408
+ bbp_ajax_response( false, __( 'The topic could not be found.', 'bbpress' ), 303 );
409
+ }
410
 
411
+ // Bail if user did not take this action
412
+ if ( !isset( $_POST['nonce'] ) || !wp_verify_nonce( $_POST['nonce'], 'toggle-subscription_' . $topic->ID ) ) {
413
+ bbp_ajax_response( false, __( 'Are you sure you meant to do that?', 'bbpress' ), 304 );
414
+ }
415
 
416
+ // Take action
417
+ $status = bbp_is_user_subscribed( $user_id, $topic->ID ) ? bbp_remove_user_subscription( $user_id, $topic->ID ) : bbp_add_user_subscription( $user_id, $topic->ID );
418
+
419
+ // Bail if action failed
420
+ if ( empty( $status ) ) {
421
+ bbp_ajax_response( false, __( 'The request was unsuccessful. Please try again.', 'bbpress' ), 305 );
 
 
422
  }
423
 
424
+ // Put subscription attributes in convenient array
425
+ $attrs = array(
426
+ 'topic_id' => $topic->ID,
427
+ 'user_id' => $user_id
428
+ );
429
+
430
+ // Action succeeded
431
+ bbp_ajax_response( true, bbp_get_user_subscribe_link( $attrs, $user_id, false ), 200 );
432
  }
433
  }
434
  new BBP_Default();
templates/default/bbpress/content-archive-forum.php CHANGED
@@ -11,6 +11,12 @@
11
 
12
  <div id="bbpress-forums">
13
 
 
 
 
 
 
 
14
  <?php bbp_breadcrumb(); ?>
15
 
16
  <?php do_action( 'bbp_template_before_forums_index' ); ?>
11
 
12
  <div id="bbpress-forums">
13
 
14
+ <div class="bbp-search-form">
15
+
16
+ <?php bbp_get_template_part( 'form', 'search' ); ?>
17
+
18
+ </div>
19
+
20
  <?php bbp_breadcrumb(); ?>
21
 
22
  <?php do_action( 'bbp_template_before_forums_index' ); ?>
templates/default/bbpress/content-search.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Search Content Part
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Theme
8
+ */
9
+
10
+ ?>
11
+
12
+ <div id="bbpress-forums">
13
+
14
+ <?php bbp_breadcrumb(); ?>
15
+
16
+ <?php bbp_set_query_name( 'bbp_search' ); ?>
17
+
18
+ <?php do_action( 'bbp_template_before_search' ); ?>
19
+
20
+ <?php if ( bbp_has_search_results() ) : ?>
21
+
22
+ <?php bbp_get_template_part( 'pagination', 'search' ); ?>
23
+
24
+ <?php bbp_get_template_part( 'loop', 'search' ); ?>
25
+
26
+ <?php bbp_get_template_part( 'pagination', 'search' ); ?>
27
+
28
+ <?php elseif ( bbp_get_search_terms() ) : ?>
29
+
30
+ <?php bbp_get_template_part( 'feedback', 'no-search' ); ?>
31
+
32
+ <?php else : ?>
33
+
34
+ <?php bbp_get_template_part( 'form', 'search' ); ?>
35
+
36
+ <?php endif; ?>
37
+
38
+ <?php do_action( 'bbp_template_after_search_results' ); ?>
39
+
40
+ </div>
41
+
templates/default/bbpress/content-single-forum.php CHANGED
@@ -23,7 +23,7 @@
23
 
24
  <?php bbp_single_forum_description(); ?>
25
 
26
- <?php if ( bbp_get_forum_subforum_count() && bbp_has_forums() ) : ?>
27
 
28
  <?php bbp_get_template_part( 'loop', 'forums' ); ?>
29
 
23
 
24
  <?php bbp_single_forum_description(); ?>
25
 
26
+ <?php if ( bbp_has_forums() ) : ?>
27
 
28
  <?php bbp_get_template_part( 'loop', 'forums' ); ?>
29
 
templates/default/bbpress/content-statistics.php ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Template Name: bbPress - Statistics
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Theme
8
+ */
9
+
10
+ // Get the statistics
11
+ $stats = bbp_get_statistics(); ?>
12
+
13
+ <dl role="main">
14
+
15
+ <?php do_action( 'bbp_before_statistics' ); ?>
16
+
17
+ <dt><?php _e( 'Registered Users', 'bbpress' ); ?></dt>
18
+ <dd>
19
+ <strong><?php echo esc_html( $stats['user_count'] ); ?></strong>
20
+ </dd>
21
+
22
+ <dt><?php _e( 'Forums', 'bbpress' ); ?></dt>
23
+ <dd>
24
+ <strong><?php echo esc_html( $stats['forum_count'] ); ?></strong>
25
+ </dd>
26
+
27
+ <dt><?php _e( 'Topics', 'bbpress' ); ?></dt>
28
+ <dd>
29
+ <strong><?php echo esc_html( $stats['topic_count'] ); ?></strong>
30
+ </dd>
31
+
32
+ <dt><?php _e( 'Replies', 'bbpress' ); ?></dt>
33
+ <dd>
34
+ <strong><?php echo esc_html( $stats['reply_count'] ); ?></strong>
35
+ </dd>
36
+
37
+ <dt><?php _e( 'Topic Tags', 'bbpress' ); ?></dt>
38
+ <dd>
39
+ <strong><?php echo esc_html( $stats['topic_tag_count'] ); ?></strong>
40
+ </dd>
41
+
42
+ <?php if ( !empty( $stats['empty_topic_tag_count'] ) ) : ?>
43
+
44
+ <dt><?php _e( 'Empty Topic Tags', 'bbpress' ); ?></dt>
45
+ <dd>
46
+ <strong><?php echo esc_html( $stats['empty_topic_tag_count'] ); ?></strong>
47
+ </dd>
48
+
49
+ <?php endif; ?>
50
+
51
+ <?php if ( !empty( $stats['topic_count_hidden'] ) ) : ?>
52
+
53
+ <dt><?php _e( 'Hidden Topics', 'bbpress' ); ?></dt>
54
+ <dd>
55
+ <strong>
56
+ <abbr title="<?php echo esc_attr( $stats['hidden_topic_title'] ); ?>"><?php echo esc_html( $stats['topic_count_hidden'] ); ?></abbr>
57
+ </strong>
58
+ </dd>
59
+
60
+ <?php endif; ?>
61
+
62
+ <?php if ( !empty( $stats['reply_count_hidden'] ) ) : ?>
63
+
64
+ <dt><?php _e( 'Hidden Replies', 'bbpress' ); ?></dt>
65
+ <dd>
66
+ <strong>
67
+ <abbr title="<?php echo esc_attr( $stats['hidden_reply_title'] ); ?>"><?php echo esc_html( $stats['reply_count_hidden'] ); ?></abbr>
68
+ </strong>
69
+ </dd>
70
+
71
+ <?php endif; ?>
72
+
73
+ <?php do_action( 'bbp_after_statistics' ); ?>
74
+
75
+ </dl>
76
+
77
+ <?php unset( $stats );
templates/default/bbpress/feedback-no-search.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Oh bother!
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Theme
8
+ */
9
+
10
+ ?>
11
+
12
+ <div class="bbp-template-notice">
13
+ <p><?php _e( 'Oh bother! No search results were found here!', 'bbpress' ); ?></p>
14
+ </div>
templates/default/bbpress/form-reply-move.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Move Reply
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Theme
8
+ */
9
+
10
+ ?>
11
+
12
+ <div id="bbpress-forums">
13
+
14
+ <?php bbp_breadcrumb(); ?>
15
+
16
+ <?php if ( is_user_logged_in() && current_user_can( 'edit_topic', bbp_get_topic_id() ) ) : ?>
17
+
18
+ <div id="move-reply-<?php bbp_topic_id(); ?>" class="bbp-reply-move">
19
+
20
+ <form id="move_reply" name="move_reply" method="post" action="<?php the_permalink(); ?>">
21
+
22
+ <fieldset class="bbp-form">
23
+
24
+ <legend><?php printf( __( 'Move reply "%s"', 'bbpress' ), bbp_get_reply_title() ); ?></legend>
25
+
26
+ <div>
27
+
28
+ <div class="bbp-template-notice info">
29
+ <p><?php _e( 'You can either make this reply a new topic with a new title, or merge it into an existing topic.', 'bbpress' ); ?></p>
30
+ </div>
31
+
32
+ <div class="bbp-template-notice">
33
+ <p><?php _e( 'If you choose an existing topic, replies will be ordered by the time and date they were created.', 'bbpress' ); ?></p>
34
+ </div>
35
+
36
+ <fieldset class="bbp-form">
37
+ <legend><?php _e( 'Move Method', 'bbpress' ); ?></legend>
38
+
39
+ <div>
40
+ <input name="bbp_reply_move_option" id="bbp_reply_move_option_reply" type="radio" checked="checked" value="topic" tabindex="<?php bbp_tab_index(); ?>" />
41
+ <label for="bbp_reply_move_option_reply"><?php printf( __( 'New topic in <strong>%s</strong> titled:', 'bbpress' ), bbp_get_forum_title( bbp_get_reply_forum_id( bbp_get_reply_id() ) ) ); ?></label>
42
+ <input type="text" id="bbp_reply_move_destination_title" value="<?php printf( __( 'Moved: %s', 'bbpress' ), bbp_get_reply_title() ); ?>" tabindex="<?php bbp_tab_index(); ?>" size="35" name="bbp_reply_move_destination_title" />
43
+ </div>
44
+
45
+ <?php if ( bbp_has_topics( array( 'show_stickies' => false, 'post_parent' => bbp_get_reply_forum_id( bbp_get_reply_id() ), 'post__not_in' => array( bbp_get_reply_topic_id( bbp_get_reply_id() ) ) ) ) ) : ?>
46
+
47
+ <div>
48
+ <input name="bbp_reply_move_option" id="bbp_reply_move_option_existing" type="radio" value="existing" tabindex="<?php bbp_tab_index(); ?>" />
49
+ <label for="bbp_reply_move_option_existing"><?php _e( 'Use an existing topic in this forum:', 'bbpress' ); ?></label>
50
+
51
+ <?php
52
+ bbp_dropdown( array(
53
+ 'post_type' => bbp_get_topic_post_type(),
54
+ 'post_parent' => bbp_get_reply_forum_id( bbp_get_reply_id() ),
55
+ 'selected' => -1,
56
+ 'exclude' => bbp_get_reply_topic_id( bbp_get_reply_id() ),
57
+ 'select_id' => 'bbp_destination_topic',
58
+ 'none_found' => __( 'No other topics found!', 'bbpress' )
59
+ ) );
60
+ ?>
61
+
62
+ </div>
63
+
64
+ <?php endif; ?>
65
+
66
+ </fieldset>
67
+
68
+ <div class="bbp-template-notice error">
69
+ <p><?php _e( '<strong>WARNING:</strong> This process cannot be undone.', 'bbpress' ); ?></p>
70
+ </div>
71
+
72
+ <div class="bbp-submit-wrapper">
73
+ <button type="submit" tabindex="<?php bbp_tab_index(); ?>" id="bbp_move_reply_submit" name="bbp_move_reply_submit" class="button submit"><?php _e( 'Submit', 'bbpress' ); ?></button>
74
+ </div>
75
+ </div>
76
+
77
+ <?php bbp_move_reply_form_fields(); ?>
78
+
79
+ </fieldset>
80
+ </form>
81
+ </div>
82
+
83
+ <?php else : ?>
84
+
85
+ <div id="no-reply-<?php bbp_reply_id(); ?>" class="bbp-no-reply">
86
+ <div class="entry-content"><?php is_user_logged_in() ? _e( 'You do not have the permissions to edit this reply!', 'bbpress' ) : _e( 'You cannot edit this reply.', 'bbpress' ); ?></div>
87
+ </div>
88
+
89
+ <?php endif; ?>
90
+
91
+ </div>
templates/default/bbpress/form-reply.php CHANGED
@@ -134,10 +134,6 @@
134
 
135
  <?php do_action( 'bbp_theme_after_reply_form_revisions' ); ?>
136
 
137
- <?php else : ?>
138
-
139
- <?php bbp_topic_admin_links(); ?>
140
-
141
  <?php endif; ?>
142
 
143
  <?php do_action( 'bbp_theme_before_reply_form_submit_wrapper' ); ?>
134
 
135
  <?php do_action( 'bbp_theme_after_reply_form_revisions' ); ?>
136
 
 
 
 
 
137
  <?php endif; ?>
138
 
139
  <?php do_action( 'bbp_theme_before_reply_form_submit_wrapper' ); ?>
templates/default/bbpress/form-search.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Search
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Theme
8
+ */
9
+
10
+ ?>
11
+
12
+ <form role="search" method="get" id="bbp-search-form" action="<?php bbp_search_url(); ?>">
13
+ <div>
14
+ <label class="screen-reader-text hidden" for="bbp_search"><?php _e( 'Search for:', 'bbpress' ); ?></label>
15
+ <input tabindex="<?php bbp_tab_index(); ?>" type="text" value="<?php echo esc_attr( bbp_get_search_terms() ); ?>" name="bbp_search" id="bbp_search" />
16
+ <input tabindex="<?php bbp_tab_index(); ?>" class="button" type="submit" id="bbp_search_submit" value="<?php _e( 'Search', 'bbpress' ); ?>" />
17
+ </div>
18
+ </form>
templates/default/bbpress/loop-search-forum.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Search Loop - Single Forum
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Theme
8
+ */
9
+
10
+ ?>
11
+
12
+ <div class="bbp-forum-header">
13
+
14
+ <div class="bbp-meta">
15
+
16
+ <span class="bbp-forum-post-date"><?php printf( __( 'Last updated %s', 'bbpress' ), bbp_get_forum_last_active_time() ); ?></span>
17
+
18
+ <a href="<?php bbp_forum_permalink(); ?>" title="<?php bbp_forum_title(); ?>" class="bbp-forum-permalink">#<?php bbp_forum_id(); ?></a>
19
+
20
+ </div><!-- .bbp-meta -->
21
+
22
+ <div class="bbp-forum-title">
23
+
24
+ <?php do_action( 'bbp_theme_before_forum_title' ); ?>
25
+
26
+ <h3><?php _e( 'Forum: ', 'bbpress' ); ?><a href="<?php bbp_forum_permalink(); ?>" title="<?php bbp_forum_title(); ?>"><?php bbp_forum_title(); ?></a></h3>
27
+
28
+ <?php do_action( 'bbp_theme_after_forum_title' ); ?>
29
+
30
+ </div><!-- .bbp-forum-title -->
31
+
32
+ </div><!-- .bbp-forum-header -->
33
+
34
+ <div id="post-<?php bbp_forum_id(); ?>" <?php bbp_forum_class(); ?>>
35
+
36
+ <div class="bbp-forum-content">
37
+
38
+ <?php do_action( 'bbp_theme_before_forum_content' ); ?>
39
+
40
+ <?php the_excerpt(); ?>
41
+
42
+ <?php do_action( 'bbp_theme_after_forum_content' ); ?>
43
+
44
+ </div><!-- .bbp-forum-content -->
45
+
46
+ </div><!-- #post-<?php bbp_forum_id(); ?> -->
templates/default/bbpress/loop-search-reply.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Search Loop - Single Reply
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Theme
8
+ */
9
+
10
+ ?>
11
+
12
+ <div class="bbp-reply-header">
13
+
14
+ <div class="bbp-meta">
15
+
16
+ <span class="bbp-reply-post-date"><?php bbp_reply_post_date(); ?></span>
17
+
18
+ <a href="<?php bbp_reply_url(); ?>" title="<?php bbp_reply_title(); ?>" class="bbp-reply-permalink">#<?php bbp_reply_id(); ?></a>
19
+
20
+ <?php do_action( 'bbp_theme_before_reply_admin_links' ); ?>
21
+
22
+ <?php bbp_reply_admin_links(); ?>
23
+
24
+ <?php do_action( 'bbp_theme_after_reply_admin_links' ); ?>
25
+
26
+ </div><!-- .bbp-meta -->
27
+
28
+ <div class="bbp-reply-title">
29
+
30
+ <h3><?php _e( 'In reply to: ', 'bbpress' ); ?>
31
+ <a class="bbp-topic-permalink" href="<?php bbp_topic_permalink( bbp_get_reply_topic_id() ); ?>" title="<?php bbp_topic_title( bbp_get_reply_topic_id() ); ?>"><?php bbp_topic_title( bbp_get_reply_topic_id() ); ?></a></h3>
32
+
33
+ </div><!-- .bbp-reply-title -->
34
+
35
+ </div><!-- .bbp-reply-header -->
36
+
37
+ <div id="post-<?php bbp_reply_id(); ?>" <?php bbp_reply_class(); ?>>
38
+
39
+ <div class="bbp-reply-author">
40
+
41
+ <?php do_action( 'bbp_theme_before_reply_author_details' ); ?>
42
+
43
+ <?php bbp_reply_author_link( array( 'sep' => '<br />', 'show_role' => true ) ); ?>
44
+
45
+ <?php if ( is_super_admin() ) : ?>
46
+
47
+ <?php do_action( 'bbp_theme_before_reply_author_admin_details' ); ?>
48
+
49
+ <div class="bbp-reply-ip"><?php bbp_author_ip( bbp_get_reply_id() ); ?></div>
50
+
51
+ <?php do_action( 'bbp_theme_after_reply_author_admin_details' ); ?>
52
+
53
+ <?php endif; ?>
54
+
55
+ <?php do_action( 'bbp_theme_after_reply_author_details' ); ?>
56
+
57
+ </div><!-- .bbp-reply-author -->
58
+
59
+ <div class="bbp-reply-content">
60
+
61
+ <?php do_action( 'bbp_theme_before_reply_content' ); ?>
62
+
63
+ <?php bbp_reply_content(); ?>
64
+
65
+ <?php do_action( 'bbp_theme_after_reply_content' ); ?>
66
+
67
+ </div><!-- .bbp-reply-content -->
68
+
69
+ </div><!-- #post-<?php bbp_reply_id(); ?> -->
70
+
templates/default/bbpress/loop-search-topic.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Search Loop - Single Topic
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Theme
8
+ */
9
+
10
+ ?>
11
+
12
+ <div class="bbp-topic-header">
13
+
14
+ <div class="bbp-meta">
15
+
16
+ <span class="bbp-topic-post-date"><?php bbp_topic_post_date( bbp_get_topic_id() ); ?></span>
17
+
18
+ <a href="<?php bbp_topic_permalink(); ?>" title="<?php bbp_topic_title(); ?>" class="bbp-topic-permalink">#<?php bbp_topic_id(); ?></a>
19
+
20
+ <?php do_action( 'bbp_theme_before_topic_admin_links' ); ?>
21
+
22
+ <?php bbp_topic_admin_links( bbp_get_topic_id() ); ?>
23
+
24
+ <?php do_action( 'bbp_theme_after_topic_admin_links' ); ?>
25
+
26
+ </div><!-- .bbp-meta -->
27
+
28
+ <div class="bbp-topic-title">
29
+
30
+ <?php do_action( 'bbp_theme_before_topic_title' ); ?>
31
+
32
+ <h3><?php _e( 'Topic: ', 'bbpress' ); ?>
33
+ <a href="<?php bbp_topic_permalink(); ?>" title="<?php bbp_topic_title(); ?>"><?php bbp_topic_title(); ?></a></h3>
34
+
35
+ <div class="bbp-topic-title-meta">
36
+
37
+ <?php if ( function_exists( 'bbp_is_forum_group_forum' ) && bbp_is_forum_group_forum( bbp_get_topic_forum_id() ) ) : ?>
38
+
39
+ <?php _e( 'in group forum ', 'bbpress' ); ?>
40
+
41
+ <?php else : ?>
42
+
43
+ <?php _e( 'in forum ', 'bbpress' ); ?>
44
+
45
+ <?php endif; ?>
46
+
47
+ <a href="<?php bbp_forum_permalink( bbp_get_topic_forum_id() ); ?>" title="<?php bbp_forum_title( bbp_get_topic_forum_id() ); ?>"><?php bbp_forum_title( bbp_get_topic_forum_id() ); ?></a>
48
+
49
+ </div><!-- .bbp-topic-title-meta -->
50
+
51
+ <?php do_action( 'bbp_theme_after_topic_title' ); ?>
52
+
53
+ </div><!-- .bbp-topic-title -->
54
+
55
+ </div><!-- .bbp-topic-header -->
56
+
57
+ <div id="post-<?php bbp_topic_id(); ?>" <?php bbp_topic_class(); ?>>
58
+
59
+ <div class="bbp-topic-author">
60
+
61
+ <?php do_action( 'bbp_theme_before_topic_author_details' ); ?>
62
+
63
+ <?php bbp_topic_author_link( array( 'sep' => '<br />', 'show_role' => true ) ); ?>
64
+
65
+ <?php if ( is_super_admin() ) : ?>
66
+
67
+ <?php do_action( 'bbp_theme_before_topic_author_admin_details' ); ?>
68
+
69
+ <div class="bbp-reply-ip"><?php bbp_author_ip( bbp_get_topic_id() ); ?></div>
70
+
71
+ <?php do_action( 'bbp_theme_after_topic_author_admin_details' ); ?>
72
+
73
+ <?php endif; ?>
74
+
75
+ <?php do_action( 'bbp_theme_after_topic_author_details' ); ?>
76
+
77
+ </div><!-- .bbp-topic-author -->
78
+
79
+ <div class="bbp-topic-content">
80
+
81
+ <?php do_action( 'bbp_theme_before_topic_content' ); ?>
82
+
83
+ <?php bbp_topic_content(); ?>
84
+
85
+ <?php do_action( 'bbp_theme_after_topic_content' ); ?>
86
+
87
+ </div><!-- .bbp-topic-content -->
88
+
89
+ </div><!-- #post-<?php bbp_topic_id(); ?> -->
templates/default/bbpress/loop-search.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Search Loop
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Theme
8
+ */
9
+
10
+ ?>
11
+
12
+ <?php do_action( 'bbp_template_before_search_results_loop' ); ?>
13
+
14
+ <ul id="bbp-search-results" class="forums bbp-search-results">
15
+
16
+ <li class="bbp-header">
17
+
18
+ <div class="bbp-search-author"><?php _e( 'Author', 'bbpress' ); ?></div><!-- .bbp-reply-author -->
19
+
20
+ <div class="bbp-search-content">
21
+
22
+ <?php _e( 'Search Results', 'bbpress' ); ?>
23
+
24
+ </div><!-- .bbp-search-content -->
25
+
26
+ </li><!-- .bbp-header -->
27
+
28
+ <li class="bbp-body">
29
+
30
+ <?php while ( bbp_search_results() ) : bbp_the_search_result(); ?>
31
+
32
+ <?php bbp_get_template_part( 'loop', 'search-' . get_post_type() ); ?>
33
+
34
+ <?php endwhile; ?>
35
+
36
+ </li><!-- .bbp-body -->
37
+
38
+ <li class="bbp-footer">
39
+
40
+ <div class="bbp-search-author"><?php _e( 'Author', 'bbpress' ); ?></div>
41
+
42
+ <div class="bbp-search-content">
43
+
44
+ <?php _e( 'Search Results', 'bbpress' ); ?>
45
+
46
+ </div><!-- .bbp-search-content -->
47
+
48
+ </li><!-- .bbp-footer -->
49
+
50
+ </ul><!-- #bbp-search-results -->
51
+
52
+ <?php do_action( 'bbp_template_after_search_results_loop' ); ?>
templates/default/bbpress/loop-single-forum.php CHANGED
@@ -19,18 +19,18 @@
19
 
20
  <?php do_action( 'bbp_theme_after_forum_title' ); ?>
21
 
22
- <?php do_action( 'bbp_theme_before_forum_sub_forums' ); ?>
23
-
24
- <?php bbp_list_forums(); ?>
25
-
26
- <?php do_action( 'bbp_theme_after_forum_sub_forums' ); ?>
27
-
28
  <?php do_action( 'bbp_theme_before_forum_description' ); ?>
29
 
30
  <div class="bbp-forum-content"><?php the_content(); ?></div>
31
 
32
  <?php do_action( 'bbp_theme_after_forum_description' ); ?>
33
 
 
 
 
 
 
 
34
  <?php bbp_forum_row_actions(); ?>
35
 
36
  </li>
19
 
20
  <?php do_action( 'bbp_theme_after_forum_title' ); ?>
21
 
 
 
 
 
 
 
22
  <?php do_action( 'bbp_theme_before_forum_description' ); ?>
23
 
24
  <div class="bbp-forum-content"><?php the_content(); ?></div>
25
 
26
  <?php do_action( 'bbp_theme_after_forum_description' ); ?>
27
 
28
+ <?php do_action( 'bbp_theme_before_forum_sub_forums' ); ?>
29
+
30
+ <?php bbp_list_forums(); ?>
31
+
32
+ <?php do_action( 'bbp_theme_after_forum_sub_forums' ); ?>
33
+
34
  <?php bbp_forum_row_actions(); ?>
35
 
36
  </li>
templates/default/bbpress/loop-single-reply.php CHANGED
@@ -9,7 +9,7 @@
9
 
10
  ?>
11
 
12
- <div class="bbp-reply-header">
13
 
14
  <div class="bbp-meta">
15
 
@@ -34,9 +34,9 @@
34
 
35
  </div><!-- .bbp-meta -->
36
 
37
- </div><!-- .bbp-reply-header -->
38
 
39
- <div id="post-<?php bbp_reply_id(); ?>" <?php bbp_reply_class(); ?>>
40
 
41
  <div class="bbp-reply-author">
42
 
@@ -68,4 +68,4 @@
68
 
69
  </div><!-- .bbp-reply-content -->
70
 
71
- </div><!-- #post-<?php bbp_reply_id(); ?> -->
9
 
10
  ?>
11
 
12
+ <div id="post-<?php bbp_reply_id(); ?>" class="bbp-reply-header">
13
 
14
  <div class="bbp-meta">
15
 
34
 
35
  </div><!-- .bbp-meta -->
36
 
37
+ </div><!-- #post-<?php bbp_reply_id(); ?> -->
38
 
39
+ <div <?php bbp_reply_class(); ?>>
40
 
41
  <div class="bbp-reply-author">
42
 
68
 
69
  </div><!-- .bbp-reply-content -->
70
 
71
+ </div><!-- .reply -->
templates/default/bbpress/loop-single-topic.php CHANGED
@@ -9,7 +9,7 @@
9
 
10
  ?>
11
 
12
- <ul id="topic-<?php bbp_topic_id(); ?>" <?php bbp_topic_class(); ?>>
13
 
14
  <li class="bbp-topic-title">
15
 
@@ -21,7 +21,7 @@
21
 
22
  <?php do_action( 'bbp_theme_before_topic_favorites_action' ); ?>
23
 
24
- <?php bbp_user_favorites_link( array( 'mid' => '+', 'post' => '' ), array( 'pre' => '', 'mid' => '&times;', 'post' => '' ) ); ?>
25
 
26
  <?php do_action( 'bbp_theme_after_topic_favorites_action' ); ?>
27
 
@@ -102,4 +102,4 @@
102
  </p>
103
  </li>
104
 
105
- </ul><!-- #topic-<?php bbp_topic_id(); ?> -->
9
 
10
  ?>
11
 
12
+ <ul id="bbp-topic-<?php bbp_topic_id(); ?>" <?php bbp_topic_class(); ?>>
13
 
14
  <li class="bbp-topic-title">
15
 
21
 
22
  <?php do_action( 'bbp_theme_before_topic_favorites_action' ); ?>
23
 
24
+ <?php bbp_user_favorites_link( array( 'before' => '', 'favorite' => '+', 'favorited' => '&times;' ) ); ?>
25
 
26
  <?php do_action( 'bbp_theme_after_topic_favorites_action' ); ?>
27
 
102
  </p>
103
  </li>
104
 
105
+ </ul><!-- #bbp-topic-<?php bbp_topic_id(); ?> -->
templates/default/bbpress/pagination-search.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Pagination for pages of search results
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Theme
8
+ */
9
+
10
+ ?>
11
+
12
+ <?php do_action( 'bbp_template_before_pagination_loop' ); ?>
13
+
14
+ <div class="bbp-pagination">
15
+ <div class="bbp-pagination-count">
16
+
17
+ <?php bbp_search_pagination_count(); ?>
18
+
19
+ </div>
20
+
21
+ <div class="bbp-pagination-links">
22
+
23
+ <?php bbp_search_pagination_links(); ?>
24
+
25
+ </div>
26
+ </div>
27
+
28
+ <?php do_action( 'bbp_template_after_pagination_loop' ); ?>
templates/default/css/bbpress-rtl.css CHANGED
@@ -34,6 +34,7 @@
34
  height: auto;
35
  }
36
 
 
37
  #bbpress-forums div.bbp-topic-header,
38
  #bbpress-forums div.bbp-reply-header {
39
  background-color: #f4f4f4;
@@ -67,7 +68,8 @@
67
  #bbpress-forums ul.bbp-lead-topic,
68
  #bbpress-forums ul.bbp-topics,
69
  #bbpress-forums ul.bbp-forums,
70
- #bbpress-forums ul.bbp-replies {
 
71
  font-size: 12px;
72
  overflow: hidden;
73
  border: 1px solid #eee;
@@ -114,22 +116,6 @@
114
  line-height: 1em;
115
  }
116
 
117
- #bbpress-forums .bbp-topic-content img,
118
- #bbpress-forums .bbp-reply-content img {
119
- max-width: 100%;
120
- }
121
-
122
- #bbpress-forums .bbp-topic-content ul,
123
- #bbpress-forums .bbp-reply-content ul {
124
- list-style: square;
125
- padding-right: 15px;
126
- }
127
-
128
- #bbpress-forums .bbp-forum-content p {
129
- margin: 5px 0 0;
130
- font-style: italic;
131
- }
132
-
133
  li.bbp-forum-info,
134
  li.bbp-topic-title {
135
  float: right;
@@ -166,6 +152,14 @@ li.bbp-header div.bbp-reply-content span#favorite-toggle {
166
  float: left;
167
  }
168
 
 
 
 
 
 
 
 
 
169
  #bbpress-forums div.bbp-topic-author,
170
  #bbpress-forums div.bbp-reply-author {
171
  float: right;
@@ -173,6 +167,7 @@ li.bbp-header div.bbp-reply-content span#favorite-toggle {
173
  width: 115px;
174
  }
175
 
 
176
  #bbpress-forums div.bbp-topic-author img.avatar,
177
  #bbpress-forums div.bbp-reply-author img.avatar {
178
  border: none;
@@ -182,24 +177,25 @@ li.bbp-header div.bbp-reply-content span#favorite-toggle {
182
  float: none;
183
  }
184
 
 
185
  #bbpress-forums div.bbp-topic-author a.bbp-author-name,
186
  #bbpress-forums div.bbp-reply-author a.bbp-author-name {
 
187
  word-break: break-word;
 
188
  }
189
 
 
190
  #bbpress-forums div.bbp-topic-author .bbp-author-role,
191
  #bbpress-forums div.bbp-reply-author .bbp-author-role {
192
  font-size: 11px;
193
  font-style: italic;
194
  }
195
 
196
- #bbpress-forums div.bbp-topic-content,
197
- #bbpress-forums div.bbp-reply-content {
198
- margin-right: 140px;
199
- padding: 12px 12px 12px 0;
200
- text-align: right;
201
- }
202
-
203
  #bbpress-forums li.bbp-header .bbp-topic-author,
204
  #bbpress-forums li.bbp-footer .bbp-topic-author,
205
  #bbpress-forums li.bbp-header .bbp-reply-author,
@@ -210,6 +206,10 @@ li.bbp-header div.bbp-reply-content span#favorite-toggle {
210
  width: 120px;
211
  }
212
 
 
 
 
 
213
  #bbpress-forums li.bbp-header .bbp-topic-content,
214
  #bbpress-forums li.bbp-footer .bbp-topic-content,
215
  #bbpress-forums li.bbp-header .bbp-reply-content,
@@ -219,6 +219,7 @@ li.bbp-header div.bbp-reply-content span#favorite-toggle {
219
  text-align: right;
220
  }
221
 
 
222
  div.bbp-topic-header,
223
  div.bbp-reply-header,
224
  li.bbp-body div.hentry {
@@ -227,6 +228,7 @@ li.bbp-body div.hentry {
227
  padding: 8px;
228
  }
229
 
 
230
  div.bbp-topic-header,
231
  div.bbp-reply-header {
232
  border-top: 1px solid #ddd;
@@ -240,6 +242,109 @@ span.bbp-author-ip {
240
  color: #aaa;
241
  }
242
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
243
  /* =Breadcrumb and Tags
244
  -------------------------------------------------------------- */
245
 
@@ -257,7 +362,22 @@ div.bbp-topic-tags {
257
  margin-bottom: 10px
258
  }
259
 
260
- div.bbp-topic-tags {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  float: left;
262
  }
263
 
@@ -286,6 +406,7 @@ td.bbp-topic-counts {
286
  width: 50%;
287
  }
288
 
 
289
  .bbp-topic-header a.bbp-topic-permalink,
290
  .bbp-reply-header a.bbp-reply-permalink {
291
  float: left;
@@ -346,8 +467,10 @@ td.bbp-topic-counts {
346
  background-color: #fdd;
347
  }
348
 
 
349
  #bbpress-forums p.bbp-topic-meta {
350
  margin: 5px 0 5px;
 
351
  font-size: 11px;
352
  }
353
 
@@ -360,10 +483,37 @@ td.bbp-topic-counts {
360
 
361
  .bbp-pagination-count {
362
  float: right;
 
363
  }
 
364
  .bbp-pagination-links {
365
  float: left;
366
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
367
  .bbp-pagination {
368
  float: right;
369
  width: 100%;
@@ -383,6 +533,7 @@ td.bbp-topic-counts {
383
  text-decoration: none;
384
  }
385
 
 
386
  /* =Forms
387
  -------------------------------------------------------------- */
388
 
@@ -516,9 +667,8 @@ p.form-allowed-tags {
516
  #bbpress-forums div.bbp-the-content-wrapper input {
517
  font-size: 12px;
518
  padding: 5px;
519
- margin: 3px 0 0;
520
  line-height: 1em;
521
- margin: 0;
522
  }
523
 
524
  #bbpress-forums div.bbp-the-content-wrapper div.quicktags-toolbar {
@@ -685,10 +835,11 @@ div.bbp-template-notice a {
685
 
686
  /* =Revisions
687
  -------------------------------------------------------------- */
688
- #bbpress-forums .bbp-topic-revision-log,
689
- #bbpress-forums .bbp-reply-revision-log {
 
 
690
  border-top: 1px dotted #ddd;
691
- list-style: none;
692
  width: 100%;
693
  margin: 0;
694
  padding: 8px 0 0 0;
@@ -696,6 +847,12 @@ div.bbp-template-notice a {
696
  color: #aaa;
697
  }
698
 
 
 
 
 
 
 
699
  /* =Widgets
700
  -------------------------------------------------------------- */
701
 
@@ -798,6 +955,10 @@ fieldset div.avatar {
798
  width: 100%;
799
  }
800
 
 
 
 
 
801
  #bbpress-forums #bbp-user-wrapper h2.entry-title {
802
  font-size: 1.4em;
803
  margin: 0;
34
  height: auto;
35
  }
36
 
37
+ #bbpress-forums div.bbp-forum-header,
38
  #bbpress-forums div.bbp-topic-header,
39
  #bbpress-forums div.bbp-reply-header {
40
  background-color: #f4f4f4;
68
  #bbpress-forums ul.bbp-lead-topic,
69
  #bbpress-forums ul.bbp-topics,
70
  #bbpress-forums ul.bbp-forums,
71
+ #bbpress-forums ul.bbp-replies,
72
+ #bbpress-forums ul.bbp-search-results {
73
  font-size: 12px;
74
  overflow: hidden;
75
  border: 1px solid #eee;
116
  line-height: 1em;
117
  }
118
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  li.bbp-forum-info,
120
  li.bbp-topic-title {
121
  float: right;
152
  float: left;
153
  }
154
 
155
+ #bbpress-forums div.bbp-forum-title h3,
156
+ #bbpress-forums div.bbp-topic-title h3,
157
+ #bbpress-forums div.bbp-reply-title h3 {
158
+ line-height: 1em;
159
+ margin: 8px 0;
160
+ }
161
+
162
+ #bbpress-forums div.bbp-forum-author,
163
  #bbpress-forums div.bbp-topic-author,
164
  #bbpress-forums div.bbp-reply-author {
165
  float: right;
167
  width: 115px;
168
  }
169
 
170
+ #bbpress-forums div.bbp-forum-author img.avatar,
171
  #bbpress-forums div.bbp-topic-author img.avatar,
172
  #bbpress-forums div.bbp-reply-author img.avatar {
173
  border: none;
177
  float: none;
178
  }
179
 
180
+ #bbpress-forums div.bbp-forum-author a.bbp-author-name,
181
  #bbpress-forums div.bbp-topic-author a.bbp-author-name,
182
  #bbpress-forums div.bbp-reply-author a.bbp-author-name {
183
+ margin: 0 12px;
184
  word-break: break-word;
185
+ display: inline-block;
186
  }
187
 
188
+ #bbpress-forums div.bbp-forum-author .bbp-author-role,
189
  #bbpress-forums div.bbp-topic-author .bbp-author-role,
190
  #bbpress-forums div.bbp-reply-author .bbp-author-role {
191
  font-size: 11px;
192
  font-style: italic;
193
  }
194
 
195
+ #bbpress-forums li.bbp-header .bbp-search-author,
196
+ #bbpress-forums li.bbp-footer .bbp-search-author,
197
+ #bbpress-forums li.bbp-header .bbp-forum-author,
198
+ #bbpress-forums li.bbp-footer .bbp-forum-author,
 
 
 
199
  #bbpress-forums li.bbp-header .bbp-topic-author,
200
  #bbpress-forums li.bbp-footer .bbp-topic-author,
201
  #bbpress-forums li.bbp-header .bbp-reply-author,
206
  width: 120px;
207
  }
208
 
209
+ #bbpress-forums li.bbp-header .bbp-search-content,
210
+ #bbpress-forums li.bbp-footer .bbp-search-content,
211
+ #bbpress-forums li.bbp-header .bbp-forum-content,
212
+ #bbpress-forums li.bbp-footer .bbp-forum-content,
213
  #bbpress-forums li.bbp-header .bbp-topic-content,
214
  #bbpress-forums li.bbp-footer .bbp-topic-content,
215
  #bbpress-forums li.bbp-header .bbp-reply-content,
219
  text-align: right;
220
  }
221
 
222
+ div.bbp-forum-header,
223
  div.bbp-topic-header,
224
  div.bbp-reply-header,
225
  li.bbp-body div.hentry {
228
  padding: 8px;
229
  }
230
 
231
+ div.bbp-forum-header,
232
  div.bbp-topic-header,
233
  div.bbp-reply-header {
234
  border-top: 1px solid #ddd;
242
  color: #aaa;
243
  }
244
 
245
+ /* =Topic and reply content
246
+ -------------------------------------------------------------- */
247
+
248
+ #bbpress-forums div.bbp-forum-content,
249
+ #bbpress-forums div.bbp-topic-content,
250
+ #bbpress-forums div.bbp-reply-content {
251
+ margin-right: 130px;
252
+ padding: 12px 0 12px 12px;
253
+ text-align: right;
254
+ }
255
+
256
+ #bbpress-forums div.bbp-topic-content a,
257
+ #bbpress-forums div.bbp-reply-content a {
258
+ background: none;
259
+ border: none;
260
+ display: inline;
261
+ font-weight: normal;
262
+ margin: 0;
263
+ padding: 0;
264
+ }
265
+
266
+ #bbpress-forums div.bbp-topic-content h1,
267
+ #bbpress-forums div.bbp-reply-content h1,
268
+ #bbpress-forums div.bbp-topic-content h2,
269
+ #bbpress-forums div.bbp-reply-content h2,
270
+ #bbpress-forums div.bbp-topic-content h3,
271
+ #bbpress-forums div.bbp-reply-content h3,
272
+ #bbpress-forums div.bbp-topic-content h4,
273
+ #bbpress-forums div.bbp-reply-content h4,
274
+ #bbpress-forums div.bbp-topic-content h5,
275
+ #bbpress-forums div.bbp-reply-content h5,
276
+ #bbpress-forums div.bbp-topic-content h6,
277
+ #bbpress-forums div.bbp-reply-content h6 {
278
+ clear: none;
279
+ line-height: 1em;
280
+ margin: 24px 0;
281
+ padding: 0;
282
+ }
283
+
284
+ #bbpress-forums div.bbp-topic-content img,
285
+ #bbpress-forums div.bbp-reply-content img {
286
+ max-width: 100%;
287
+ }
288
+
289
+ #bbpress-forums div.bbp-topic-content ul,
290
+ #bbpress-forums div.bbp-reply-content ul,
291
+ #bbpress-forums div.bbp-topic-content ol,
292
+ #bbpress-forums div.bbp-reply-content ol {
293
+ margin: 0 15px 15px;
294
+ padding: 0;
295
+ }
296
+
297
+ #bbpress-forums div.bbp-topic-content ul li,
298
+ #bbpress-forums div.bbp-reply-content ul li {
299
+ list-style-type: disc;
300
+ }
301
+
302
+ #bbpress-forums div.bbp-topic-content ol li,
303
+ #bbpress-forums div.bbp-reply-content ol li {
304
+ list-style-type: decimal;
305
+ }
306
+
307
+ #bbpress-forums div.bbp-topic-content ol li li,
308
+ #bbpress-forums div.bbp-reply-content ol li li {
309
+ list-style-type: lower-alpha;
310
+ }
311
+
312
+ #bbpress-forums div.bbp-topic-content ol li li li,
313
+ #bbpress-forums div.bbp-reply-content ol li li li {
314
+ list-style-type: upper-roman;
315
+ }
316
+
317
+ #bbpress-forums div.bbp-topic-content code,
318
+ #bbpress-forums div.bbp-reply-content code,
319
+ #bbpress-forums div.bbp-topic-content pre,
320
+ #bbpress-forums div.bbp-reply-content pre {
321
+ font-family: Inconsolata, Consolas, Monaco, Lucida Console, monospace;
322
+ display: inline;
323
+ background-color: #f9f9f9;
324
+ border: 1px solid #ddd;
325
+ padding: 2px;
326
+ }
327
+
328
+ #bbpress-forums div.bbp-topic-content pre,
329
+ #bbpress-forums div.bbp-reply-content pre {
330
+ display: block;
331
+ line-height: 18px;
332
+ margin: 0 0 24px;
333
+ padding: 5px 10px;
334
+ white-space: pre;
335
+ white-space: pre-wrap;
336
+ word-wrap: break-word;
337
+ }
338
+
339
+ #bbpress-forums div.bbp-topic-content pre code,
340
+ #bbpress-forums div.bbp-reply-content pre code {
341
+ display: block;
342
+ border: none;
343
+ padding: 0;
344
+ margin: 0;
345
+ background-color: transparent;
346
+ }
347
+
348
  /* =Breadcrumb and Tags
349
  -------------------------------------------------------------- */
350
 
362
  margin-bottom: 10px
363
  }
364
 
365
+ #bbpress-forums div.bbp-topic-tags {
366
+ float: left;
367
+ }
368
+
369
+ #bbp-topic-hot-tags {
370
+ clear: both;
371
+ }
372
+
373
+ /* =Search
374
+ -------------------------------------------------------------- */
375
+
376
+ #bbpress-forums #bbp-search-form {
377
+ clear: right;
378
+ }
379
+
380
+ #bbpress-forums div.bbp-search-form {
381
  float: left;
382
  }
383
 
406
  width: 50%;
407
  }
408
 
409
+ .bbp-forum-header a.bbp-forum-permalink,
410
  .bbp-topic-header a.bbp-topic-permalink,
411
  .bbp-reply-header a.bbp-reply-permalink {
412
  float: left;
467
  background-color: #fdd;
468
  }
469
 
470
+ #bbpress-forums .bbp-forum-info .bbp-forum-content,
471
  #bbpress-forums p.bbp-topic-meta {
472
  margin: 5px 0 5px;
473
+ padding: 0;
474
  font-size: 11px;
475
  }
476
 
483
 
484
  .bbp-pagination-count {
485
  float: right;
486
+ border: 1px solid transparent;
487
  }
488
+
489
  .bbp-pagination-links {
490
  float: left;
491
+ list-style: none;
492
+ display: inline;
493
+ }
494
+ .bbp-pagination-links a,
495
+ .bbp-pagination-links span.current {
496
+ display: block;
497
+ float: right;
498
+ padding: 0px 5px;
499
+ margin-right: 5px;
500
+ border: 1px solid #efefef;
501
+ text-decoration: none;
502
+ }
503
+ .bbp-pagination-links a:hover,
504
+ .bbp-pagination-links span.current {
505
+ background: #eee;
506
+ opacity: 0.8;
507
+ border: 1px solid #ddd;
508
+ }
509
+
510
+ .bbp-pagination-links span.dots {
511
+ display: block;
512
+ float: right;
513
+ padding: 1px 4px;
514
+ margin-right: 5px;
515
+ }
516
+
517
  .bbp-pagination {
518
  float: right;
519
  width: 100%;
533
  text-decoration: none;
534
  }
535
 
536
+
537
  /* =Forms
538
  -------------------------------------------------------------- */
539
 
667
  #bbpress-forums div.bbp-the-content-wrapper input {
668
  font-size: 12px;
669
  padding: 5px;
670
+ margin: 0 0 0 2px;
671
  line-height: 1em;
 
672
  }
673
 
674
  #bbpress-forums div.bbp-the-content-wrapper div.quicktags-toolbar {
835
 
836
  /* =Revisions
837
  -------------------------------------------------------------- */
838
+
839
+ #bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log,
840
+ #bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log,
841
+ #bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log {
842
  border-top: 1px dotted #ddd;
 
843
  width: 100%;
844
  margin: 0;
845
  padding: 8px 0 0 0;
847
  color: #aaa;
848
  }
849
 
850
+ #bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log li,
851
+ #bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log li,
852
+ #bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log li {
853
+ list-style-type: none;
854
+ }
855
+
856
  /* =Widgets
857
  -------------------------------------------------------------- */
858
 
955
  width: 100%;
956
  }
957
 
958
+ #bbpress-forums .bbp-user-section {
959
+ overflow: auto;
960
+ }
961
+
962
  #bbpress-forums #bbp-user-wrapper h2.entry-title {
963
  font-size: 1.4em;
964
  margin: 0;
templates/default/css/bbpress-rtl.min.css CHANGED
@@ -1 +1 @@
1
- #bbpress-forums hr{margin:0 0 24px 0}#bbpress-forums{background:transparent;clear:both;margin-bottom:20px;overflow:hidden;font-size:12px}#bbpress-forums div.even,#bbpress-forums ul.even{background-color:#fff}#bbpress-forums div.odd,#bbpress-forums ul.odd{background-color:#fbfbfb}#bbpress-forums div.reply{height:auto}#bbpress-forums div.bbp-topic-header,#bbpress-forums div.bbp-reply-header{background-color:#f4f4f4}#bbpress-forums .status-trash.even,#bbpress-forums .status-spam.even{background-color:#fee}#bbpress-forums .status-trash.odd,#bbpress-forums .status-spam.odd{background-color:#fdd}#bbpress-forums .status-closed,#bbpress-forums .status-closed a{color:#ccc}#bbpress-forums ul{list-style:none;margin:0;padding:0}#bbpress-forums li{margin:0;list-style:none}#bbpress-forums ul.bbp-lead-topic,#bbpress-forums ul.bbp-topics,#bbpress-forums ul.bbp-forums,#bbpress-forums ul.bbp-replies{font-size:12px;overflow:hidden;border:1px solid #eee;margin-bottom:20px;clear:both}#bbpress-forums li.bbp-header,#bbpress-forums li.bbp-body,#bbpress-forums li.bbp-footer{clear:both}#bbpress-forums li.bbp-header,#bbpress-forums li.bbp-footer{background:#f3f3f3;border-top:1px solid #eee;font-weight:bold;padding:8px;text-align:center}#bbpress-forums li.bbp-header{background:#eaeaea}#bbpress-forums li.bbp-header ul{overflow:hidden}#bbpress-forums .bbp-forums-list{margin:0 5px 0 0;padding-right:15px;border-right:1px solid #ddd}#bbpress-forums .bbp-forums-list li{display:inline;font-size:11px}#bbpress-forums li.bbp-footer p{margin:0;line-height:1em}#bbpress-forums .bbp-topic-content img,#bbpress-forums .bbp-reply-content img{max-width:100%}#bbpress-forums .bbp-topic-content ul,#bbpress-forums .bbp-reply-content ul{list-style:square;padding-right:15px}#bbpress-forums .bbp-forum-content p{margin:5px 0 0;font-style:italic}li.bbp-forum-info,li.bbp-topic-title{float:right;text-align:right;width:55%}li.bbp-forum-topic-count,li.bbp-topic-voice-count,li.bbp-forum-reply-count,li.bbp-topic-reply-count{float:right;text-align:center;width:10%}li.bbp-forum-freshness,li.bbp-topic-freshness{text-align:center;float:right;width:22%}#bbpress-forums li.bbp-body ul.forum,#bbpress-forums li.bbp-body ul.topic{border-top:1px solid #eee;overflow:hidden;padding:8px}li.bbp-header div.bbp-topic-content span#subscription-toggle,li.bbp-header div.bbp-topic-content span#favorite-toggle,li.bbp-header div.bbp-reply-content span#subscription-toggle,li.bbp-header div.bbp-reply-content span#favorite-toggle{float:left}#bbpress-forums div.bbp-topic-author,#bbpress-forums div.bbp-reply-author{float:right;text-align:center;width:115px}#bbpress-forums div.bbp-topic-author img.avatar,#bbpress-forums div.bbp-reply-author img.avatar{border:0;max-width:80px;padding:0;margin:12px auto 0 auto;float:none}#bbpress-forums div.bbp-topic-author a.bbp-author-name,#bbpress-forums div.bbp-reply-author a.bbp-author-name{word-wrap:break-word}#bbpress-forums div.bbp-topic-content,#bbpress-forums div.bbp-reply-content{margin-right:140px;padding:12px 12px 12px 0;text-align:right}#bbpress-forums li.bbp-header .bbp-topic-author,#bbpress-forums li.bbp-footer .bbp-topic-author,#bbpress-forums li.bbp-header .bbp-reply-author,#bbpress-forums li.bbp-footer .bbp-reply-author{float:right;padding:0;width:120px}#bbpress-forums li.bbp-header .bbp-topic-content,#bbpress-forums li.bbp-footer .bbp-topic-content,#bbpress-forums li.bbp-header .bbp-reply-content,#bbpress-forums li.bbp-footer .bbp-reply-content{margin-right:140px;padding:0;text-align:right}div.bbp-topic-header,div.bbp-reply-header,li.bbp-body div.hentry{margin-bottom:0;overflow:hidden;padding:8px}div.bbp-topic-header,div.bbp-reply-header{border-top:1px solid #ddd;clear:both}span.bbp-author-ip{font-family:'Helvetica Neue',Arial,Helvetica,'Nimbus Sans L',sans-serif;font-size:11px;font-weight:bold;color:#aaa}div.bbp-breadcrumb{float:right}div.bbp-breadcrumb,div.bbp-topic-tags{font-size:12px}#content div.bbp-breadcrumb p,#content div.bbp-topic-tags p{margin-bottom:10px}div.bbp-topic-tags{float:left}span.bbp-admin-links{float:left;color:#ddd}span.bbp-admin-links a{color:#bbb;font-weight:normal;font-size:10px;text-transform:uppercase;text-decoration:none}fieldset span.bbp-admin-links{float:right}tr td span.bbp-admin-links a:hover{color:#ff4b33}td.bbp-topic-admin-links,td.bbp-topic-counts{width:50%}.bbp-topic-header a.bbp-topic-permalink,.bbp-reply-header a.bbp-reply-permalink{float:left;margin-right:10px;color:#ccc}.bbp-topic-action #favorite-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:bold;font-size:13px}.bbp-topic-action #favorite-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-topic-action #favorite-toggle span.is-favorite a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-topic-action #favorite-toggle span.is-favorite a:hover{color:#c88;border-color:#c88;background-color:#fdd}.bbp-topic-action #subscription-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:bold;font-size:13px}.bbp-topic-action #subscription-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-topic-action #subscription-toggle span.is-subscribed a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-topic-action #subscription-toggle span.is-subscribed a:hover{color:#c88;border-color:#c88;background-color:#fdd}#content p.bbp-topic-meta{margin-bottom:0;font-size:11px}#content p.bbp-topic-meta span{white-space:nowrap}.bbp-pagination-count{float:right}.bbp-pagination-links{float:left}.bbp-pagination{float:right;width:100%;margin-bottom:20px}.bbp-topic-pagination{display:inline-block;margin-right:5px;margin-bottom:2px}.bbp-topic-pagination a{font-size:10px;line-height:10px;padding:1px 3px;border:1px solid #ddd;text-decoration:none}#content fieldset.bbp-form,#container fieldset.bbp-form,#wrapper fieldset.bbp-form{clear:right}#content fieldset.bbp-form,#container fieldset.bbp-form,#wrapper fieldset.bbp-form{border:1px solid #eee;padding:10px 20px;margin-bottom:10px}#content fieldset.bbp-form legend,#container fieldset.bbp-form legend,#wrapper fieldset.bbp-form legend{padding:5px}#content fieldset.bbp-form label,#container fieldset.bbp-form label,#wrapper fieldset.bbp-form label{margin:0;display:inline-block}#bbp-edit-topic-tag.bbp-form fieldset.bbp-form label,#bbp-login fieldset label,#bbp-register fieldset label,#bbp-lost-pass fieldset label{width:100px}#content fieldset.bbp-form p,#container fieldset.bbp-form p,#wrapper fieldset.bbp-form p,#content fieldset.bbp-form textarea,#container fieldset.bbp-form textarea,#wrapper fieldset.bbp-form textarea,#content fieldset.bbp-form select,#container fieldset.bbp-form select,#wrapper fieldset.bbp-form select,#content fieldset.bbp-form input,#container fieldset.bbp-form input,#wrapper fieldset.bbp-form input{margin:0 0 10px}textarea#bbp_reply_content,textarea#bbp_topic_content,textarea#bbp_forum_content{width:97%;box-sizing:border-box}textarea#bbp_forum_content{height:210px}#content fieldset.bbp-forum-form-attributes,#container fieldset.bbp-forum-form-attributes,#wrapper fieldset.bbp-forum-form-attributes{width:200px;float:left;clear:none;margin-right:25px}#bbpress-forums fieldset select#bbp_forum_id{max-width:200px}.bbp-topic-form,.bbp-reply-form,.bbp-topic-tag-form{clear:right}body.topic-edit .bbp-topic-form div.avatar img,body.reply-edit .bbp-reply-form div.avatar img,body.single-forum .bbp-topic-form div.avatar img,body.single-reply .bbp-reply-form div.avatar img{margin-left:0;padding:10px;border:1px solid #ddd;line-height:0;background-color:#efefef}body.page .bbp-reply-form code,body.page .bbp-topic-form code,body.single-topic .bbp-reply-form code,body.single-forum .bbp-topic-form code,body.topic-edit .bbp-topic-form code,body.reply-edit .bbp-reply-form code{font-size:10px;background-color:#f0fff8;border:1px solid #ceefe1;display:block;padding:8px;margin-top:5px;width:369px}#merge_tag,#delete_tag{display:inline}div.bbp-submit-wrapper{margin-top:15px;float:left;clear:both}p.form-allowed-tags{width:462px}input[type="password"]{background:#f9f9f9;border:1px solid #ccc;box-shadow:inset 1px 1px 1px rgba(0,0,0,0.1);padding:2px}#content div.bbp-the-content-wrapper{margin-bottom:10px}#content div.bbp-the-content-wrapper textarea.bbp-the-content{width:100%;margin:0;font-size:12px}#content div.bbp-the-content-wrapper table,#content div.bbp-the-content-wrapper tbody,#content div.bbp-the-content-wrapper tr,#content div.bbp-the-content-wrapper td{border:0;padding:0;margin:0;width:auto;line-height:1em}#content div.bbp-the-content-wrapper input{font-size:12px;padding:5px;margin:3px 0 0;line-height:1em;margin:0}#content div.bbp-the-content-wrapper div.quicktags-toolbar{padding:5px;min-height:26px}#content div.bbp-the-content-wrapper td.mceToolbar{padding:4px 4px 8px}#content div.wp-editor-container{margin:0;padding:0;line-height:0}#content div.bbp-the-content-wrapper td.mceStatusbar{line-height:16px}#bbp-your-profile fieldset{margin-top:20px;padding:20px 20px 0 20px}#bbp-your-profile fieldset div{margin-bottom:20px;float:right;width:100%;clear:right}#bbp-your-profile fieldset select{margin-bottom:0}#bbp-your-profile fieldset input,#bbp-your-profile fieldset textarea{margin-bottom:0;width:400px;background:#f9f9f9;border:1px solid #ccc;box-shadow:inset 1px 1px 1px rgba(0,0,0,0.1);padding:2px}#bbp-your-profile fieldset legend{display:none}#content #bbp-your-profile fieldset label,#container #bbp-your-profile fieldset label{float:right;width:150px;padding-left:20px;text-align:left}#bbp-your-profile fieldset span.description{margin:5px 0 0 170px;font-size:12px;font-style:italic;float:right;clear:right;width:383px;padding:5px 10px;border:#cee1ef 1px solid;background-color:#f0f8ff}#content #bbp-your-profile fieldset fieldset,#container #bbp-your-profile fieldset fieldset{margin:0;width:260px;border:0;padding:0;clear:none;float:none}#bbp-your-profile fieldset fieldset span.description{margin-right:0;margin-bottom:20px}#bbp-your-profile fieldset.submit button{float:left}div.bbp-template-notice{border-width:1px;border-style:solid;padding:0 .6em;margin:5px 0 15px;border-radius:3px;background-color:#ffffe0;border-color:#e6db55;color:#000;clear:both}div.bbp-template-notice a{color:#555;text-decoration:none}div.bbp-template-notice a:hover{color:#000}div.bbp-template-notice.info{border:#cee1ef 1px solid;background-color:#f0f8ff}div.bbp-template-notice.important{border:#e6db55 1px solid;background-color:#fffbcc}div.bbp-template-notice.error,div.bbp-template-notice.warning{background-color:#ffebe8;border-color:#c00}div.bbp-template-notice.error a,div.bbp-template-notice.warning a{color:#c00}div.bbp-template-notice p{margin:.5em 0 6px 0!important;padding:2px;font-size:12px;line-height:140%}.bbp-topics-front ul.super-sticky,.bbp-topics ul.super-sticky,.bbp-topics ul.sticky,.bbp-forum-content ul.sticky{background-color:#ffffe0!important;font-size:1.1em}#content .bbp-topic-revision-log,#content .bbp-reply-revision-log,#main .bbp-topic-revision-log,#main .bbp-reply-revision-log,#container .bbp-topic-revision-log,#container .bbp-reply-revision-log{border-top:1px dotted #ddd;list-style:none;width:100%;margin:0;padding:8px 0 0 0;font-size:11px;color:#aaa}.bbp-login-form fieldset legend{display:none}.bbp-login-form .bbp-username input,.bbp-login-form .bbp-email input,.bbp-login-form .bbp-password input{padding:5px}.bbp-login-form .bbp-username label,.bbp-login-form .bbp-password label{width:70px;display:inline-block}.bbp-login-form .bbp-username,.bbp-login-form .bbp-password,.bbp-login-form .bbp-remember-me,.bbp-login-form .bbp-submit-wrapper{margin-top:10px}.bbp-login-form .bbp-submit-wrapper{text-align:left}.bbp-login-form .bbp-login-links a{float:right;clear:right}.bbp-logged-in img.avatar{float:right;margin-left:15px}.bbp-logged-in h4{font-weight:bold;font-size:1.3em;clear:none;margin-bottom:10px}#bbpress-forums p.bbp-topic-meta img.avatar,#bbpress-forums ul.bbp-reply-revision-log img.avatar,#bbpress-forums ul.bbp-topic-revision-log img.avatar,#bbpress-forums div.bbp-template-notice img.avatar,#bbpress-forums .widget_display_topics img.avatar,#bbpress-forums .widget_display_replies img.avatar,#bbpress-forums p.bbp-topic-meta img.avatar{float:none;margin-bottom:-7px;border:3px double #ddd}fieldset div.avatar{float:left}.activity-list li.bbp_topic_create .activity-content .activity-inner,.activity-list li.bbp_reply_create .activity-content .activity-inner{border-right:2px solid #eaeaea;margin-right:5px;padding-right:10px}#bbpress-forums h1{clear:none;font-size:1.8em;line-height:1em;padding-bottom:10px}#bbpress-forums h2.entry-title{font-size:1.4em;margin-bottom:0;padding-bottom:10px;padding-top:0}#bbpress-forums #bbp-single-user-details{display:inline-block;margin:0;width:150px;vertical-align:top;overflow:hidden}#bbpress-forums #bbp-single-user-details #bbp-user-avatar{margin:0;width:150px}#bbpress-forums #bbp-single-user-details #bbp-user-avatar img.avatar{border:0;height:150px;padding:0;margin:0 0 20px 0;width:150px}#bbpress-forums #bbp-single-user-details #bbp-user-description{float:none;margin:0 180px 0 0}#bbpress-forums #bbp-single-user-details #bbp-user-navigation{float:none;margin:0}#bbpress-forums #bbp-single-user-details #bbp-user-navigation li{margin:0}#bbpress-forums #bbp-single-user-details #bbp-user-navigation a{padding:5px 8px;display:block;border:1px solid transparent;text-decoration:none;text-align:right}#bbpress-forums #bbp-single-user-details #bbp-user-navigation li.current a{background:#eee;opacity:.8}#bbpress-forums #bbp-user-body{display:inline-block;vertical-align:top;margin:0 30px 0 0;width:80%;float:left;text-align:right}body.my-account #bbpress-forums{border-top:0;padding-top:0;margin-bottom:0}body.my-account #bbpress-forums,body.my-account #bbp-author-subscriptions,body.my-account #bbp-author-favorites,body.my-account #bbp-author-topics-started{border-top:0;padding-top:0;margin-bottom:0}#bbpress-forums dl.bbp-user-capabilities{display:inline-block;vertical-align:top}#bbpress-forums dl.bbp-user-capabilities dt{margin:0 0 10px;text-transform:capitalize}#bbpress-forums dl.bbp-user-capabilities dd{margin:0;padding:0}#bbpress-forums div.row-actions{font-size:11px;visibility:hidden}#bbpress-forums li:hover>div.row-actions{visibility:visible}
1
+ #bbpress-forums hr{margin:0 0 24px 0}#bbpress-forums{background:transparent;clear:both;margin-bottom:20px;overflow:hidden;font-size:12px}#bbpress-forums div.even,#bbpress-forums ul.even{background-color:#fff}#bbpress-forums div.odd,#bbpress-forums ul.odd{background-color:#fbfbfb}#bbpress-forums div.reply{height:auto}#bbpress-forums div.bbp-forum-header,#bbpress-forums div.bbp-topic-header,#bbpress-forums div.bbp-reply-header{background-color:#f4f4f4}#bbpress-forums .status-trash.even,#bbpress-forums .status-spam.even{background-color:#fee}#bbpress-forums .status-trash.odd,#bbpress-forums .status-spam.odd{background-color:#fdd}#bbpress-forums .status-closed,#bbpress-forums .status-closed a{color:#ccc}#bbpress-forums ul{list-style:none;margin:0;padding:0}#bbpress-forums li{margin:0;list-style:none}#bbpress-forums ul.bbp-lead-topic,#bbpress-forums ul.bbp-topics,#bbpress-forums ul.bbp-forums,#bbpress-forums ul.bbp-replies,#bbpress-forums ul.bbp-search-results{font-size:12px;overflow:hidden;border:1px solid #eee;margin-bottom:20px;clear:both}#bbpress-forums li.bbp-header,#bbpress-forums li.bbp-body,#bbpress-forums li.bbp-footer{clear:both}#bbpress-forums li.bbp-header,#bbpress-forums li.bbp-footer{background:#f3f3f3;border-top:1px solid #eee;font-weight:bold;padding:8px;text-align:center}#bbpress-forums li.bbp-header{background:#eaeaea}#bbpress-forums li.bbp-header ul{overflow:hidden}#bbpress-forums .bbp-forums-list{margin:0 5px 0 0;padding-right:15px;border-right:1px solid #ddd}#bbpress-forums .bbp-forums-list li{display:inline;font-size:11px}#bbpress-forums li.bbp-footer p{margin:0;line-height:1em}li.bbp-forum-info,li.bbp-topic-title{float:right;text-align:right;width:55%}li.bbp-forum-topic-count,li.bbp-topic-voice-count,li.bbp-forum-reply-count,li.bbp-topic-reply-count{float:right;text-align:center;width:10%}li.bbp-forum-freshness,li.bbp-topic-freshness{text-align:center;float:right;width:22%}#bbpress-forums li.bbp-body ul.forum,#bbpress-forums li.bbp-body ul.topic{border-top:1px solid #eee;overflow:hidden;padding:8px}li.bbp-header div.bbp-topic-content span#subscription-toggle,li.bbp-header div.bbp-topic-content span#favorite-toggle,li.bbp-header div.bbp-reply-content span#subscription-toggle,li.bbp-header div.bbp-reply-content span#favorite-toggle{float:left}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-topic-title h3,#bbpress-forums div.bbp-reply-title h3{line-height:1em;margin:8px 0}#bbpress-forums div.bbp-forum-author,#bbpress-forums div.bbp-topic-author,#bbpress-forums div.bbp-reply-author{float:right;text-align:center;width:115px}#bbpress-forums div.bbp-forum-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar,#bbpress-forums div.bbp-reply-author img.avatar{border:0;max-width:80px;padding:0;margin:12px auto 0 auto;float:none}#bbpress-forums div.bbp-forum-author a.bbp-author-name,#bbpress-forums div.bbp-topic-author a.bbp-author-name,#bbpress-forums div.bbp-reply-author a.bbp-author-name{margin:0 12px;word-break:break-word;display:inline-block}#bbpress-forums div.bbp-forum-author .bbp-author-role,#bbpress-forums div.bbp-topic-author .bbp-author-role,#bbpress-forums div.bbp-reply-author .bbp-author-role{font-size:11px;font-style:italic}#bbpress-forums li.bbp-header .bbp-search-author,#bbpress-forums li.bbp-footer .bbp-search-author,#bbpress-forums li.bbp-header .bbp-forum-author,#bbpress-forums li.bbp-footer .bbp-forum-author,#bbpress-forums li.bbp-header .bbp-topic-author,#bbpress-forums li.bbp-footer .bbp-topic-author,#bbpress-forums li.bbp-header .bbp-reply-author,#bbpress-forums li.bbp-footer .bbp-reply-author{float:right;margin:0;padding:0;width:120px}#bbpress-forums li.bbp-header .bbp-search-content,#bbpress-forums li.bbp-footer .bbp-search-content,#bbpress-forums li.bbp-header .bbp-forum-content,#bbpress-forums li.bbp-footer .bbp-forum-content,#bbpress-forums li.bbp-header .bbp-topic-content,#bbpress-forums li.bbp-footer .bbp-topic-content,#bbpress-forums li.bbp-header .bbp-reply-content,#bbpress-forums li.bbp-footer .bbp-reply-content{margin-right:140px;padding:0;text-align:right}div.bbp-forum-header,div.bbp-topic-header,div.bbp-reply-header,li.bbp-body div.hentry{margin-bottom:0;overflow:hidden;padding:8px}div.bbp-forum-header,div.bbp-topic-header,div.bbp-reply-header{border-top:1px solid #ddd;clear:both}span.bbp-author-ip{font-family:'Helvetica Neue',Arial,Helvetica,'Nimbus Sans L',sans-serif;font-size:11px;font-weight:bold;color:#aaa}#bbpress-forums div.bbp-forum-content,#bbpress-forums div.bbp-topic-content,#bbpress-forums div.bbp-reply-content{margin-right:130px;padding:12px 0 12px 12px;text-align:right}#bbpress-forums div.bbp-topic-content a,#bbpress-forums div.bbp-reply-content a{background:0;border:0;display:inline;font-weight:normal;margin:0;padding:0}#bbpress-forums div.bbp-topic-content h1,#bbpress-forums div.bbp-reply-content h1,#bbpress-forums div.bbp-topic-content h2,#bbpress-forums div.bbp-reply-content h2,#bbpress-forums div.bbp-topic-content h3,#bbpress-forums div.bbp-reply-content h3,#bbpress-forums div.bbp-topic-content h4,#bbpress-forums div.bbp-reply-content h4,#bbpress-forums div.bbp-topic-content h5,#bbpress-forums div.bbp-reply-content h5,#bbpress-forums div.bbp-topic-content h6,#bbpress-forums div.bbp-reply-content h6{clear:none;line-height:1em;margin:24px 0;padding:0}#bbpress-forums div.bbp-topic-content img,#bbpress-forums div.bbp-reply-content img{max-width:100%}#bbpress-forums div.bbp-topic-content ul,#bbpress-forums div.bbp-reply-content ul,#bbpress-forums div.bbp-topic-content ol,#bbpress-forums div.bbp-reply-content ol{margin:0 15px 15px;padding:0}#bbpress-forums div.bbp-topic-content ul li,#bbpress-forums div.bbp-reply-content ul li{list-style-type:disc}#bbpress-forums div.bbp-topic-content ol li,#bbpress-forums div.bbp-reply-content ol li{list-style-type:decimal}#bbpress-forums div.bbp-topic-content ol li li,#bbpress-forums div.bbp-reply-content ol li li{list-style-type:lower-alpha}#bbpress-forums div.bbp-topic-content ol li li li,#bbpress-forums div.bbp-reply-content ol li li li{list-style-type:upper-roman}#bbpress-forums div.bbp-topic-content code,#bbpress-forums div.bbp-reply-content code,#bbpress-forums div.bbp-topic-content pre,#bbpress-forums div.bbp-reply-content pre{font-family:Inconsolata,Consolas,Monaco,Lucida Console,monospace;display:inline;background-color:#f9f9f9;border:1px solid #ddd;padding:2px}#bbpress-forums div.bbp-topic-content pre,#bbpress-forums div.bbp-reply-content pre{display:block;line-height:18px;margin:0 0 24px;padding:5px 10px;white-space:pre;white-space:pre-wrap;word-wrap:break-word}#bbpress-forums div.bbp-topic-content pre code,#bbpress-forums div.bbp-reply-content pre code{display:block;border:0;padding:0;margin:0;background-color:transparent}div.bbp-breadcrumb{float:right}div.bbp-breadcrumb,div.bbp-topic-tags{font-size:12px}#bbpress-forums div.bbp-breadcrumb p,#bbpress-forums div.bbp-topic-tags p{margin-bottom:10px}#bbpress-forums div.bbp-topic-tags{float:left}#bbp-topic-hot-tags{clear:both}#bbpress-forums #bbp-search-form{clear:right}#bbpress-forums div.bbp-search-form{float:left}span.bbp-admin-links{float:left;color:#ddd}span.bbp-admin-links a{color:#bbb;font-weight:normal;font-size:10px;text-transform:uppercase;text-decoration:none}fieldset span.bbp-admin-links{float:right}tr td span.bbp-admin-links a:hover{color:#ff4b33}td.bbp-topic-admin-links,td.bbp-topic-counts{width:50%}.bbp-forum-header a.bbp-forum-permalink,.bbp-topic-header a.bbp-topic-permalink,.bbp-reply-header a.bbp-reply-permalink{float:left;margin-right:10px;color:#ccc}.bbp-topic-action #favorite-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:bold;font-size:13px}.bbp-topic-action #favorite-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-topic-action #favorite-toggle span.is-favorite a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-topic-action #favorite-toggle span.is-favorite a:hover{color:#c88;border-color:#c88;background-color:#fdd}.bbp-topic-action #subscription-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:bold;font-size:13px}.bbp-topic-action #subscription-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-topic-action #subscription-toggle span.is-subscribed a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-topic-action #subscription-toggle span.is-subscribed a:hover{color:#c88;border-color:#c88;background-color:#fdd}#bbpress-forums .bbp-forum-info .bbp-forum-content,#bbpress-forums p.bbp-topic-meta{margin:5px 0 5px;padding:0;font-size:11px}#bbpress-forums p.bbp-topic-meta span{white-space:nowrap}.bbp-pagination-count{float:right;border:1px solid transparent}.bbp-pagination-links{float:left;list-style:none;display:inline}.bbp-pagination-links a,.bbp-pagination-links span.current{display:block;float:right;padding:0 5px;margin-right:5px;border:1px solid #efefef;text-decoration:none}.bbp-pagination-links a:hover,.bbp-pagination-links span.current{background:#eee;opacity:.8;border:1px solid #ddd}.bbp-pagination-links span.dots{display:block;float:right;padding:1px 4px;margin-right:5px}.bbp-pagination{float:right;width:100%;margin-bottom:15px}.bbp-topic-pagination{display:inline-block;margin-right:5px;margin-bottom:2px}.bbp-topic-pagination a{font-size:10px;line-height:10px;padding:1px 3px;border:1px solid #ddd;text-decoration:none}#bbpress-forums fieldset.bbp-form{clear:right}#bbpress-forums fieldset.bbp-form{border:1px solid #eee;padding:10px 20px;margin-bottom:10px}#bbpress-forums fieldset.bbp-form legend{padding:5px}#bbpress-forums fieldset.bbp-form label{margin:0;display:inline-block}#bbp-edit-topic-tag.bbp-form fieldset.bbp-form label,#bbp-login fieldset label,#bbp-register fieldset label,#bbp-lost-pass fieldset label{width:100px}#bbpress-forums fieldset.bbp-form p,#bbpress-forums fieldset.bbp-form textarea,#bbpress-forums fieldset.bbp-form select,#bbpress-forums fieldset.bbp-form input{margin:0 0 8px}textarea#bbp_reply_content,textarea#bbp_topic_content,textarea#bbp_forum_content{width:97%;box-sizing:border-box}textarea#bbp_forum_content{height:210px}#bbpress-forums fieldset.bbp-forum-form-attributes{width:200px;float:left;clear:none;margin-right:25px}#bbpress-forums fieldset select#bbp_forum_id{max-width:200px}.bbp-topic-form,.bbp-reply-form,.bbp-topic-tag-form{clear:right}body.topic-edit .bbp-topic-form div.avatar img,body.reply-edit .bbp-reply-form div.avatar img,body.single-forum .bbp-topic-form div.avatar img,body.single-reply .bbp-reply-form div.avatar img{margin-left:0;padding:10px;border:1px solid #ddd;line-height:0;background-color:#efefef}body.page .bbp-reply-form code,body.page .bbp-topic-form code,body.single-topic .bbp-reply-form code,body.single-forum .bbp-topic-form code,body.topic-edit .bbp-topic-form code,body.reply-edit .bbp-reply-form code{font-size:10px;background-color:#f0fff8;border:1px solid #ceefe1;display:block;padding:8px;margin-top:5px;width:369px}#merge_tag,#delete_tag{display:inline}div.bbp-submit-wrapper{margin-top:15px;float:left;clear:both}p.form-allowed-tags{width:462px}#bbpress-forums div.bbp-the-content-wrapper{margin-bottom:10px}#bbpress-forums div.bbp-the-content-wrapper textarea.bbp-the-content{width:100%;margin:0;font-size:12px}#bbpress-forums div.bbp-the-content-wrapper table,#bbpress-forums div.bbp-the-content-wrapper tbody,#bbpress-forums div.bbp-the-content-wrapper tr,#bbpress-forums div.bbp-the-content-wrapper td{border:0;padding:0;margin:0;width:auto;line-height:1em}#bbpress-forums div.bbp-the-content-wrapper input{font-size:12px;padding:5px;margin:0 0 0 2px;line-height:1em}#bbpress-forums div.bbp-the-content-wrapper div.quicktags-toolbar{padding:5px;min-height:26px}#bbpress-forums div.bbp-the-content-wrapper td.mceToolbar{padding:4px 4px 8px}#bbpress-forums div.wp-editor-container{margin:0;padding:0;line-height:0}#bbpress-forums div.bbp-the-content-wrapper td.mceStatusbar{line-height:16px}#bbpress-forums #bbp-your-profile fieldset{padding:20px 20px 0 20px}#bbpress-forums #bbp-your-profile fieldset div{margin-bottom:20px;float:right;width:100%;clear:right}#bbpress-forums #bbp-your-profile fieldset select{margin-bottom:0}#bbpress-forums #bbp-your-profile fieldset input,#bbpress-forums #bbp-your-profile fieldset textarea{margin-bottom:0;width:60%;background:#f9f9f9;border:1px solid #ddd;box-shadow:none;padding:5px 8px;border-radius:0}#bbpress-forums #bbp-your-profile fieldset input:focus,#bbpress-forums #bbp-your-profile fieldset textarea:focus{border:1px solid #ccc;box-shadow:inset 1px 1px 1px rgba(0,0,0,0.1);outline-color:rgba(240,255,240,0.1)}#bbpress-forums #bbp-your-profile fieldset.bbp-form input.checkbox{width:auto}#bbpress-forums #bbp-your-profile fieldset legend{display:none}#bbpress-forums #bbp-your-profile fieldset label[for]{float:right;width:20%;padding:5px 5px 5px 20px;text-align:left;cursor:pointer}#bbpress-forums #bbp-your-profile fieldset dl label[for]{text-align:right;width:60%}#bbpress-forums #bbp-your-profile fieldset span.description{margin:5px 0 0 20%;font-size:12px;font-style:italic;float:right;clear:right;width:60%;padding:5px 8px;border:#cee1ef 1px solid;background-color:#f0f8ff}#bbpress-forums #bbp-your-profile fieldset fieldset{margin:0;border:0;padding:0;clear:none;float:none}#bbpress-forums #bbp-your-profile fieldset fieldset.password{width:60%;display:inline}#bbpress-forums #bbp-your-profile fieldset fieldset.password input,#bbpress-forums #bbp-your-profile fieldset fieldset.password span{width:100%}#bbpress-forums #bbp-your-profile fieldset fieldset.capabilities dl{margin:0}#bbpress-forums #bbp-your-profile fieldset fieldset.password span.description{margin-right:0;margin-bottom:20px}#bbpress-forums #bbp-your-profile fieldset.submit button{float:left}div.bbp-template-notice,div.indicator-hint{border-width:1px;border-style:solid;padding:0 .6em;margin:5px 0 15px;border-radius:3px;background-color:#ffffe0;border-color:#e6db55;color:#000;clear:both}div.bbp-template-notice a{color:#555;text-decoration:none}div.bbp-template-notice a:hover{color:#000}div.bbp-template-notice.info{border:#cee1ef 1px solid;background-color:#f0f8ff}div.bbp-template-notice.important{border:#e6db55 1px solid;background-color:#fffbcc}div.bbp-template-notice.error,div.bbp-template-notice.warning{background-color:#ffebe8;border-color:#c00}div.bbp-template-notice.error a,div.bbp-template-notice.warning a{color:#c00}div.bbp-template-notice p{margin:.5em 0 6px 0!important;padding:2px;font-size:12px;line-height:140%}.bbp-topics-front ul.super-sticky,.bbp-topics ul.super-sticky,.bbp-topics ul.sticky,.bbp-forum-content ul.sticky{background-color:#ffffe0!important;font-size:1.1em}#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log,#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log,#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log{border-top:1px dotted #ddd;width:100%;margin:0;padding:8px 0 0 0;font-size:11px;color:#aaa}#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log li,#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log li,#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log li{list-style-type:none}.bbp-login-form fieldset legend{display:none}.bbp-login-form .bbp-username input,.bbp-login-form .bbp-email input,.bbp-login-form .bbp-password input{padding:5px}.bbp-login-form label{width:140px;display:inline-block}#sidebar .bbp-login-form label{width:70px}.bbp-login-form .bbp-username,.bbp-login-form .bbp-email,.bbp-login-form .bbp-password,.bbp-login-form .bbp-remember-me,.bbp-login-form .bbp-submit-wrapper{margin-top:10px}.bbp-login-form .bbp-submit-wrapper{text-align:left}.bbp-login-form .bbp-login-links a{float:right;clear:right}.bbp-logged-in img.avatar{float:right;margin:0 0 0 15px}.bbp-logged-in h4{font-weight:bold;font-size:1.3em;clear:none;margin-bottom:10px}#bbpress-forums p.bbp-topic-meta img.avatar,#bbpress-forums ul.bbp-reply-revision-log img.avatar,#bbpress-forums ul.bbp-topic-revision-log img.avatar,#bbpress-forums div.bbp-template-notice img.avatar,#bbpress-forums .widget_display_topics img.avatar,#bbpress-forums .widget_display_replies img.avatar,#bbpress-forums p.bbp-topic-meta img.avatar{float:none;margin-bottom:-7px;border:3px double #ddd}fieldset div.avatar{float:left}.activity-list li.bbp_topic_create .activity-content .activity-inner,.activity-list li.bbp_reply_create .activity-content .activity-inner{border-right:2px solid #eaeaea;margin-right:5px;padding-right:10px}#bbpress-forums h1{clear:none;font-size:1.8em;line-height:1em;padding-bottom:10px}#bbpress-forums #bbp-user-wrapper{float:right;width:100%}#bbpress-forums .bbp-user-section{overflow:auto}#bbpress-forums #bbp-user-wrapper h2.entry-title{font-size:1.4em;margin:0;padding-bottom:10px;padding-top:0;clear:none}#bbpress-forums #bbp-user-wrapper ul.bbp-lead-topic,#bbpress-forums #bbp-user-wrapper ul.bbp-topics,#bbpress-forums #bbp-user-wrapper ul.bbp-forums,#bbpress-forums #bbp-user-wrapper ul.bbp-replies,#bbpress-forums #bbp-user-wrapper fieldset.bbp-form{clear:none}#bbpress-forums #bbp-single-user-details{margin:0;width:150px;float:right;overflow:hidden}#bbpress-forums #bbp-single-user-details #bbp-user-avatar{margin:0;width:150px}#bbpress-forums #bbp-single-user-details #bbp-user-avatar img.avatar{border:0;height:150px;padding:0;margin:0 0 20px 0;width:150px}#bbpress-forums #bbp-single-user-details #bbp-user-description{float:none;margin-right:180px}#bbpress-forums #bbp-single-user-details #bbp-user-navigation{float:none;margin:0}#bbpress-forums #bbp-single-user-details #bbp-user-navigation li{margin:0}#bbpress-forums #bbp-single-user-details #bbp-user-navigation a{padding:5px 8px;display:block;border:1px solid transparent;text-decoration:none}#bbpress-forums #bbp-single-user-details #bbp-user-navigation li.current a{background:#eee;opacity:.8}#bbpress-forums #bbp-user-body{margin-right:180px}body.my-account #bbpress-forums{border-top:0;padding-top:0;margin-bottom:0}#bbpress-forums dl.bbp-user-capabilities{display:inline-block;vertical-align:top}#bbpress-forums dl.bbp-user-capabilities dt{margin:0 0 10px;text-transform:capitalize}#bbpress-forums dl.bbp-user-capabilities dd{margin:0;padding:0}#bbpress-forums div.row-actions{font-size:11px;visibility:hidden}#bbpress-forums li:hover>div.row-actions{visibility:visible}
templates/default/css/bbpress.css CHANGED
@@ -34,6 +34,7 @@
34
  height: auto;
35
  }
36
 
 
37
  #bbpress-forums div.bbp-topic-header,
38
  #bbpress-forums div.bbp-reply-header {
39
  background-color: #f4f4f4;
@@ -67,7 +68,8 @@
67
  #bbpress-forums ul.bbp-lead-topic,
68
  #bbpress-forums ul.bbp-topics,
69
  #bbpress-forums ul.bbp-forums,
70
- #bbpress-forums ul.bbp-replies {
 
71
  font-size: 12px;
72
  overflow: hidden;
73
  border: 1px solid #eee;
@@ -114,22 +116,6 @@
114
  line-height: 1em;
115
  }
116
 
117
- #bbpress-forums .bbp-topic-content img,
118
- #bbpress-forums .bbp-reply-content img {
119
- max-width: 100%;
120
- }
121
-
122
- #bbpress-forums .bbp-topic-content ul,
123
- #bbpress-forums .bbp-reply-content ul {
124
- list-style: square;
125
- padding-left: 15px;
126
- }
127
-
128
- #bbpress-forums .bbp-forum-content p {
129
- margin: 5px 0 0;
130
- font-style: italic;
131
- }
132
-
133
  li.bbp-forum-info,
134
  li.bbp-topic-title {
135
  float: left;
@@ -166,6 +152,14 @@ li.bbp-header div.bbp-reply-content span#favorite-toggle {
166
  float: right;
167
  }
168
 
 
 
 
 
 
 
 
 
169
  #bbpress-forums div.bbp-topic-author,
170
  #bbpress-forums div.bbp-reply-author {
171
  float: left;
@@ -173,6 +167,7 @@ li.bbp-header div.bbp-reply-content span#favorite-toggle {
173
  width: 115px;
174
  }
175
 
 
176
  #bbpress-forums div.bbp-topic-author img.avatar,
177
  #bbpress-forums div.bbp-reply-author img.avatar {
178
  border: none;
@@ -182,25 +177,25 @@ li.bbp-header div.bbp-reply-content span#favorite-toggle {
182
  float: none;
183
  }
184
 
 
185
  #bbpress-forums div.bbp-topic-author a.bbp-author-name,
186
  #bbpress-forums div.bbp-reply-author a.bbp-author-name {
187
  margin: 0 12px;
188
  word-break: break-word;
 
189
  }
190
 
 
191
  #bbpress-forums div.bbp-topic-author .bbp-author-role,
192
  #bbpress-forums div.bbp-reply-author .bbp-author-role {
193
  font-size: 11px;
194
  font-style: italic;
195
  }
196
 
197
- #bbpress-forums div.bbp-topic-content,
198
- #bbpress-forums div.bbp-reply-content {
199
- margin-left: 140px;
200
- padding: 12px 12px 12px 0;
201
- text-align: left;
202
- }
203
-
204
  #bbpress-forums li.bbp-header .bbp-topic-author,
205
  #bbpress-forums li.bbp-footer .bbp-topic-author,
206
  #bbpress-forums li.bbp-header .bbp-reply-author,
@@ -211,6 +206,10 @@ li.bbp-header div.bbp-reply-content span#favorite-toggle {
211
  width: 120px;
212
  }
213
 
 
 
 
 
214
  #bbpress-forums li.bbp-header .bbp-topic-content,
215
  #bbpress-forums li.bbp-footer .bbp-topic-content,
216
  #bbpress-forums li.bbp-header .bbp-reply-content,
@@ -220,6 +219,7 @@ li.bbp-header div.bbp-reply-content span#favorite-toggle {
220
  text-align: left;
221
  }
222
 
 
223
  div.bbp-topic-header,
224
  div.bbp-reply-header,
225
  li.bbp-body div.hentry {
@@ -228,6 +228,7 @@ li.bbp-body div.hentry {
228
  padding: 8px;
229
  }
230
 
 
231
  div.bbp-topic-header,
232
  div.bbp-reply-header {
233
  border-top: 1px solid #ddd;
@@ -241,6 +242,109 @@ span.bbp-author-ip {
241
  color: #aaa;
242
  }
243
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
  /* =Breadcrumb and Tags
245
  -------------------------------------------------------------- */
246
 
@@ -258,10 +362,26 @@ div.bbp-topic-tags {
258
  margin-bottom: 10px
259
  }
260
 
261
- div.bbp-topic-tags {
262
  float: right;
263
  }
264
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
  /* =Admin Links
266
  -------------------------------------------------------------- */
267
 
@@ -287,6 +407,7 @@ td.bbp-topic-counts {
287
  width: 50%;
288
  }
289
 
 
290
  .bbp-topic-header a.bbp-topic-permalink,
291
  .bbp-reply-header a.bbp-reply-permalink {
292
  float: right;
@@ -347,8 +468,10 @@ td.bbp-topic-counts {
347
  background-color: #fdd;
348
  }
349
 
 
350
  #bbpress-forums p.bbp-topic-meta {
351
  margin: 5px 0 5px;
 
352
  font-size: 11px;
353
  }
354
 
@@ -361,10 +484,37 @@ td.bbp-topic-counts {
361
 
362
  .bbp-pagination-count {
363
  float: left;
 
364
  }
 
365
  .bbp-pagination-links {
366
  float: right;
367
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
368
  .bbp-pagination {
369
  float: left;
370
  width: 100%;
@@ -384,6 +534,7 @@ td.bbp-topic-counts {
384
  text-decoration: none;
385
  }
386
 
 
387
  /* =Forms
388
  -------------------------------------------------------------- */
389
 
@@ -517,9 +668,8 @@ p.form-allowed-tags {
517
  #bbpress-forums div.bbp-the-content-wrapper input {
518
  font-size: 12px;
519
  padding: 5px;
520
- margin: 3px 0 0;
521
  line-height: 1em;
522
- margin: 0;
523
  }
524
 
525
  #bbpress-forums div.bbp-the-content-wrapper div.quicktags-toolbar {
@@ -686,10 +836,11 @@ div.bbp-template-notice a {
686
 
687
  /* =Revisions
688
  -------------------------------------------------------------- */
689
- #bbpress-forums .bbp-topic-revision-log,
690
- #bbpress-forums .bbp-reply-revision-log {
 
 
691
  border-top: 1px dotted #ddd;
692
- list-style: none;
693
  width: 100%;
694
  margin: 0;
695
  padding: 8px 0 0 0;
@@ -697,6 +848,12 @@ div.bbp-template-notice a {
697
  color: #aaa;
698
  }
699
 
 
 
 
 
 
 
700
  /* =Widgets
701
  -------------------------------------------------------------- */
702
 
@@ -799,6 +956,10 @@ fieldset div.avatar {
799
  width: 100%;
800
  }
801
 
 
 
 
 
802
  #bbpress-forums #bbp-user-wrapper h2.entry-title {
803
  font-size: 1.4em;
804
  margin: 0;
34
  height: auto;
35
  }
36
 
37
+ #bbpress-forums div.bbp-forum-header,
38
  #bbpress-forums div.bbp-topic-header,
39
  #bbpress-forums div.bbp-reply-header {
40
  background-color: #f4f4f4;
68
  #bbpress-forums ul.bbp-lead-topic,
69
  #bbpress-forums ul.bbp-topics,
70
  #bbpress-forums ul.bbp-forums,
71
+ #bbpress-forums ul.bbp-replies,
72
+ #bbpress-forums ul.bbp-search-results {
73
  font-size: 12px;
74
  overflow: hidden;
75
  border: 1px solid #eee;
116
  line-height: 1em;
117
  }
118
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  li.bbp-forum-info,
120
  li.bbp-topic-title {
121
  float: left;
152
  float: right;
153
  }
154
 
155
+ #bbpress-forums div.bbp-forum-title h3,
156
+ #bbpress-forums div.bbp-topic-title h3,
157
+ #bbpress-forums div.bbp-reply-title h3 {
158
+ line-height: 1em;
159
+ margin: 8px 0;
160
+ }
161
+
162
+ #bbpress-forums div.bbp-forum-author,
163
  #bbpress-forums div.bbp-topic-author,
164
  #bbpress-forums div.bbp-reply-author {
165
  float: left;
167
  width: 115px;
168
  }
169
 
170
+ #bbpress-forums div.bbp-forum-author img.avatar,
171
  #bbpress-forums div.bbp-topic-author img.avatar,
172
  #bbpress-forums div.bbp-reply-author img.avatar {
173
  border: none;
177
  float: none;
178
  }
179
 
180
+ #bbpress-forums div.bbp-forum-author a.bbp-author-name,
181
  #bbpress-forums div.bbp-topic-author a.bbp-author-name,
182
  #bbpress-forums div.bbp-reply-author a.bbp-author-name {
183
  margin: 0 12px;
184
  word-break: break-word;
185
+ display: inline-block;
186
  }
187
 
188
+ #bbpress-forums div.bbp-forum-author .bbp-author-role,
189
  #bbpress-forums div.bbp-topic-author .bbp-author-role,
190
  #bbpress-forums div.bbp-reply-author .bbp-author-role {
191
  font-size: 11px;
192
  font-style: italic;
193
  }
194
 
195
+ #bbpress-forums li.bbp-header .bbp-search-author,
196
+ #bbpress-forums li.bbp-footer .bbp-search-author,
197
+ #bbpress-forums li.bbp-header .bbp-forum-author,
198
+ #bbpress-forums li.bbp-footer .bbp-forum-author,
 
 
 
199
  #bbpress-forums li.bbp-header .bbp-topic-author,
200
  #bbpress-forums li.bbp-footer .bbp-topic-author,
201
  #bbpress-forums li.bbp-header .bbp-reply-author,
206
  width: 120px;
207
  }
208
 
209
+ #bbpress-forums li.bbp-header .bbp-search-content,
210
+ #bbpress-forums li.bbp-footer .bbp-search-content,
211
+ #bbpress-forums li.bbp-header .bbp-forum-content,
212
+ #bbpress-forums li.bbp-footer .bbp-forum-content,
213
  #bbpress-forums li.bbp-header .bbp-topic-content,
214
  #bbpress-forums li.bbp-footer .bbp-topic-content,
215
  #bbpress-forums li.bbp-header .bbp-reply-content,
219
  text-align: left;
220
  }
221
 
222
+ div.bbp-forum-header,
223
  div.bbp-topic-header,
224
  div.bbp-reply-header,
225
  li.bbp-body div.hentry {
228
  padding: 8px;
229
  }
230
 
231
+ div.bbp-forum-header,
232
  div.bbp-topic-header,
233
  div.bbp-reply-header {
234
  border-top: 1px solid #ddd;
242
  color: #aaa;
243
  }
244
 
245
+ /* =Topic and reply content
246
+ -------------------------------------------------------------- */
247
+
248
+ #bbpress-forums div.bbp-forum-content,
249
+ #bbpress-forums div.bbp-topic-content,
250
+ #bbpress-forums div.bbp-reply-content {
251
+ margin-left: 130px;
252
+ padding: 12px 12px 12px 0;
253
+ text-align: left;
254
+ }
255
+
256
+ #bbpress-forums div.bbp-topic-content a,
257
+ #bbpress-forums div.bbp-reply-content a {
258
+ background: none;
259
+ border: none;
260
+ display: inline;
261
+ font-weight: normal;
262
+ margin: 0;
263
+ padding: 0;
264
+ }
265
+
266
+ #bbpress-forums div.bbp-topic-content h1,
267
+ #bbpress-forums div.bbp-reply-content h1,
268
+ #bbpress-forums div.bbp-topic-content h2,
269
+ #bbpress-forums div.bbp-reply-content h2,
270
+ #bbpress-forums div.bbp-topic-content h3,
271
+ #bbpress-forums div.bbp-reply-content h3,
272
+ #bbpress-forums div.bbp-topic-content h4,
273
+ #bbpress-forums div.bbp-reply-content h4,
274
+ #bbpress-forums div.bbp-topic-content h5,
275
+ #bbpress-forums div.bbp-reply-content h5,
276
+ #bbpress-forums div.bbp-topic-content h6,
277
+ #bbpress-forums div.bbp-reply-content h6 {
278
+ clear: none;
279
+ line-height: 1em;
280
+ margin: 24px 0;
281
+ padding: 0;
282
+ }
283
+
284
+ #bbpress-forums div.bbp-topic-content img,
285
+ #bbpress-forums div.bbp-reply-content img {
286
+ max-width: 100%;
287
+ }
288
+
289
+ #bbpress-forums div.bbp-topic-content ul,
290
+ #bbpress-forums div.bbp-reply-content ul,
291
+ #bbpress-forums div.bbp-topic-content ol,
292
+ #bbpress-forums div.bbp-reply-content ol {
293
+ margin: 0 15px 15px;
294
+ padding: 0;
295
+ }
296
+
297
+ #bbpress-forums div.bbp-topic-content ul li,
298
+ #bbpress-forums div.bbp-reply-content ul li {
299
+ list-style-type: disc;
300
+ }
301
+
302
+ #bbpress-forums div.bbp-topic-content ol li,
303
+ #bbpress-forums div.bbp-reply-content ol li {
304
+ list-style-type: decimal;
305
+ }
306
+
307
+ #bbpress-forums div.bbp-topic-content ol li li,
308
+ #bbpress-forums div.bbp-reply-content ol li li {
309
+ list-style-type: lower-alpha;
310
+ }
311
+
312
+ #bbpress-forums div.bbp-topic-content ol li li li,
313
+ #bbpress-forums div.bbp-reply-content ol li li li {
314
+ list-style-type: upper-roman;
315
+ }
316
+
317
+ #bbpress-forums div.bbp-topic-content code,
318
+ #bbpress-forums div.bbp-reply-content code,
319
+ #bbpress-forums div.bbp-topic-content pre,
320
+ #bbpress-forums div.bbp-reply-content pre {
321
+ font-family: Inconsolata, Consolas, Monaco, Lucida Console, monospace;
322
+ display: inline;
323
+ background-color: #f9f9f9;
324
+ border: 1px solid #ddd;
325
+ padding: 2px;
326
+ }
327
+
328
+ #bbpress-forums div.bbp-topic-content pre,
329
+ #bbpress-forums div.bbp-reply-content pre {
330
+ display: block;
331
+ line-height: 18px;
332
+ margin: 0 0 24px;
333
+ padding: 5px 10px;
334
+ white-space: pre;
335
+ white-space: pre-wrap;
336
+ word-wrap: break-word;
337
+ }
338
+
339
+ #bbpress-forums div.bbp-topic-content pre code,
340
+ #bbpress-forums div.bbp-reply-content pre code {
341
+ display: block;
342
+ border: none;
343
+ padding: 0;
344
+ margin: 0;
345
+ background-color: transparent;
346
+ }
347
+
348
  /* =Breadcrumb and Tags
349
  -------------------------------------------------------------- */
350
 
362
  margin-bottom: 10px
363
  }
364
 
365
+ #bbpress-forums div.bbp-topic-tags {
366
  float: right;
367
  }
368
 
369
+ #bbp-topic-hot-tags {
370
+ clear: both;
371
+ }
372
+
373
+ /* =Search
374
+ -------------------------------------------------------------- */
375
+
376
+ #bbpress-forums #bbp-search-form {
377
+ clear: left;
378
+ }
379
+
380
+ #bbpress-forums div.bbp-search-form {
381
+ float: right;
382
+ }
383
+
384
+
385
  /* =Admin Links
386
  -------------------------------------------------------------- */
387
 
407
  width: 50%;
408
  }
409
 
410
+ .bbp-forum-header a.bbp-forum-permalink,
411
  .bbp-topic-header a.bbp-topic-permalink,
412
  .bbp-reply-header a.bbp-reply-permalink {
413
  float: right;
468
  background-color: #fdd;
469
  }
470
 
471
+ #bbpress-forums .bbp-forum-info .bbp-forum-content,
472
  #bbpress-forums p.bbp-topic-meta {
473
  margin: 5px 0 5px;
474
+ padding: 0;
475
  font-size: 11px;
476
  }
477
 
484
 
485
  .bbp-pagination-count {
486
  float: left;
487
+ border: 1px solid transparent;
488
  }
489
+
490
  .bbp-pagination-links {
491
  float: right;
492
+ list-style: none;
493
+ display: inline;
494
+ }
495
+ .bbp-pagination-links a,
496
+ .bbp-pagination-links span.current {
497
+ display: block;
498
+ float: left;
499
+ padding: 0px 5px;
500
+ margin-left: 5px;
501
+ border: 1px solid #efefef;
502
+ text-decoration: none;
503
+ }
504
+ .bbp-pagination-links a:hover,
505
+ .bbp-pagination-links span.current {
506
+ background: #eee;
507
+ opacity: 0.8;
508
+ border: 1px solid #ddd;
509
+ }
510
+
511
+ .bbp-pagination-links span.dots {
512
+ display: block;
513
+ float: left;
514
+ padding: 1px 4px;
515
+ margin-left: 5px;
516
+ }
517
+
518
  .bbp-pagination {
519
  float: left;
520
  width: 100%;
534
  text-decoration: none;
535
  }
536
 
537
+
538
  /* =Forms
539
  -------------------------------------------------------------- */
540
 
668
  #bbpress-forums div.bbp-the-content-wrapper input {
669
  font-size: 12px;
670
  padding: 5px;
671
+ margin: 0 2px 0 0;
672
  line-height: 1em;
 
673
  }
674
 
675
  #bbpress-forums div.bbp-the-content-wrapper div.quicktags-toolbar {
836
 
837
  /* =Revisions
838
  -------------------------------------------------------------- */
839
+
840
+ #bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log,
841
+ #bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log,
842
+ #bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log {
843
  border-top: 1px dotted #ddd;
 
844
  width: 100%;
845
  margin: 0;
846
  padding: 8px 0 0 0;
848
  color: #aaa;
849
  }
850
 
851
+ #bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log li,
852
+ #bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log li,
853
+ #bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log li {
854
+ list-style-type: none;
855
+ }
856
+
857
  /* =Widgets
858
  -------------------------------------------------------------- */
859
 
956
  width: 100%;
957
  }
958
 
959
+ #bbpress-forums .bbp-user-section {
960
+ overflow: auto;
961
+ }
962
+
963
  #bbpress-forums #bbp-user-wrapper h2.entry-title {
964
  font-size: 1.4em;
965
  margin: 0;
templates/default/css/bbpress.min.css CHANGED
@@ -1 +1 @@
1
- #bbpress-forums hr{margin:0 0 24px 0}#bbpress-forums{background:transparent;clear:both;margin-bottom:20px;overflow:hidden;font-size:12px}#bbpress-forums div.even,#bbpress-forums ul.even{background-color:#fff}#bbpress-forums div.odd,#bbpress-forums ul.odd{background-color:#fbfbfb}#bbpress-forums div.reply{height:auto}#bbpress-forums div.bbp-topic-header,#bbpress-forums div.bbp-reply-header{background-color:#f4f4f4}#bbpress-forums .status-trash.even,#bbpress-forums .status-spam.even{background-color:#fee}#bbpress-forums .status-trash.odd,#bbpress-forums .status-spam.odd{background-color:#fdd}#bbpress-forums .status-closed,#bbpress-forums .status-closed a{color:#ccc}#bbpress-forums ul{list-style:none;margin:0;padding:0}#bbpress-forums li{margin:0;list-style:none}#bbpress-forums ul.bbp-lead-topic,#bbpress-forums ul.bbp-topics,#bbpress-forums ul.bbp-forums,#bbpress-forums ul.bbp-replies{font-size:12px;overflow:hidden;border:1px solid #eee;margin-bottom:20px;clear:both}#bbpress-forums li.bbp-header,#bbpress-forums li.bbp-body,#bbpress-forums li.bbp-footer{clear:both}#bbpress-forums li.bbp-header,#bbpress-forums li.bbp-footer{background:#f3f3f3;border-top:1px solid #eee;font-weight:bold;padding:8px;text-align:center}#bbpress-forums li.bbp-header{background:#eaeaea}#bbpress-forums li.bbp-header ul{overflow:hidden}#bbpress-forums .bbp-forums-list{margin:0 0 0 5px;padding-left:15px;border-left:1px solid #ddd}#bbpress-forums .bbp-forums-list li{display:inline;font-size:11px}#bbpress-forums li.bbp-footer p{margin:0;line-height:1em}#bbpress-forums .bbp-topic-content img,#bbpress-forums .bbp-reply-content img{max-width:100%}#bbpress-forums .bbp-topic-content ul,#bbpress-forums .bbp-reply-content ul{list-style:square;padding-left:15px}#bbpress-forums .bbp-forum-content p{margin:5px 0 0;font-style:italic}li.bbp-forum-info,li.bbp-topic-title{float:left;text-align:left;width:55%}li.bbp-forum-topic-count,li.bbp-topic-voice-count,li.bbp-forum-reply-count,li.bbp-topic-reply-count{float:left;text-align:center;width:10%}li.bbp-forum-freshness,li.bbp-topic-freshness{text-align:center;float:left;width:22%}#bbpress-forums li.bbp-body ul.forum,#bbpress-forums li.bbp-body ul.topic{border-top:1px solid #eee;overflow:hidden;padding:8px}li.bbp-header div.bbp-topic-content span#subscription-toggle,li.bbp-header div.bbp-topic-content span#favorite-toggle,li.bbp-header div.bbp-reply-content span#subscription-toggle,li.bbp-header div.bbp-reply-content span#favorite-toggle{float:right}#bbpress-forums div.bbp-topic-author,#bbpress-forums div.bbp-reply-author{float:left;text-align:center;width:115px}#bbpress-forums div.bbp-topic-author img.avatar,#bbpress-forums div.bbp-reply-author img.avatar{border:0;max-width:80px;padding:0;margin:12px auto 0 auto;float:none}#bbpress-forums div.bbp-topic-author a.bbp-author-name,#bbpress-forums div.bbp-reply-author a.bbp-author-name{margin:0 12px;word-break:break-word}#bbpress-forums div.bbp-topic-author .bbp-author-role,#bbpress-forums div.bbp-reply-author .bbp-author-role{font-size:11px;font-style:italic}#bbpress-forums div.bbp-topic-content,#bbpress-forums div.bbp-reply-content{margin-left:140px;padding:12px 12px 12px 0;text-align:left}#bbpress-forums li.bbp-header .bbp-topic-author,#bbpress-forums li.bbp-footer .bbp-topic-author,#bbpress-forums li.bbp-header .bbp-reply-author,#bbpress-forums li.bbp-footer .bbp-reply-author{float:left;margin:0;padding:0;width:120px}#bbpress-forums li.bbp-header .bbp-topic-content,#bbpress-forums li.bbp-footer .bbp-topic-content,#bbpress-forums li.bbp-header .bbp-reply-content,#bbpress-forums li.bbp-footer .bbp-reply-content{margin-left:140px;padding:0;text-align:left}div.bbp-topic-header,div.bbp-reply-header,li.bbp-body div.hentry{margin-bottom:0;overflow:hidden;padding:8px}div.bbp-topic-header,div.bbp-reply-header{border-top:1px solid #ddd;clear:both}span.bbp-author-ip{font-family:'Helvetica Neue',Arial,Helvetica,'Nimbus Sans L',sans-serif;font-size:11px;font-weight:bold;color:#aaa}div.bbp-breadcrumb{float:left}div.bbp-breadcrumb,div.bbp-topic-tags{font-size:12px}#bbpress-forums div.bbp-breadcrumb p,#bbpress-forums div.bbp-topic-tags p{margin-bottom:10px}div.bbp-topic-tags{float:right}span.bbp-admin-links{float:right;color:#ddd}span.bbp-admin-links a{color:#bbb;font-weight:normal;font-size:10px;text-transform:uppercase;text-decoration:none}fieldset span.bbp-admin-links{float:left}tr td span.bbp-admin-links a:hover{color:#ff4b33}td.bbp-topic-admin-links,td.bbp-topic-counts{width:50%}.bbp-topic-header a.bbp-topic-permalink,.bbp-reply-header a.bbp-reply-permalink{float:right;margin-left:10px;color:#ccc}.bbp-topic-action #favorite-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:bold;font-size:13px}.bbp-topic-action #favorite-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-topic-action #favorite-toggle span.is-favorite a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-topic-action #favorite-toggle span.is-favorite a:hover{color:#c88;border-color:#c88;background-color:#fdd}.bbp-topic-action #subscription-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:bold;font-size:13px}.bbp-topic-action #subscription-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-topic-action #subscription-toggle span.is-subscribed a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-topic-action #subscription-toggle span.is-subscribed a:hover{color:#c88;border-color:#c88;background-color:#fdd}#bbpress-forums p.bbp-topic-meta{margin:5px 0 5px;font-size:11px}#bbpress-forums p.bbp-topic-meta span{white-space:nowrap}.bbp-pagination-count{float:left}.bbp-pagination-links{float:right}.bbp-pagination{float:left;width:100%;margin-bottom:15px}.bbp-topic-pagination{display:inline-block;margin-left:5px;margin-bottom:2px}.bbp-topic-pagination a{font-size:10px;line-height:10px;padding:1px 3px;border:1px solid #ddd;text-decoration:none}#bbpress-forums fieldset.bbp-form{clear:left}#bbpress-forums fieldset.bbp-form{border:1px solid #eee;padding:10px 20px;margin-bottom:10px}#bbpress-forums fieldset.bbp-form legend{padding:5px}#bbpress-forums fieldset.bbp-form label{margin:0;display:inline-block}#bbp-edit-topic-tag.bbp-form fieldset.bbp-form label,#bbp-login fieldset label,#bbp-register fieldset label,#bbp-lost-pass fieldset label{width:100px}#bbpress-forums fieldset.bbp-form p,#bbpress-forums fieldset.bbp-form textarea,#bbpress-forums fieldset.bbp-form select,#bbpress-forums fieldset.bbp-form input{margin:0 0 8px}textarea#bbp_reply_content,textarea#bbp_topic_content,textarea#bbp_forum_content{width:97%;box-sizing:border-box}textarea#bbp_forum_content{height:210px}#bbpress-forums fieldset.bbp-forum-form-attributes{width:200px;float:right;clear:none;margin-left:25px}#bbpress-forums fieldset select#bbp_forum_id{max-width:200px}.bbp-topic-form,.bbp-reply-form,.bbp-topic-tag-form{clear:left}body.topic-edit .bbp-topic-form div.avatar img,body.reply-edit .bbp-reply-form div.avatar img,body.single-forum .bbp-topic-form div.avatar img,body.single-reply .bbp-reply-form div.avatar img{margin-right:0;padding:10px;border:1px solid #ddd;line-height:0;background-color:#efefef}body.page .bbp-reply-form code,body.page .bbp-topic-form code,body.single-topic .bbp-reply-form code,body.single-forum .bbp-topic-form code,body.topic-edit .bbp-topic-form code,body.reply-edit .bbp-reply-form code{font-size:10px;background-color:#f0fff8;border:1px solid #ceefe1;display:block;padding:8px;margin-top:5px;width:369px}#merge_tag,#delete_tag{display:inline}div.bbp-submit-wrapper{margin-top:15px;float:right;clear:both}p.form-allowed-tags{width:462px}#bbpress-forums div.bbp-the-content-wrapper{margin-bottom:10px}#bbpress-forums div.bbp-the-content-wrapper textarea.bbp-the-content{width:100%;margin:0;font-size:12px}#bbpress-forums div.bbp-the-content-wrapper table,#bbpress-forums div.bbp-the-content-wrapper tbody,#bbpress-forums div.bbp-the-content-wrapper tr,#bbpress-forums div.bbp-the-content-wrapper td{border:0;padding:0;margin:0;width:auto;line-height:1em}#bbpress-forums div.bbp-the-content-wrapper input{font-size:12px;padding:5px;margin:3px 0 0;line-height:1em;margin:0}#bbpress-forums div.bbp-the-content-wrapper div.quicktags-toolbar{padding:5px;min-height:26px}#bbpress-forums div.bbp-the-content-wrapper td.mceToolbar{padding:4px 4px 8px}#bbpress-forums div.wp-editor-container{margin:0;padding:0;line-height:0}#bbpress-forums div.bbp-the-content-wrapper td.mceStatusbar{line-height:16px}#bbpress-forums #bbp-your-profile fieldset{padding:20px 20px 0 20px}#bbpress-forums #bbp-your-profile fieldset div{margin-bottom:20px;float:left;width:100%;clear:left}#bbpress-forums #bbp-your-profile fieldset select{margin-bottom:0}#bbpress-forums #bbp-your-profile fieldset input,#bbpress-forums #bbp-your-profile fieldset textarea{margin-bottom:0;width:300px;background:#f9f9f9;border:1px solid #ddd;box-shadow:none;padding:4px;border-radius:0}#bbpress-forums #bbp-your-profile fieldset input:focus,#bbpress-forums #bbp-your-profile fieldset textarea:focus{border:1px solid #ccc;box-shadow:inset 1px 1px 1px rgba(0,0,0,0.1);outline-color:rgba(240,255,240,0.1)}#bbpress-forums #bbp-your-profile fieldset.bbp-form input.checkbox{width:auto}#bbpress-forums #bbp-your-profile fieldset legend{display:none}#bbpress-forums #bbp-your-profile fieldset label[for]{float:left;width:150px;padding-right:20px;text-align:right;cursor:pointer}#bbpress-forums #bbp-your-profile fieldset dl label[for]{text-align:left;width:160px}#bbpress-forums #bbp-your-profile fieldset span.description{margin:5px 0 0 170px;font-size:12px;font-style:italic;float:left;clear:left;width:288px;padding:5px 10px;border:#cee1ef 1px solid;background-color:#f0f8ff}#bbpress-forums #bbp-your-profile fieldset fieldset{margin:0;border:0;padding:0;clear:none;float:none}#bbpress-forums #bbp-your-profile fieldset fieldset.password{width:260px}#bbpress-forums #bbp-your-profile fieldset fieldset.capabilities dl{margin:0}#bbpress-forums #bbp-your-profile fieldset fieldset.password span.description{margin-left:0;margin-bottom:20px}#bbpress-forums #bbp-your-profile fieldset.submit button{float:right}div.bbp-template-notice,div.indicator-hint{border-width:1px;border-style:solid;padding:0 .6em;margin:5px 0 15px;border-radius:3px;background-color:#ffffe0;border-color:#e6db55;color:#000;clear:both}div.bbp-template-notice a{color:#555;text-decoration:none}div.bbp-template-notice a:hover{color:#000}div.bbp-template-notice.info{border:#cee1ef 1px solid;background-color:#f0f8ff}div.bbp-template-notice.important{border:#e6db55 1px solid;background-color:#fffbcc}div.bbp-template-notice.error,div.bbp-template-notice.warning{background-color:#ffebe8;border-color:#c00}div.bbp-template-notice.error a,div.bbp-template-notice.warning a{color:#c00}div.bbp-template-notice p{margin:.5em 0 6px 0!important;padding:2px;font-size:12px;line-height:140%}.bbp-topics-front ul.super-sticky,.bbp-topics ul.super-sticky,.bbp-topics ul.sticky,.bbp-forum-content ul.sticky{background-color:#ffffe0!important;font-size:1.1em}#bbpress-forums .bbp-topic-revision-log,#bbpress-forums .bbp-reply-revision-log{border-top:1px dotted #ddd;list-style:none;width:100%;margin:0;padding:8px 0 0 0;font-size:11px;color:#aaa}.bbp-login-form fieldset legend{display:none}.bbp-login-form .bbp-username input,.bbp-login-form .bbp-email input,.bbp-login-form .bbp-password input{padding:5px}.bbp-login-form label{width:140px;display:inline-block}#sidebar .bbp-login-form label{width:70px}.bbp-login-form .bbp-username,.bbp-login-form .bbp-email,.bbp-login-form .bbp-password,.bbp-login-form .bbp-remember-me,.bbp-login-form .bbp-submit-wrapper{margin-top:10px}.bbp-login-form .bbp-submit-wrapper{text-align:right}.bbp-login-form .bbp-login-links a{float:left;clear:left}.bbp-logged-in img.avatar{float:left;margin:0 15px 0 0}.bbp-logged-in h4{font-weight:bold;font-size:1.3em;clear:none;margin-bottom:10px}#bbpress-forums p.bbp-topic-meta img.avatar,#bbpress-forums ul.bbp-reply-revision-log img.avatar,#bbpress-forums ul.bbp-topic-revision-log img.avatar,#bbpress-forums div.bbp-template-notice img.avatar,#bbpress-forums .widget_display_topics img.avatar,#bbpress-forums .widget_display_replies img.avatar,#bbpress-forums p.bbp-topic-meta img.avatar{float:none;margin-bottom:-7px;border:3px double #ddd}fieldset div.avatar{float:right}.activity-list li.bbp_topic_create .activity-content .activity-inner,.activity-list li.bbp_reply_create .activity-content .activity-inner{border-left:2px solid #eaeaea;margin-left:5px;padding-left:10px}#bbpress-forums h1{clear:none;font-size:1.8em;line-height:1em;padding-bottom:10px}#bbpress-forums h2.entry-title{font-size:1.4em;margin:0;padding-bottom:10px;padding-top:0}#bbpress-forums #bbp-single-user-details{display:inline-block;margin:0;width:150px;vertical-align:top;overflow:hidden}#bbpress-forums #bbp-single-user-details #bbp-user-avatar{margin:0;width:150px}#bbpress-forums #bbp-single-user-details #bbp-user-avatar img.avatar{border:0;height:150px;padding:0;margin:0 0 20px 0;width:150px}#bbpress-forums #bbp-single-user-details #bbp-user-description{float:none;margin-left:180px}#bbpress-forums #bbp-single-user-details #bbp-user-navigation{float:none;margin:0}#bbpress-forums #bbp-single-user-details #bbp-user-navigation li{margin:0}#bbpress-forums #bbp-single-user-details #bbp-user-navigation a{padding:5px 8px;display:block;border:1px solid transparent;text-decoration:none}#bbpress-forums #bbp-single-user-details #bbp-user-navigation li.current a{background:#eee;opacity:.8}#bbpress-forums #bbp-user-body{display:inline-block;vertical-align:top;margin:0 0 0 30px;width:80%}body.my-account #bbpress-forums{border-top:0;padding-top:0;margin-bottom:0}#bbpress-forums dl.bbp-user-capabilities{display:inline-block;vertical-align:top}#bbpress-forums dl.bbp-user-capabilities dt{margin:0 0 10px;text-transform:capitalize}#bbpress-forums dl.bbp-user-capabilities dd{margin:0;padding:0}#bbpress-forums div.row-actions{font-size:11px;visibility:hidden}#bbpress-forums li:hover>div.row-actions{visibility:visible}
1
+ #bbpress-forums hr{margin:0 0 24px 0}#bbpress-forums{background:transparent;clear:both;margin-bottom:20px;overflow:hidden;font-size:12px}#bbpress-forums div.even,#bbpress-forums ul.even{background-color:#fff}#bbpress-forums div.odd,#bbpress-forums ul.odd{background-color:#fbfbfb}#bbpress-forums div.reply{height:auto}#bbpress-forums div.bbp-forum-header,#bbpress-forums div.bbp-topic-header,#bbpress-forums div.bbp-reply-header{background-color:#f4f4f4}#bbpress-forums .status-trash.even,#bbpress-forums .status-spam.even{background-color:#fee}#bbpress-forums .status-trash.odd,#bbpress-forums .status-spam.odd{background-color:#fdd}#bbpress-forums .status-closed,#bbpress-forums .status-closed a{color:#ccc}#bbpress-forums ul{list-style:none;margin:0;padding:0}#bbpress-forums li{margin:0;list-style:none}#bbpress-forums ul.bbp-lead-topic,#bbpress-forums ul.bbp-topics,#bbpress-forums ul.bbp-forums,#bbpress-forums ul.bbp-replies,#bbpress-forums ul.bbp-search-results{font-size:12px;overflow:hidden;border:1px solid #eee;margin-bottom:20px;clear:both}#bbpress-forums li.bbp-header,#bbpress-forums li.bbp-body,#bbpress-forums li.bbp-footer{clear:both}#bbpress-forums li.bbp-header,#bbpress-forums li.bbp-footer{background:#f3f3f3;border-top:1px solid #eee;font-weight:bold;padding:8px;text-align:center}#bbpress-forums li.bbp-header{background:#eaeaea}#bbpress-forums li.bbp-header ul{overflow:hidden}#bbpress-forums .bbp-forums-list{margin:0 0 0 5px;padding-left:15px;border-left:1px solid #ddd}#bbpress-forums .bbp-forums-list li{display:inline;font-size:11px}#bbpress-forums li.bbp-footer p{margin:0;line-height:1em}li.bbp-forum-info,li.bbp-topic-title{float:left;text-align:left;width:55%}li.bbp-forum-topic-count,li.bbp-topic-voice-count,li.bbp-forum-reply-count,li.bbp-topic-reply-count{float:left;text-align:center;width:10%}li.bbp-forum-freshness,li.bbp-topic-freshness{text-align:center;float:left;width:22%}#bbpress-forums li.bbp-body ul.forum,#bbpress-forums li.bbp-body ul.topic{border-top:1px solid #eee;overflow:hidden;padding:8px}li.bbp-header div.bbp-topic-content span#subscription-toggle,li.bbp-header div.bbp-topic-content span#favorite-toggle,li.bbp-header div.bbp-reply-content span#subscription-toggle,li.bbp-header div.bbp-reply-content span#favorite-toggle{float:right}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-topic-title h3,#bbpress-forums div.bbp-reply-title h3{line-height:1em;margin:8px 0}#bbpress-forums div.bbp-forum-author,#bbpress-forums div.bbp-topic-author,#bbpress-forums div.bbp-reply-author{float:left;text-align:center;width:115px}#bbpress-forums div.bbp-forum-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar,#bbpress-forums div.bbp-reply-author img.avatar{border:0;max-width:80px;padding:0;margin:12px auto 0 auto;float:none}#bbpress-forums div.bbp-forum-author a.bbp-author-name,#bbpress-forums div.bbp-topic-author a.bbp-author-name,#bbpress-forums div.bbp-reply-author a.bbp-author-name{margin:0 12px;word-break:break-word;display:inline-block}#bbpress-forums div.bbp-forum-author .bbp-author-role,#bbpress-forums div.bbp-topic-author .bbp-author-role,#bbpress-forums div.bbp-reply-author .bbp-author-role{font-size:11px;font-style:italic}#bbpress-forums li.bbp-header .bbp-search-author,#bbpress-forums li.bbp-footer .bbp-search-author,#bbpress-forums li.bbp-header .bbp-forum-author,#bbpress-forums li.bbp-footer .bbp-forum-author,#bbpress-forums li.bbp-header .bbp-topic-author,#bbpress-forums li.bbp-footer .bbp-topic-author,#bbpress-forums li.bbp-header .bbp-reply-author,#bbpress-forums li.bbp-footer .bbp-reply-author{float:left;margin:0;padding:0;width:120px}#bbpress-forums li.bbp-header .bbp-search-content,#bbpress-forums li.bbp-footer .bbp-search-content,#bbpress-forums li.bbp-header .bbp-forum-content,#bbpress-forums li.bbp-footer .bbp-forum-content,#bbpress-forums li.bbp-header .bbp-topic-content,#bbpress-forums li.bbp-footer .bbp-topic-content,#bbpress-forums li.bbp-header .bbp-reply-content,#bbpress-forums li.bbp-footer .bbp-reply-content{margin-left:140px;padding:0;text-align:left}div.bbp-forum-header,div.bbp-topic-header,div.bbp-reply-header,li.bbp-body div.hentry{margin-bottom:0;overflow:hidden;padding:8px}div.bbp-forum-header,div.bbp-topic-header,div.bbp-reply-header{border-top:1px solid #ddd;clear:both}span.bbp-author-ip{font-family:'Helvetica Neue',Arial,Helvetica,'Nimbus Sans L',sans-serif;font-size:11px;font-weight:bold;color:#aaa}#bbpress-forums div.bbp-forum-content,#bbpress-forums div.bbp-topic-content,#bbpress-forums div.bbp-reply-content{margin-left:130px;padding:12px 12px 12px 0;text-align:left}#bbpress-forums div.bbp-topic-content a,#bbpress-forums div.bbp-reply-content a{background:0;border:0;display:inline;font-weight:normal;margin:0;padding:0}#bbpress-forums div.bbp-topic-content h1,#bbpress-forums div.bbp-reply-content h1,#bbpress-forums div.bbp-topic-content h2,#bbpress-forums div.bbp-reply-content h2,#bbpress-forums div.bbp-topic-content h3,#bbpress-forums div.bbp-reply-content h3,#bbpress-forums div.bbp-topic-content h4,#bbpress-forums div.bbp-reply-content h4,#bbpress-forums div.bbp-topic-content h5,#bbpress-forums div.bbp-reply-content h5,#bbpress-forums div.bbp-topic-content h6,#bbpress-forums div.bbp-reply-content h6{clear:none;line-height:1em;margin:24px 0;padding:0}#bbpress-forums div.bbp-topic-content img,#bbpress-forums div.bbp-reply-content img{max-width:100%}#bbpress-forums div.bbp-topic-content ul,#bbpress-forums div.bbp-reply-content ul,#bbpress-forums div.bbp-topic-content ol,#bbpress-forums div.bbp-reply-content ol{margin:0 15px 15px;padding:0}#bbpress-forums div.bbp-topic-content ul li,#bbpress-forums div.bbp-reply-content ul li{list-style-type:disc}#bbpress-forums div.bbp-topic-content ol li,#bbpress-forums div.bbp-reply-content ol li{list-style-type:decimal}#bbpress-forums div.bbp-topic-content ol li li,#bbpress-forums div.bbp-reply-content ol li li{list-style-type:lower-alpha}#bbpress-forums div.bbp-topic-content ol li li li,#bbpress-forums div.bbp-reply-content ol li li li{list-style-type:upper-roman}#bbpress-forums div.bbp-topic-content code,#bbpress-forums div.bbp-reply-content code,#bbpress-forums div.bbp-topic-content pre,#bbpress-forums div.bbp-reply-content pre{font-family:Inconsolata,Consolas,Monaco,Lucida Console,monospace;display:inline;background-color:#f9f9f9;border:1px solid #ddd;padding:2px}#bbpress-forums div.bbp-topic-content pre,#bbpress-forums div.bbp-reply-content pre{display:block;line-height:18px;margin:0 0 24px;padding:5px 10px;white-space:pre;white-space:pre-wrap;word-wrap:break-word}#bbpress-forums div.bbp-topic-content pre code,#bbpress-forums div.bbp-reply-content pre code{display:block;border:0;padding:0;margin:0;background-color:transparent}div.bbp-breadcrumb{float:left}div.bbp-breadcrumb,div.bbp-topic-tags{font-size:12px}#bbpress-forums div.bbp-breadcrumb p,#bbpress-forums div.bbp-topic-tags p{margin-bottom:10px}#bbpress-forums div.bbp-topic-tags{float:right}#bbp-topic-hot-tags{clear:both}#bbpress-forums #bbp-search-form{clear:left}#bbpress-forums div.bbp-search-form{float:right}span.bbp-admin-links{float:right;color:#ddd}span.bbp-admin-links a{color:#bbb;font-weight:normal;font-size:10px;text-transform:uppercase;text-decoration:none}fieldset span.bbp-admin-links{float:left}tr td span.bbp-admin-links a:hover{color:#ff4b33}td.bbp-topic-admin-links,td.bbp-topic-counts{width:50%}.bbp-forum-header a.bbp-forum-permalink,.bbp-topic-header a.bbp-topic-permalink,.bbp-reply-header a.bbp-reply-permalink{float:right;margin-left:10px;color:#ccc}.bbp-topic-action #favorite-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:bold;font-size:13px}.bbp-topic-action #favorite-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-topic-action #favorite-toggle span.is-favorite a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-topic-action #favorite-toggle span.is-favorite a:hover{color:#c88;border-color:#c88;background-color:#fdd}.bbp-topic-action #subscription-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:bold;font-size:13px}.bbp-topic-action #subscription-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-topic-action #subscription-toggle span.is-subscribed a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-topic-action #subscription-toggle span.is-subscribed a:hover{color:#c88;border-color:#c88;background-color:#fdd}#bbpress-forums .bbp-forum-info .bbp-forum-content,#bbpress-forums p.bbp-topic-meta{margin:5px 0 5px;padding:0;font-size:11px}#bbpress-forums p.bbp-topic-meta span{white-space:nowrap}.bbp-pagination-count{float:left;border:1px solid transparent}.bbp-pagination-links{float:right;list-style:none;display:inline}.bbp-pagination-links a,.bbp-pagination-links span.current{display:block;float:left;padding:0 5px;margin-left:5px;border:1px solid #efefef;text-decoration:none}.bbp-pagination-links a:hover,.bbp-pagination-links span.current{background:#eee;opacity:.8;border:1px solid #ddd}.bbp-pagination-links span.dots{display:block;float:left;padding:1px 4px;margin-left:5px}.bbp-pagination{float:left;width:100%;margin-bottom:15px}.bbp-topic-pagination{display:inline-block;margin-left:5px;margin-bottom:2px}.bbp-topic-pagination a{font-size:10px;line-height:10px;padding:1px 3px;border:1px solid #ddd;text-decoration:none}#bbpress-forums fieldset.bbp-form{clear:left}#bbpress-forums fieldset.bbp-form{border:1px solid #eee;padding:10px 20px;margin-bottom:10px}#bbpress-forums fieldset.bbp-form legend{padding:5px}#bbpress-forums fieldset.bbp-form label{margin:0;display:inline-block}#bbp-edit-topic-tag.bbp-form fieldset.bbp-form label,#bbp-login fieldset label,#bbp-register fieldset label,#bbp-lost-pass fieldset label{width:100px}#bbpress-forums fieldset.bbp-form p,#bbpress-forums fieldset.bbp-form textarea,#bbpress-forums fieldset.bbp-form select,#bbpress-forums fieldset.bbp-form input{margin:0 0 8px}textarea#bbp_reply_content,textarea#bbp_topic_content,textarea#bbp_forum_content{width:97%;box-sizing:border-box}textarea#bbp_forum_content{height:210px}#bbpress-forums fieldset.bbp-forum-form-attributes{width:200px;float:right;clear:none;margin-left:25px}#bbpress-forums fieldset select#bbp_forum_id{max-width:200px}.bbp-topic-form,.bbp-reply-form,.bbp-topic-tag-form{clear:left}body.topic-edit .bbp-topic-form div.avatar img,body.reply-edit .bbp-reply-form div.avatar img,body.single-forum .bbp-topic-form div.avatar img,body.single-reply .bbp-reply-form div.avatar img{margin-right:0;padding:10px;border:1px solid #ddd;line-height:0;background-color:#efefef}body.page .bbp-reply-form code,body.page .bbp-topic-form code,body.single-topic .bbp-reply-form code,body.single-forum .bbp-topic-form code,body.topic-edit .bbp-topic-form code,body.reply-edit .bbp-reply-form code{font-size:10px;background-color:#f0fff8;border:1px solid #ceefe1;display:block;padding:8px;margin-top:5px;width:369px}#merge_tag,#delete_tag{display:inline}div.bbp-submit-wrapper{margin-top:15px;float:right;clear:both}p.form-allowed-tags{width:462px}#bbpress-forums div.bbp-the-content-wrapper{margin-bottom:10px}#bbpress-forums div.bbp-the-content-wrapper textarea.bbp-the-content{width:100%;margin:0;font-size:12px}#bbpress-forums div.bbp-the-content-wrapper table,#bbpress-forums div.bbp-the-content-wrapper tbody,#bbpress-forums div.bbp-the-content-wrapper tr,#bbpress-forums div.bbp-the-content-wrapper td{border:0;padding:0;margin:0;width:auto;line-height:1em}#bbpress-forums div.bbp-the-content-wrapper input{font-size:12px;padding:5px;margin:0 2px 0 0;line-height:1em}#bbpress-forums div.bbp-the-content-wrapper div.quicktags-toolbar{padding:5px;min-height:26px}#bbpress-forums div.bbp-the-content-wrapper td.mceToolbar{padding:4px 4px 8px}#bbpress-forums div.wp-editor-container{margin:0;padding:0;line-height:0}#bbpress-forums div.bbp-the-content-wrapper td.mceStatusbar{line-height:16px}#bbpress-forums #bbp-your-profile fieldset{padding:20px 20px 0 20px}#bbpress-forums #bbp-your-profile fieldset div{margin-bottom:20px;float:left;width:100%;clear:left}#bbpress-forums #bbp-your-profile fieldset select{margin-bottom:0}#bbpress-forums #bbp-your-profile fieldset input,#bbpress-forums #bbp-your-profile fieldset textarea{margin-bottom:0;width:60%;background:#f9f9f9;border:1px solid #ddd;box-shadow:none;padding:5px 8px;border-radius:0}#bbpress-forums #bbp-your-profile fieldset input:focus,#bbpress-forums #bbp-your-profile fieldset textarea:focus{border:1px solid #ccc;box-shadow:inset 1px 1px 1px rgba(0,0,0,0.1);outline-color:rgba(240,255,240,0.1)}#bbpress-forums #bbp-your-profile fieldset.bbp-form input.checkbox{width:auto}#bbpress-forums #bbp-your-profile fieldset legend{display:none}#bbpress-forums #bbp-your-profile fieldset label[for]{float:left;width:20%;padding:5px 20px 5px 0;text-align:right;cursor:pointer}#bbpress-forums #bbp-your-profile fieldset dl label[for]{text-align:left;width:60%}#bbpress-forums #bbp-your-profile fieldset span.description{margin:5px 0 0 20%;font-size:12px;font-style:italic;float:left;clear:left;width:60%;padding:5px 8px;border:#cee1ef 1px solid;background-color:#f0f8ff}#bbpress-forums #bbp-your-profile fieldset fieldset{margin:0;border:0;padding:0;clear:none;float:none}#bbpress-forums #bbp-your-profile fieldset fieldset.password{width:60%;display:inline}#bbpress-forums #bbp-your-profile fieldset fieldset.password input,#bbpress-forums #bbp-your-profile fieldset fieldset.password span{width:100%}#bbpress-forums #bbp-your-profile fieldset fieldset.capabilities dl{margin:0}#bbpress-forums #bbp-your-profile fieldset fieldset.password span.description{margin-left:0;margin-bottom:20px}#bbpress-forums #bbp-your-profile fieldset.submit button{float:right}div.bbp-template-notice,div.indicator-hint{border-width:1px;border-style:solid;padding:0 .6em;margin:5px 0 15px;border-radius:3px;background-color:#ffffe0;border-color:#e6db55;color:#000;clear:both}div.bbp-template-notice a{color:#555;text-decoration:none}div.bbp-template-notice a:hover{color:#000}div.bbp-template-notice.info{border:#cee1ef 1px solid;background-color:#f0f8ff}div.bbp-template-notice.important{border:#e6db55 1px solid;background-color:#fffbcc}div.bbp-template-notice.error,div.bbp-template-notice.warning{background-color:#ffebe8;border-color:#c00}div.bbp-template-notice.error a,div.bbp-template-notice.warning a{color:#c00}div.bbp-template-notice p{margin:.5em 0 6px 0!important;padding:2px;font-size:12px;line-height:140%}.bbp-topics-front ul.super-sticky,.bbp-topics ul.super-sticky,.bbp-topics ul.sticky,.bbp-forum-content ul.sticky{background-color:#ffffe0!important;font-size:1.1em}#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log,#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log,#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log{border-top:1px dotted #ddd;width:100%;margin:0;padding:8px 0 0 0;font-size:11px;color:#aaa}#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log li,#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log li,#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log li{list-style-type:none}.bbp-login-form fieldset legend{display:none}.bbp-login-form .bbp-username input,.bbp-login-form .bbp-email input,.bbp-login-form .bbp-password input{padding:5px}.bbp-login-form label{width:140px;display:inline-block}#sidebar .bbp-login-form label{width:70px}.bbp-login-form .bbp-username,.bbp-login-form .bbp-email,.bbp-login-form .bbp-password,.bbp-login-form .bbp-remember-me,.bbp-login-form .bbp-submit-wrapper{margin-top:10px}.bbp-login-form .bbp-submit-wrapper{text-align:right}.bbp-login-form .bbp-login-links a{float:left;clear:left}.bbp-logged-in img.avatar{float:left;margin:0 15px 0 0}.bbp-logged-in h4{font-weight:bold;font-size:1.3em;clear:none;margin-bottom:10px}#bbpress-forums p.bbp-topic-meta img.avatar,#bbpress-forums ul.bbp-reply-revision-log img.avatar,#bbpress-forums ul.bbp-topic-revision-log img.avatar,#bbpress-forums div.bbp-template-notice img.avatar,#bbpress-forums .widget_display_topics img.avatar,#bbpress-forums .widget_display_replies img.avatar,#bbpress-forums p.bbp-topic-meta img.avatar{float:none;margin-bottom:-7px;border:3px double #ddd}fieldset div.avatar{float:right}.activity-list li.bbp_topic_create .activity-content .activity-inner,.activity-list li.bbp_reply_create .activity-content .activity-inner{border-left:2px solid #eaeaea;margin-left:5px;padding-left:10px}#bbpress-forums h1{clear:none;font-size:1.8em;line-height:1em;padding-bottom:10px}#bbpress-forums #bbp-user-wrapper{float:left;width:100%}#bbpress-forums .bbp-user-section{overflow:auto}#bbpress-forums #bbp-user-wrapper h2.entry-title{font-size:1.4em;margin:0;padding-bottom:10px;padding-top:0;clear:none}#bbpress-forums #bbp-user-wrapper ul.bbp-lead-topic,#bbpress-forums #bbp-user-wrapper ul.bbp-topics,#bbpress-forums #bbp-user-wrapper ul.bbp-forums,#bbpress-forums #bbp-user-wrapper ul.bbp-replies,#bbpress-forums #bbp-user-wrapper fieldset.bbp-form{clear:none}#bbpress-forums #bbp-single-user-details{margin:0;width:150px;float:left;overflow:hidden}#bbpress-forums #bbp-single-user-details #bbp-user-avatar{margin:0;width:150px}#bbpress-forums #bbp-single-user-details #bbp-user-avatar img.avatar{border:0;height:150px;padding:0;margin:0 0 20px 0;width:150px}#bbpress-forums #bbp-single-user-details #bbp-user-description{float:none;margin-left:180px}#bbpress-forums #bbp-single-user-details #bbp-user-navigation{float:none;margin:0}#bbpress-forums #bbp-single-user-details #bbp-user-navigation li{margin:0}#bbpress-forums #bbp-single-user-details #bbp-user-navigation a{padding:5px 8px;display:block;border:1px solid transparent;text-decoration:none}#bbpress-forums #bbp-single-user-details #bbp-user-navigation li.current a{background:#eee;opacity:.8}#bbpress-forums #bbp-user-body{margin-left:180px}body.my-account #bbpress-forums{border-top:0;padding-top:0;margin-bottom:0}#bbpress-forums dl.bbp-user-capabilities{display:inline-block;vertical-align:top}#bbpress-forums dl.bbp-user-capabilities dt{margin:0 0 10px;text-transform:capitalize}#bbpress-forums dl.bbp-user-capabilities dd{margin:0;padding:0}#bbpress-forums div.row-actions{font-size:11px;visibility:hidden}#bbpress-forums li:hover>div.row-actions{visibility:visible}
templates/default/extras/page-forum-statistics.php CHANGED
@@ -7,10 +7,6 @@
7
  * @subpackage Theme
8
  */
9
 
10
- // Get the statistics and extract them for later use in this template
11
- // @todo - remove variable references
12
- extract( bbp_get_statistics(), EXTR_SKIP );
13
-
14
  get_header(); ?>
15
 
16
  <?php do_action( 'bbp_before_main_content' ); ?>
@@ -27,69 +23,7 @@ get_header(); ?>
27
 
28
  <div id="bbpress-forums">
29
 
30
- <dl role="main">
31
-
32
- <?php do_action( 'bbp_before_statistics' ); ?>
33
-
34
- <dt><?php _e( 'Registered Users', 'bbpress' ); ?></dt>
35
- <dd>
36
- <strong><?php echo $user_count; ?></strong>
37
- </dd>
38
-
39
- <dt><?php _e( 'Forums', 'bbpress' ); ?></dt>
40
- <dd>
41
- <strong><?php echo $forum_count; ?></strong>
42
- </dd>
43
-
44
- <dt><?php _e( 'Topics', 'bbpress' ); ?></dt>
45
- <dd>
46
- <strong><?php echo $topic_count; ?></strong>
47
- </dd>
48
-
49
- <dt><?php _e( 'Replies', 'bbpress' ); ?></dt>
50
- <dd>
51
- <strong><?php echo $reply_count; ?></strong>
52
- </dd>
53
-
54
- <dt><?php _e( 'Topic Tags', 'bbpress' ); ?></dt>
55
- <dd>
56
- <strong><?php echo $topic_tag_count; ?></strong>
57
- </dd>
58
-
59
- <?php if ( !empty( $empty_topic_tag_count ) ) : ?>
60
-
61
- <dt><?php _e( 'Empty Topic Tags', 'bbpress' ); ?></dt>
62
- <dd>
63
- <strong><?php echo $empty_topic_tag_count; ?></strong>
64
- </dd>
65
-
66
- <?php endif; ?>
67
-
68
- <?php if ( !empty( $topic_count_hidden ) ) : ?>
69
-
70
- <dt><?php _e( 'Hidden Topics', 'bbpress' ); ?></dt>
71
- <dd>
72
- <strong>
73
- <abbr title="<?php echo esc_attr( $hidden_topic_title ); ?>"><?php echo $topic_count_hidden; ?></abbr>
74
- </strong>
75
- </dd>
76
-
77
- <?php endif; ?>
78
-
79
- <?php if ( !empty( $reply_count_hidden ) ) : ?>
80
-
81
- <dt><?php _e( 'Hidden Replies', 'bbpress' ); ?></dt>
82
- <dd>
83
- <strong>
84
- <abbr title="<?php echo esc_attr( $hidden_reply_title ); ?>"><?php echo $reply_count_hidden; ?></abbr>
85
- </strong>
86
- </dd>
87
-
88
- <?php endif; ?>
89
-
90
- <?php do_action( 'bbp_after_statistics' ); ?>
91
-
92
- </dl>
93
 
94
  <?php do_action( 'bbp_before_popular_topics' ); ?>
95
 
@@ -120,4 +54,5 @@ get_header(); ?>
120
  <?php do_action( 'bbp_after_main_content' ); ?>
121
 
122
  <?php get_sidebar(); ?>
123
- <?php get_footer(); ?>
 
7
  * @subpackage Theme
8
  */
9
 
 
 
 
 
10
  get_header(); ?>
11
 
12
  <?php do_action( 'bbp_before_main_content' ); ?>
23
 
24
  <div id="bbpress-forums">
25
 
26
+ <?php bbp_get_template_part( 'content', 'statistics' ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
  <?php do_action( 'bbp_before_popular_topics' ); ?>
29
 
54
  <?php do_action( 'bbp_after_main_content' ); ?>
55
 
56
  <?php get_sidebar(); ?>
57
+
58
+ <?php get_footer();
templates/default/extras/single-reply-move.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Move reply page
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Theme
8
+ */
9
+
10
+ get_header(); ?>
11
+
12
+ <?php do_action( 'bbp_before_main_content' ); ?>
13
+
14
+ <?php do_action( 'bbp_template_notices' ); ?>
15
+
16
+ <?php while ( have_posts() ) : the_post(); ?>
17
+
18
+ <div id="bbp-edit-page" class="bbp-edit-page">
19
+ <h1 class="entry-title"><?php the_title(); ?></h1>
20
+ <div class="entry-content">
21
+
22
+ <?php bbp_get_template_part( 'form', 'reply-move' ); ?>
23
+
24
+ </div>
25
+ </div><!-- #bbp-edit-page -->
26
+
27
+ <?php endwhile; ?>
28
+
29
+ <?php do_action( 'bbp_after_main_content' ); ?>
30
+
31
+ <?php get_sidebar(); ?>
32
+ <?php get_footer();
templates/default/js/topic.js CHANGED
@@ -1,87 +1,31 @@
1
- bbpTopicJS = jQuery.extend( {
2
- // User and Topic
3
- currentUserId: '0',
4
- topicId: '0',
5
-
6
- // Favorites
7
- favoritesLink: '',
8
- favoritesActive: 0,
9
- isFav: 0,
10
- favLinkYes: 'favorites',
11
- favLinkNo: '?',
12
- favYes: 'This topic is one of your %favLinkYes% [%favDel%]',
13
- favNo: '%favAdd% (%favLinkNo%)',
14
- favDel: 'x',
15
- favAdd: 'Add this topic to your favorites',
16
-
17
- // Subscriptions
18
- subsLink: '',
19
- subsActive: 0,
20
- isSubscribed: 0,
21
- subsSub: 'Subscribe',
22
- subsUns: 'Unsubscribe'
23
- }, bbpTopicJS );
24
-
25
- // Topic Global
26
- bbpTopicJS.favoritesActive = parseInt( bbpTopicJS.favoritesActive );
27
- bbpTopicJS.isFav = parseInt( bbpTopicJS.isFav );
28
- bbpTopicJS.subsActive = parseInt( bbpTopicJS.subsActive );
29
- bbpTopicJS.isSubscribed = parseInt( bbpTopicJS.isSubscribed );
30
-
31
- // Run it
32
- jQuery(document).ready( function() {
33
-
34
- /** Favorites *************************************************************/
35
-
36
- if ( 1 == bbpTopicJS.favoritesActive ) {
37
- var favoritesToggle = jQuery( '#favorite-toggle' )
38
- .addClass( 'list:favorite' )
39
- .wpList( { alt: '', dimAfter: favLinkSetup } );
40
-
41
- var favoritesToggleSpan = favoritesToggle.children( 'span' )
42
- [bbpTopicJS.isFav ? 'addClass' : 'removeClass' ]( 'is-favorite' );
43
  }
44
 
45
- function favLinkSetup() {
46
- bbpTopicJS.isFav = favoritesToggleSpan.is( '.is-favorite' );
47
- var aLink = "<a href='" + bbpTopicJS.favoritesLink + "'>";
48
- var aDim = "<a href='" + favoritesToggleSpan.find( 'a[class^="dim:"]' ).attr( 'href' ) + "' class='dim:favorite-toggle:" + favoritesToggleSpan.attr( 'id' ) + ":is-favorite'>";
49
- if ( bbpTopicJS.isFav ) {
50
- html = bbpTopicJS.favYes
51
- .replace( /%favLinkYes%/, aLink + bbpTopicJS.favLinkYes + "</a>" )
52
- .replace( /%favDel%/, aDim + bbpTopicJS.favDel + "</a>" );
53
- } else {
54
- html = bbpTopicJS.favNo
55
- .replace( /%favLinkNo%/, aLink + bbpTopicJS.favLinkNo + "</a>" )
56
- .replace( /%favAdd%/, aDim + bbpTopicJS.favAdd + "</a>" );
57
- }
58
- favoritesToggleSpan.html( html );
59
- favoritesToggle.get(0).wpList.process( favoritesToggle );
60
- }
61
 
62
- /** Subscriptions *********************************************************/
63
-
64
- if ( 1 == bbpTopicJS.subsActive ) {
65
- var subscriptionToggle = jQuery( '#subscription-toggle' )
66
- .addClass( 'list:subscription' )
67
- .wpList( { alt: '', dimAfter: subsLinkSetup } );
68
-
69
- var subscriptionToggleSpan = subscriptionToggle.children( 'span' )
70
- [bbpTopicJS.isSubscribed ? 'addClass' : 'removeClass' ]( 'is-subscribed' );
71
- }
72
-
73
- function subsLinkSetup() {
74
- bbpTopicJS.isSubscribed = subscriptionToggleSpan.is( '.is-subscribed' );
75
- var aLink = "<a href='" + bbpTopicJS.subsLink + "'>";
76
- var aDim = "<a href='" + subscriptionToggleSpan.find( 'a[class^="dim:"]' ).attr( 'href' ) + "' class='dim:subscription-toggle:" + subscriptionToggleSpan.attr( 'id' ) + ":is-subscribed'>";
77
-
78
- if ( bbpTopicJS.isSubscribed ) {
79
- html = aDim + bbpTopicJS.subsUns + '</a>';
80
- } else {
81
- html = aDim + bbpTopicJS.subsSub + '</a>';
82
- }
83
-
84
- subscriptionToggleSpan.html( html );
85
- subscriptionToggle.get(0).wpList.process( subscriptionToggle );
86
- }
87
  } );
1
+ jQuery( document ).ready( function ( $ ) {
2
+
3
+ function bbp_ajax_call( action, topic_id, nonce, update_selector ) {
4
+ var $data = {
5
+ action : action,
6
+ id : topic_id,
7
+ nonce : nonce
8
+ };
9
+
10
+ $.post( bbpTopicJS.bbp_ajaxurl, $data, function ( response ) {
11
+ if ( response.success ) {
12
+ $( update_selector ).html( response.content );
13
+ } else {
14
+ if ( !response.content ) {
15
+ response.content = bbpTopicJS.generic_ajax_error;
16
+ }
17
+ alert( response.content );
18
+ }
19
+ } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  }
21
 
22
+ $( '#favorite-toggle' ).on( 'click', 'span a.favorite-toggle', function( e ) {
23
+ e.preventDefault();
24
+ bbp_ajax_call( 'favorite', $( this ).attr( 'data-topic' ), bbpTopicJS.fav_nonce, '#favorite-toggle' );
25
+ } );
 
 
 
 
 
 
 
 
 
 
 
 
26
 
27
+ $( '#subscription-toggle' ).on( 'click', 'span a.subscription-toggle', function( e ) {
28
+ e.preventDefault();
29
+ bbp_ajax_call( 'subscription', $( this ).attr( 'data-topic' ), bbpTopicJS.subs_nonce, '#subscription-toggle' );
30
+ } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  } );
templates/default/js/topic.min.js CHANGED
@@ -1 +1 @@
1
- bbpTopicJS=jQuery.extend({currentUserId:"0",topicId:"0",favoritesLink:"",favoritesActive:0,isFav:0,favLinkYes:"favorites",favLinkNo:"?",favYes:"This topic is one of your %favLinkYes% [%favDel%]",favNo:"%favAdd% (%favLinkNo%)",favDel:"x",favAdd:"Add this topic to your favorites",subsLink:"",subsActive:0,isSubscribed:0,subsSub:"Subscribe",subsUns:"Unsubscribe"},bbpTopicJS);bbpTopicJS.favoritesActive=parseInt(bbpTopicJS.favoritesActive);bbpTopicJS.isFav=parseInt(bbpTopicJS.isFav);bbpTopicJS.subsActive=parseInt(bbpTopicJS.subsActive);bbpTopicJS.isSubscribed=parseInt(bbpTopicJS.isSubscribed);jQuery(document).ready(function(){if(1==bbpTopicJS.favoritesActive){var e=jQuery("#favorite-toggle").addClass("list:favorite").wpList({alt:"",dimAfter:d});var f=e.children("span")[bbpTopicJS.isFav?"addClass":"removeClass"]("is-favorite")}function d(){bbpTopicJS.isFav=f.is(".is-favorite");var g="<a href='"+bbpTopicJS.favoritesLink+"'>";var h="<a href='"+f.find('a[class^="dim:"]').attr("href")+"' class='dim:favorite-toggle:"+f.attr("id")+":is-favorite'>";if(bbpTopicJS.isFav){html=bbpTopicJS.favYes.replace(/%favLinkYes%/,g+bbpTopicJS.favLinkYes+"</a>").replace(/%favDel%/,h+bbpTopicJS.favDel+"</a>")}else{html=bbpTopicJS.favNo.replace(/%favLinkNo%/,g+bbpTopicJS.favLinkNo+"</a>").replace(/%favAdd%/,h+bbpTopicJS.favAdd+"</a>")}f.html(html);e.get(0).wpList.process(e)}if(1==bbpTopicJS.subsActive){var b=jQuery("#subscription-toggle").addClass("list:subscription").wpList({alt:"",dimAfter:c});var a=b.children("span")[bbpTopicJS.isSubscribed?"addClass":"removeClass"]("is-subscribed")}function c(){bbpTopicJS.isSubscribed=a.is(".is-subscribed");var g="<a href='"+bbpTopicJS.subsLink+"'>";var h="<a href='"+a.find('a[class^="dim:"]').attr("href")+"' class='dim:subscription-toggle:"+a.attr("id")+":is-subscribed'>";if(bbpTopicJS.isSubscribed){html=h+bbpTopicJS.subsUns+"</a>"}else{html=h+bbpTopicJS.subsSub+"</a>"}a.html(html);b.get(0).wpList.process(b)}});
1
+ jQuery(document).ready(function(b){function a(g,d,f,c){var e={action:g,id:d,nonce:f};b.post(bbpTopicJS.bbp_ajaxurl,e,function(h){if(h.success){b(c).html(h.content)}else{if(!h.content){h.content=bbpTopicJS.generic_ajax_error}alert(h.content)}})}b("#favorite-toggle").on("click","span a.favorite-toggle",function(c){c.preventDefault();a("favorite",b(this).attr("data-topic"),bbpTopicJS.fav_nonce,"#favorite-toggle")});b("#subscription-toggle").on("click","span a.subscription-toggle",function(c){c.preventDefault();a("subscription",b(this).attr("data-topic"),bbpTopicJS.subs_nonce,"#subscription-toggle")})});