bbPress - Version 2.6-rc-6

Version Description

Download this release

Release Info

Developer johnjamesjacoby
Plugin Icon 128x128 bbPress
Version 2.6-rc-6
Comparing to
See all releases

Code changes from version 2.6-rc-5 to 2.6-rc-6

Files changed (92) hide show
  1. bbpress.php +16 -9
  2. bbpress.pot +1094 -940
  3. includes/admin/actions.php +37 -12
  4. includes/admin/assets/css/admin-rtl.css +68 -54
  5. includes/admin/assets/css/admin-rtl.min.css +1 -1
  6. includes/admin/assets/css/admin.css +68 -54
  7. includes/admin/assets/css/admin.min.css +1 -1
  8. includes/admin/assets/js/converter.js +10 -1
  9. includes/admin/assets/js/converter.min.js +1 -1
  10. includes/admin/classes/class-bbp-admin.php +138 -39
  11. includes/admin/classes/class-bbp-converter-base.php +84 -67
  12. includes/admin/classes/class-bbp-converter-db.php +58 -0
  13. includes/admin/classes/class-bbp-converter.php +60 -12
  14. includes/admin/classes/class-bbp-topic-replies-list-table.php +25 -8
  15. includes/admin/common.php +7 -63
  16. includes/admin/converters/XenForo.php +1 -1
  17. includes/admin/converters/phpBB.php +2 -2
  18. includes/admin/converters/vBulletin.php +1 -1
  19. includes/admin/converters/vBulletin3.php +1 -1
  20. includes/admin/forums.php +95 -47
  21. includes/admin/metaboxes.php +7 -5
  22. includes/admin/replies.php +143 -76
  23. includes/admin/settings.php +59 -58
  24. includes/admin/styles/evergreen/colors-rtl.css +2 -4
  25. includes/admin/styles/evergreen/colors-rtl.min.css +1 -1
  26. includes/admin/styles/evergreen/colors.css +2 -4
  27. includes/admin/styles/evergreen/colors.min.css +1 -1
  28. includes/admin/styles/mint/colors-rtl.css +2 -4
  29. includes/admin/styles/mint/colors-rtl.min.css +1 -1
  30. includes/admin/styles/mint/colors.css +2 -4
  31. includes/admin/styles/mint/colors.min.css +1 -1
  32. includes/admin/tools.php +1 -1
  33. includes/admin/tools/common.php +5 -53
  34. includes/admin/tools/converter.php +48 -27
  35. includes/admin/tools/repair.php +3 -3
  36. includes/admin/tools/reset.php +117 -69
  37. includes/admin/topics.php +173 -97
  38. includes/admin/users.php +16 -4
  39. includes/common/ajax.php +48 -10
  40. includes/common/engagements.php +783 -0
  41. includes/common/formatting.php +5 -5
  42. includes/common/functions.php +421 -207
  43. includes/common/shortcodes.php +2 -2
  44. includes/common/template.php +13 -8
  45. includes/common/widgets.php +35 -31
  46. includes/core/abstraction.php +126 -2
  47. includes/core/actions.php +8 -11
  48. includes/core/capabilities.php +3 -3
  49. includes/core/filters.php +28 -14
  50. includes/core/options.php +105 -94
  51. includes/core/sub-actions.php +35 -0
  52. includes/core/template-functions.php +0 -12
  53. includes/core/theme-compat.php +8 -12
  54. includes/core/update.php +77 -10
  55. includes/extend/akismet.php +3 -5
  56. includes/extend/buddypress/activity.php +7 -5
  57. includes/extend/buddypress/functions.php +28 -26
  58. includes/extend/buddypress/groups.php +33 -30
  59. includes/extend/buddypress/loader.php +28 -16
  60. includes/extend/buddypress/members.php +93 -80
  61. includes/extend/buddypress/notifications.php +13 -12
  62. includes/forums/capabilities.php +24 -4
  63. includes/forums/functions.php +34 -30
  64. includes/forums/template.php +53 -52
  65. includes/replies/capabilities.php +33 -14
  66. includes/replies/functions.php +71 -38
  67. includes/replies/template.php +114 -56
  68. includes/search/template.php +8 -6
  69. includes/topics/capabilities.php +138 -15
  70. includes/topics/functions.php +72 -46
  71. includes/topics/template.php +102 -93
  72. includes/users/capabilities.php +10 -10
  73. includes/users/engagements.php +120 -198
  74. includes/users/functions.php +7 -7
  75. includes/users/options.php +3 -3
  76. includes/users/template.php +87 -76
  77. readme.txt +5 -2
  78. templates/default/bbpress-functions.php +1 -1
  79. templates/default/bbpress/form-forum.php +1 -1
  80. templates/default/bbpress/form-reply-move.php +1 -1
  81. templates/default/bbpress/form-reply.php +2 -2
  82. templates/default/bbpress/form-search.php +1 -1
  83. templates/default/bbpress/form-topic-merge.php +1 -1
  84. templates/default/bbpress/form-topic-split.php +1 -1
  85. templates/default/bbpress/form-topic-tag.php +3 -3
  86. templates/default/bbpress/form-topic.php +2 -2
  87. templates/default/bbpress/form-user-edit.php +1 -1
  88. templates/default/bbpress/form-user-login.php +1 -1
  89. templates/default/css/bbpress-rtl.css +38 -28
  90. templates/default/css/bbpress-rtl.min.css +1 -1
  91. templates/default/css/bbpress.css +38 -28
  92. templates/default/css/bbpress.min.css +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 6705 2017-09-14 22:57:06Z 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 Contributors
19
  * Author URI: https://bbpress.org
20
- * Version: 2.6-rc-5
21
  * Text Domain: bbpress
22
  * Domain Path: /languages/
23
  * License: GPLv2 or later (license.txt)
@@ -30,7 +30,7 @@ if ( ! class_exists( 'bbPress' ) ) :
30
  /**
31
  * Main bbPress Class
32
  *
33
- * "How doth the little busy bee, improve each shining hour..."
34
  *
35
  * @since 2.0.0 bbPress (r2464)
36
  */
@@ -203,7 +203,7 @@ final class bbPress {
203
 
204
  /** Versions **********************************************************/
205
 
206
- $this->version = '2.6-rc-6701';
207
  $this->db_version = '262';
208
 
209
  /** Paths *************************************************************/
@@ -298,6 +298,10 @@ final class bbPress {
298
  $this->extend = new stdClass(); // Plugins add data here
299
  $this->errors = new WP_Error(); // Feedback
300
 
 
 
 
 
301
  /** Deprecated ********************************************************/
302
 
303
  $this->tab_index = apply_filters( 'bbp_default_tab_index', 100 );
@@ -330,6 +334,7 @@ final class bbPress {
330
  // Common
331
  require $this->includes_dir . 'common/ajax.php';
332
  require $this->includes_dir . 'common/classes.php';
 
333
  require $this->includes_dir . 'common/functions.php';
334
  require $this->includes_dir . 'common/formatting.php';
335
  require $this->includes_dir . 'common/locale.php';
@@ -508,7 +513,7 @@ final class bbPress {
508
  'labels' => bbp_get_forum_post_type_labels(),
509
  'rewrite' => bbp_get_forum_post_type_rewrite(),
510
  'supports' => bbp_get_forum_post_type_supports(),
511
- 'description' => __( 'bbPress Forums', 'bbpress' ),
512
  'capabilities' => bbp_get_forum_caps(),
513
  'capability_type' => array( 'forum', 'forums' ),
514
  'menu_position' => 555555,
@@ -534,7 +539,7 @@ final class bbPress {
534
  'labels' => bbp_get_topic_post_type_labels(),
535
  'rewrite' => bbp_get_topic_post_type_rewrite(),
536
  'supports' => bbp_get_topic_post_type_supports(),
537
- 'description' => __( 'bbPress Topics', 'bbpress' ),
538
  'capabilities' => bbp_get_topic_caps(),
539
  'capability_type' => array( 'topic', 'topics' ),
540
  'menu_position' => 555555,
@@ -560,7 +565,7 @@ final class bbPress {
560
  'labels' => bbp_get_reply_post_type_labels(),
561
  'rewrite' => bbp_get_reply_post_type_rewrite(),
562
  'supports' => bbp_get_reply_post_type_supports(),
563
- 'description' => __( 'bbPress Replies', 'bbpress' ),
564
  'capabilities' => bbp_get_reply_caps(),
565
  'capability_type' => array( 'reply', 'replies' ),
566
  'menu_position' => 555555,
@@ -704,7 +709,7 @@ final class bbPress {
704
  // Popular topics
705
  bbp_register_view(
706
  'popular',
707
- __( 'Most popular topics', 'bbpress' ),
708
  apply_filters( 'bbp_register_view_popular', array(
709
  'meta_key' => '_bbp_reply_count',
710
  'meta_type' => 'NUMERIC',
@@ -717,7 +722,7 @@ final class bbPress {
717
  // Topics with no replies
718
  bbp_register_view(
719
  'no-replies',
720
- __( 'Topics with no replies', 'bbpress' ),
721
  apply_filters( 'bbp_register_view_no_replies', array(
722
  'meta_key' => '_bbp_reply_count',
723
  'meta_type' => 'NUMERIC',
@@ -997,6 +1002,8 @@ final class bbPress {
997
  *
998
  * Example: <?php $bbp = bbpress(); ?>
999
  *
 
 
1000
  * @return bbPress The one true bbPress Instance
1001
  */
1002
  function bbpress() {
5
  *
6
  * bbPress is forum software with a twist from the creators of WordPress.
7
  *
8
+ * $Id: bbpress.php 6854 2018-08-10 22:01:46Z 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 Contributors
19
  * Author URI: https://bbpress.org
20
+ * Version: 2.6-rc-6
21
  * Text Domain: bbpress
22
  * Domain Path: /languages/
23
  * License: GPLv2 or later (license.txt)
30
  /**
31
  * Main bbPress Class
32
  *
33
+ * "Word hard. Stay bumble."
34
  *
35
  * @since 2.0.0 bbPress (r2464)
36
  */
203
 
204
  /** Versions **********************************************************/
205
 
206
+ $this->version = '2.6-rc-6838';
207
  $this->db_version = '262';
208
 
209
  /** Paths *************************************************************/
298
  $this->extend = new stdClass(); // Plugins add data here
299
  $this->errors = new WP_Error(); // Feedback
300
 
301
+ /** Engagements *******************************************************/
302
+
303
+ $this->engagements = new BBP_User_Engagements_Meta(); // Meta strategy interface
304
+
305
  /** Deprecated ********************************************************/
306
 
307
  $this->tab_index = apply_filters( 'bbp_default_tab_index', 100 );
334
  // Common
335
  require $this->includes_dir . 'common/ajax.php';
336
  require $this->includes_dir . 'common/classes.php';
337
+ require $this->includes_dir . 'common/engagements.php';
338
  require $this->includes_dir . 'common/functions.php';
339
  require $this->includes_dir . 'common/formatting.php';
340
  require $this->includes_dir . 'common/locale.php';
513
  'labels' => bbp_get_forum_post_type_labels(),
514
  'rewrite' => bbp_get_forum_post_type_rewrite(),
515
  'supports' => bbp_get_forum_post_type_supports(),
516
+ 'description' => esc_html__( 'bbPress Forums', 'bbpress' ),
517
  'capabilities' => bbp_get_forum_caps(),
518
  'capability_type' => array( 'forum', 'forums' ),
519
  'menu_position' => 555555,
539
  'labels' => bbp_get_topic_post_type_labels(),
540
  'rewrite' => bbp_get_topic_post_type_rewrite(),
541
  'supports' => bbp_get_topic_post_type_supports(),
542
+ 'description' => esc_html__( 'bbPress Topics', 'bbpress' ),
543
  'capabilities' => bbp_get_topic_caps(),
544
  'capability_type' => array( 'topic', 'topics' ),
545
  'menu_position' => 555555,
565
  'labels' => bbp_get_reply_post_type_labels(),
566
  'rewrite' => bbp_get_reply_post_type_rewrite(),
567
  'supports' => bbp_get_reply_post_type_supports(),
568
+ 'description' => esc_html__( 'bbPress Replies', 'bbpress' ),
569
  'capabilities' => bbp_get_reply_caps(),
570
  'capability_type' => array( 'reply', 'replies' ),
571
  'menu_position' => 555555,
709
  // Popular topics
710
  bbp_register_view(
711
  'popular',
712
+ esc_html__( 'Most popular topics', 'bbpress' ),
713
  apply_filters( 'bbp_register_view_popular', array(
714
  'meta_key' => '_bbp_reply_count',
715
  'meta_type' => 'NUMERIC',
722
  // Topics with no replies
723
  bbp_register_view(
724
  'no-replies',
725
+ esc_html__( 'Topics with no replies', 'bbpress' ),
726
  apply_filters( 'bbp_register_view_no_replies', array(
727
  'meta_key' => '_bbp_reply_count',
728
  'meta_type' => 'NUMERIC',
1002
  *
1003
  * Example: <?php $bbp = bbpress(); ?>
1004
  *
1005
+ * @since 2.0.0 bbPress (r2464)
1006
+ *
1007
  * @return bbPress The one true bbPress Instance
1008
  */
1009
  function bbpress() {
bbpress.pot CHANGED
@@ -1,66 +1,66 @@
1
- # Copyright (C) 2017 The bbPress Contributors
2
  # This file is distributed under the GPLv2 or later (license.txt).
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: bbPress 2.6-rc-5\n"
6
  "Report-Msgid-Bugs-To: https://bbpress.trac.wordpress.org\n"
7
- "POT-Creation-Date: 2017-09-15 14:01:43+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: 2017-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
- "X-Generator: grunt-wp-i18n1.0.0\n"
15
 
16
  #: bbpress.php:144 bbpress.php:151
17
  msgid "Cheatin&#8217; huh?"
18
  msgstr ""
19
 
20
- #: bbpress.php:511
21
  msgid "bbPress Forums"
22
  msgstr ""
23
 
24
- #: bbpress.php:537
25
  msgid "bbPress Topics"
26
  msgstr ""
27
 
28
- #: bbpress.php:563
29
  msgid "bbPress Replies"
30
  msgstr ""
31
 
32
- #: bbpress.php:707
33
  msgid "Most popular topics"
34
  msgstr ""
35
 
36
- #: bbpress.php:720
37
  msgid "Topics with no replies"
38
  msgstr ""
39
 
40
- #: bbpress.php:753
41
  msgid "bbPress Item Count"
42
  msgstr ""
43
 
44
- #: includes/admin/actions.php:175 includes/admin/forums.php:522
45
  #: includes/admin/settings.php:280 includes/admin/settings.php:301
46
- #: includes/admin/tools/common.php:317 includes/admin/topics.php:831
47
  #: includes/extend/buddypress/activity.php:197
48
- #: includes/extend/buddypress/activity.php:389
49
- #: includes/forums/template.php:2591 includes/topics/template.php:47
50
  #: includes/topics/template.php:48
51
  #: templates/default/bbpress/content-statistics.php:30
52
  #: templates/default/bbpress/loop-forums.php:21
53
  msgid "Topics"
54
  msgstr ""
55
 
56
- #: includes/admin/actions.php:180 includes/admin/actions.php:192
57
- #: includes/admin/forums.php:523 includes/admin/settings.php:288
58
- #: includes/admin/settings.php:309 includes/admin/tools/common.php:320
59
- #: includes/admin/topics.php:387 includes/admin/topics.php:833
60
  #: includes/core/theme-compat.php:694
61
  #: includes/extend/buddypress/activity.php:207
62
- #: includes/extend/buddypress/activity.php:390
63
- #: includes/forums/template.php:2645 includes/replies/template.php:49
64
  #: includes/replies/template.php:50
65
  #: templates/default/bbpress/content-statistics.php:35
66
  #: templates/default/bbpress/loop-forums.php:23
@@ -70,18 +70,18 @@ msgstr ""
70
  msgid "Replies"
71
  msgstr ""
72
 
73
- #: includes/admin/actions.php:187 includes/admin/actions.php:199
74
- #: includes/admin/forums.php:521 includes/admin/metaboxes.php:113
75
  #: includes/admin/metaboxes.php:432 includes/admin/metaboxes.php:496
76
- #: includes/admin/replies.php:644 includes/admin/settings.php:351
77
- #: includes/admin/topics.php:832 includes/extend/buddypress/groups.php:50
78
- #: includes/extend/buddypress/groups.php:51 includes/forums/template.php:50
79
  #: templates/default/bbpress/loop-forums.php:20
80
  msgid "Forum"
81
  msgstr ""
82
 
83
- #: includes/admin/actions.php:204 includes/admin/metaboxes.php:130
84
- #: includes/admin/metaboxes.php:523 includes/admin/replies.php:645
85
  #: includes/admin/settings.php:359 includes/topics/template.php:49
86
  #: templates/default/bbpress/content-single-topic-lead.php:23
87
  #: templates/default/bbpress/content-single-topic-lead.php:91
@@ -89,109 +89,109 @@ msgstr ""
89
  msgid "Topic"
90
  msgstr ""
91
 
92
- #: includes/admin/classes/class-bbp-admin.php:207
93
  msgid "Go Upgrade"
94
  msgstr ""
95
 
96
- #: includes/admin/classes/class-bbp-admin.php:208
97
  msgid "Hide Forever"
98
  msgstr ""
99
 
100
- #: includes/admin/classes/class-bbp-admin.php:211
101
  msgid "bbPress requires a manual database upgrade. %s or %s"
102
  msgstr ""
103
 
104
- #: includes/admin/classes/class-bbp-admin.php:283
105
- #: includes/admin/classes/class-bbp-admin.php:284
106
- #: includes/admin/classes/class-bbp-admin.php:293
107
- #: includes/admin/classes/class-bbp-admin.php:294
108
- #: includes/admin/tools/common.php:314 includes/admin/tools.php:30
109
- #: includes/admin/users.php:93 includes/common/widgets.php:622
110
  #: includes/extend/buddypress/loader.php:42
111
- #: includes/extend/buddypress/loader.php:177
112
- #: includes/extend/buddypress/loader.php:299
113
- #: includes/extend/buddypress/loader.php:364 includes/forums/template.php:48
114
- #: includes/forums/template.php:49
115
  #: templates/default/bbpress/content-statistics.php:25
116
  #: templates/default/bbpress/user-profile.php:34
117
  msgid "Forums"
118
  msgstr ""
119
 
120
- #: includes/admin/classes/class-bbp-admin.php:306
121
- #: includes/admin/classes/class-bbp-admin.php:307
122
- #: includes/admin/classes/class-bbp-admin.php:315
123
- #: includes/admin/classes/class-bbp-admin.php:316
124
  msgid "Welcome to bbPress"
125
  msgstr ""
126
 
127
- #: includes/admin/classes/class-bbp-admin.php:330
128
- #: includes/admin/classes/class-bbp-admin.php:331
129
- #: includes/admin/classes/class-bbp-admin.php:352
130
- #: includes/admin/classes/class-bbp-admin.php:353
131
- #: includes/admin/classes/class-bbp-admin.php:1083
132
- #: includes/admin/classes/class-bbp-admin.php:1180
133
  msgid "Update Forums"
134
  msgstr ""
135
 
136
- #: includes/admin/classes/class-bbp-admin.php:564
137
  msgid "Settings"
138
  msgstr ""
139
 
140
- #: includes/admin/classes/class-bbp-admin.php:569
141
  msgid "About"
142
  msgstr ""
143
 
144
- #: includes/admin/classes/class-bbp-admin.php:747
145
- #: includes/admin/classes/class-bbp-admin.php:784
146
  msgid "%s - %s"
147
  msgstr ""
148
 
149
- #: includes/admin/classes/class-bbp-admin.php:802
150
  msgid "Welcome to bbPress %s"
151
  msgstr ""
152
 
153
- #: includes/admin/classes/class-bbp-admin.php:803
154
  msgid ""
155
  "bbPress is fun to use, contains no artificial colors or preservatives, and "
156
  "is absolutely wonderful in every environment. Your community is going to "
157
  "love using it."
158
  msgstr ""
159
 
160
- #: includes/admin/classes/class-bbp-admin.php:829
161
- #: includes/admin/classes/class-bbp-admin.php:903
162
  msgid "What&#8217;s New"
163
  msgstr ""
164
 
165
- #: includes/admin/classes/class-bbp-admin.php:831
166
- #: includes/admin/classes/class-bbp-admin.php:905
167
  msgid "Credits"
168
  msgstr ""
169
 
170
- #: includes/admin/classes/class-bbp-admin.php:836
171
  msgid "Forum Subscriptions"
172
  msgstr ""
173
 
174
- #: includes/admin/classes/class-bbp-admin.php:840
175
  msgid "Subscribe to Forums"
176
  msgstr ""
177
 
178
- #: includes/admin/classes/class-bbp-admin.php:841
179
  msgid "Now your users can subscribe to new topics in specific forums."
180
  msgstr ""
181
 
182
- #: includes/admin/classes/class-bbp-admin.php:845
183
  msgid "Manage Subscriptions"
184
  msgstr ""
185
 
186
- #: includes/admin/classes/class-bbp-admin.php:846
187
  msgid "Your users can manage all of their subscriptions in one convenient location."
188
  msgstr ""
189
 
190
- #: includes/admin/classes/class-bbp-admin.php:852
191
  msgid "Converters"
192
  msgstr ""
193
 
194
- #: includes/admin/classes/class-bbp-admin.php:856
195
  msgid ""
196
  "We&#8217;re all abuzz about the hive of new importers, AEF, Drupal, FluxBB, "
197
  "Kunena Forums for Joomla, MyBB, Phorum, PHPFox, PHPWind, PunBB, SMF, "
@@ -200,127 +200,127 @@ msgid ""
200
  "now gone if you need to remove imported users."
201
  msgstr ""
202
 
203
- #: includes/admin/classes/class-bbp-admin.php:862
204
  msgid "Theme Compatibility"
205
  msgstr ""
206
 
207
- #: includes/admin/classes/class-bbp-admin.php:863
208
  msgid "Better handling of styles and scripts in the template stack."
209
  msgstr ""
210
 
211
- #: includes/admin/classes/class-bbp-admin.php:867
212
  msgid "Polyglot support"
213
  msgstr ""
214
 
215
- #: includes/admin/classes/class-bbp-admin.php:868
216
  msgid "bbPress fully supports automatic translation updates."
217
  msgstr ""
218
 
219
- #: includes/admin/classes/class-bbp-admin.php:872
220
  msgid "User capabilities"
221
  msgstr ""
222
 
223
- #: includes/admin/classes/class-bbp-admin.php:873
224
  msgid "Roles and capabilities have been swept through, cleaned up, and simplified."
225
  msgstr ""
226
 
227
- #: includes/admin/classes/class-bbp-admin.php:879
228
- #: includes/admin/classes/class-bbp-admin.php:1019
229
  msgid "Go to Forum Settings"
230
  msgstr ""
231
 
232
- #: includes/admin/classes/class-bbp-admin.php:909
233
  msgid "bbPress is created by a worldwide swarm of busy, busy bees."
234
  msgstr ""
235
 
236
- #: includes/admin/classes/class-bbp-admin.php:911
237
  msgid "Project Leaders"
238
  msgstr ""
239
 
240
- #: includes/admin/classes/class-bbp-admin.php:915
241
  msgid "Founding Developer"
242
  msgstr ""
243
 
244
- #: includes/admin/classes/class-bbp-admin.php:919
245
  msgid "Lead Developer"
246
  msgstr ""
247
 
248
- #: includes/admin/classes/class-bbp-admin.php:923
249
  msgid "Feature Virtuoso"
250
  msgstr ""
251
 
252
- #: includes/admin/classes/class-bbp-admin.php:927
253
  msgid "Tool Maven"
254
  msgstr ""
255
 
256
- #: includes/admin/classes/class-bbp-admin.php:931
257
  msgid "Contributing Developers"
258
  msgstr ""
259
 
260
- #: includes/admin/classes/class-bbp-admin.php:935
261
- #: includes/admin/classes/class-bbp-admin.php:939
262
  msgid "Core Developer"
263
  msgstr ""
264
 
265
- #: includes/admin/classes/class-bbp-admin.php:943
266
  msgid "Project Emeriti"
267
  msgstr ""
268
 
269
- #: includes/admin/classes/class-bbp-admin.php:947
270
  msgid "Feature Developer"
271
  msgstr ""
272
 
273
- #: includes/admin/classes/class-bbp-admin.php:951
274
  msgid "Integration Testing"
275
  msgstr ""
276
 
277
- #: includes/admin/classes/class-bbp-admin.php:955
278
  msgid "Contributors to bbPress 2.6"
279
  msgstr ""
280
 
281
- #: includes/admin/classes/class-bbp-admin.php:1040
282
- #: includes/admin/classes/class-bbp-admin.php:1062
283
  msgid "Update Forum"
284
  msgstr ""
285
 
286
- #: includes/admin/classes/class-bbp-admin.php:1051
287
- #: includes/admin/classes/class-bbp-admin.php:1100
288
  msgid "All done!"
289
  msgstr ""
290
 
291
- #: includes/admin/classes/class-bbp-admin.php:1052
292
- #: includes/admin/classes/class-bbp-admin.php:1101
293
  msgid "Go Back"
294
  msgstr ""
295
 
296
- #: includes/admin/classes/class-bbp-admin.php:1061
297
  msgid "You can update your forum through this page. Hit the link below to update."
298
  msgstr ""
299
 
300
- #: includes/admin/classes/class-bbp-admin.php:1135
301
  msgid ""
302
  "Warning! Problem updating %1$s. Your server may not be able to connect to "
303
  "sites running on it. Error message: %2$s"
304
  msgstr ""
305
 
306
- #: includes/admin/classes/class-bbp-admin.php:1160
307
  msgid ""
308
  "If your browser doesn&#8217;t start loading the next page automatically, "
309
  "click this link:"
310
  msgstr ""
311
 
312
- #: includes/admin/classes/class-bbp-admin.php:1161
313
  msgid "Next Forums"
314
  msgstr ""
315
 
316
- #: includes/admin/classes/class-bbp-admin.php:1179
317
  msgid ""
318
  "You can update all the forums on your network through this page. It works "
319
  "by calling the update script of each site automatically. Hit the link below "
320
  "to update."
321
  msgstr ""
322
 
323
- #: includes/admin/classes/class-bbp-converter-base.php:157
324
  msgid "Database connection failed."
325
  msgstr ""
326
 
@@ -377,228 +377,228 @@ msgstr ""
377
  msgid "Next in %s seconds..."
378
  msgstr ""
379
 
380
- #: includes/admin/classes/class-bbp-converter.php:465
381
  msgid "Readying sync-table"
382
  msgstr ""
383
 
384
- #: includes/admin/classes/class-bbp-converter.php:466
385
  msgid "Sync-table ready"
386
  msgstr ""
387
 
388
- #: includes/admin/classes/class-bbp-converter.php:469
389
- msgid "Deleting previously converted data (%1$s through %2$s of %3$s)"
390
  msgstr ""
391
 
392
- #: includes/admin/classes/class-bbp-converter.php:476
393
  msgid "Skipping sync-table clean-up"
394
  msgstr ""
395
 
396
- #: includes/admin/classes/class-bbp-converter.php:491
397
  msgid "No users to import"
398
  msgstr ""
399
 
400
- #: includes/admin/classes/class-bbp-converter.php:492
401
  msgid "All users imported"
402
  msgstr ""
403
 
404
- #: includes/admin/classes/class-bbp-converter.php:495
405
  msgid "Converting users (%1$s through %2$s of %3$s)"
406
  msgstr ""
407
 
408
- #: includes/admin/classes/class-bbp-converter.php:499
409
  msgid "Skipping user clean-up"
410
  msgstr ""
411
 
412
- #: includes/admin/classes/class-bbp-converter.php:514
413
  msgid "No passwords to clear"
414
  msgstr ""
415
 
416
- #: includes/admin/classes/class-bbp-converter.php:515
417
  msgid "All passwords cleared"
418
  msgstr ""
419
 
420
- #: includes/admin/classes/class-bbp-converter.php:518
421
- msgid "Delete default WordPress user passwords (%1$s through %2$s of %3$s)"
422
  msgstr ""
423
 
424
- #: includes/admin/classes/class-bbp-converter.php:522
425
  msgid "Skipping password clean-up"
426
  msgstr ""
427
 
428
- #: includes/admin/classes/class-bbp-converter.php:536
429
  msgid "No forums to import"
430
  msgstr ""
431
 
432
- #: includes/admin/classes/class-bbp-converter.php:537
433
  msgid "All forums imported"
434
  msgstr ""
435
 
436
- #: includes/admin/classes/class-bbp-converter.php:540
437
  msgid "Converting forums (%1$s through %2$s of %3$s)"
438
  msgstr ""
439
 
440
- #: includes/admin/classes/class-bbp-converter.php:554
441
  msgid "No forum parents to import"
442
  msgstr ""
443
 
444
- #: includes/admin/classes/class-bbp-converter.php:555
445
  msgid "All forum parents imported"
446
  msgstr ""
447
 
448
- #: includes/admin/classes/class-bbp-converter.php:558
449
  msgid "Calculating forum hierarchy (%1$s through %2$s of %3$s)"
450
  msgstr ""
451
 
452
- #: includes/admin/classes/class-bbp-converter.php:572
453
  msgid "No forum subscriptions to import"
454
  msgstr ""
455
 
456
- #: includes/admin/classes/class-bbp-converter.php:573
457
  msgid "All forum subscriptions imported"
458
  msgstr ""
459
 
460
- #: includes/admin/classes/class-bbp-converter.php:576
461
  msgid "Converting forum subscriptions (%1$s through %2$s of %3$s)"
462
  msgstr ""
463
 
464
- #: includes/admin/classes/class-bbp-converter.php:590
465
  msgid "No topics to import"
466
  msgstr ""
467
 
468
- #: includes/admin/classes/class-bbp-converter.php:591
469
  msgid "All topics imported"
470
  msgstr ""
471
 
472
- #: includes/admin/classes/class-bbp-converter.php:594
473
  msgid "Converting topics (%1$s through %2$s of %3$s)"
474
  msgstr ""
475
 
476
- #: includes/admin/classes/class-bbp-converter.php:608
477
  msgid "No anonymous topic authors to import"
478
  msgstr ""
479
 
480
- #: includes/admin/classes/class-bbp-converter.php:609
481
  msgid "All anonymous topic authors imported"
482
  msgstr ""
483
 
484
- #: includes/admin/classes/class-bbp-converter.php:612
485
  msgid "Converting anonymous topic authors (%1$s through %2$s of %3$s)"
486
  msgstr ""
487
 
488
- #: includes/admin/classes/class-bbp-converter.php:626
489
  msgid "No stickies to import"
490
  msgstr ""
491
 
492
- #: includes/admin/classes/class-bbp-converter.php:627
493
  msgid "All stickies imported"
494
  msgstr ""
495
 
496
- #: includes/admin/classes/class-bbp-converter.php:630
497
  msgid "Calculating topic stickies (%1$s through %2$s of %3$s)"
498
  msgstr ""
499
 
500
- #: includes/admin/classes/class-bbp-converter.php:644
501
  msgid "No super stickies to import"
502
  msgstr ""
503
 
504
- #: includes/admin/classes/class-bbp-converter.php:645
505
  msgid "All super stickies imported"
506
  msgstr ""
507
 
508
- #: includes/admin/classes/class-bbp-converter.php:648
509
  msgid "Calculating topic super stickies (%1$s through %2$s of %3$s)"
510
  msgstr ""
511
 
512
- #: includes/admin/classes/class-bbp-converter.php:662
513
  msgid "No closed topics to import"
514
  msgstr ""
515
 
516
- #: includes/admin/classes/class-bbp-converter.php:663
517
  msgid "All closed topics imported"
518
  msgstr ""
519
 
520
- #: includes/admin/classes/class-bbp-converter.php:666
521
  msgid "Calculating closed topics (%1$s through %2$s of %3$s)"
522
  msgstr ""
523
 
524
- #: includes/admin/classes/class-bbp-converter.php:680
525
  msgid "No topic tags to import"
526
  msgstr ""
527
 
528
- #: includes/admin/classes/class-bbp-converter.php:681
529
  msgid "All topic tags imported"
530
  msgstr ""
531
 
532
- #: includes/admin/classes/class-bbp-converter.php:684
533
  msgid "Converting topic tags (%1$s through %2$s of %3$s)"
534
  msgstr ""
535
 
536
- #: includes/admin/classes/class-bbp-converter.php:698
537
  msgid "No topic subscriptions to import"
538
  msgstr ""
539
 
540
- #: includes/admin/classes/class-bbp-converter.php:699
541
  msgid "All topic subscriptions imported"
542
  msgstr ""
543
 
544
- #: includes/admin/classes/class-bbp-converter.php:702
545
  msgid "Converting topic subscriptions (%1$s through %2$s of %3$s)"
546
  msgstr ""
547
 
548
- #: includes/admin/classes/class-bbp-converter.php:716
549
  msgid "No favorites to import"
550
  msgstr ""
551
 
552
- #: includes/admin/classes/class-bbp-converter.php:717
553
  msgid "All favorites imported"
554
  msgstr ""
555
 
556
- #: includes/admin/classes/class-bbp-converter.php:720
557
  msgid "Converting favorites (%1$s through %2$s of %3$s)"
558
  msgstr ""
559
 
560
- #: includes/admin/classes/class-bbp-converter.php:734
561
  msgid "No replies to import"
562
  msgstr ""
563
 
564
- #: includes/admin/classes/class-bbp-converter.php:735
565
  msgid "All replies imported"
566
  msgstr ""
567
 
568
- #: includes/admin/classes/class-bbp-converter.php:738
569
  msgid "Converting replies (%1$s through %2$s of %3$s)"
570
  msgstr ""
571
 
572
- #: includes/admin/classes/class-bbp-converter.php:752
573
  msgid "No anonymous reply authors to import"
574
  msgstr ""
575
 
576
- #: includes/admin/classes/class-bbp-converter.php:753
577
  msgid "All anonymous reply authors imported"
578
  msgstr ""
579
 
580
- #: includes/admin/classes/class-bbp-converter.php:756
581
  msgid "Converting anonymous reply authors (%1$s through %2$s of %3$s)"
582
  msgstr ""
583
 
584
- #: includes/admin/classes/class-bbp-converter.php:770
585
  msgid "No threaded replies to import"
586
  msgstr ""
587
 
588
- #: includes/admin/classes/class-bbp-converter.php:771
589
  msgid "All threaded replies imported"
590
  msgstr ""
591
 
592
- #: includes/admin/classes/class-bbp-converter.php:774
593
  msgid "Calculating threaded replies parents (%1$s through %2$s of %3$s)"
594
  msgstr ""
595
 
596
- #: includes/admin/classes/class-bbp-converter.php:785
597
  msgid "Import Finished"
598
  msgstr ""
599
 
600
- #: includes/admin/classes/class-bbp-topic-replies-list-table.php:56
601
- #: includes/admin/replies.php:646 includes/admin/topics.php:835
602
  #: templates/default/bbpress/loop-replies.php:18
603
  #: templates/default/bbpress/loop-replies.php:44
604
  #: templates/default/bbpress/loop-search.php:19
@@ -606,52 +606,52 @@ msgstr ""
606
  msgid "Author"
607
  msgstr ""
608
 
609
- #: includes/admin/classes/class-bbp-topic-replies-list-table.php:57
610
  msgid "Content"
611
  msgstr ""
612
 
613
- #: includes/admin/classes/class-bbp-topic-replies-list-table.php:58
614
  msgid "Replied"
615
  msgstr ""
616
 
617
- #: includes/admin/classes/class-bbp-topic-replies-list-table.php:87
618
  msgid "Unapprove"
619
  msgstr ""
620
 
621
- #: includes/admin/classes/class-bbp-topic-replies-list-table.php:88
622
- #: includes/admin/replies.php:232 includes/admin/replies.php:798
623
- #: includes/admin/topics.php:237 includes/admin/topics.php:994
624
- #: includes/replies/template.php:1970 includes/topics/template.php:2821
625
  msgid "Spam"
626
  msgstr ""
627
 
628
- #: includes/admin/classes/class-bbp-topic-replies-list-table.php:89
629
- #: includes/admin/replies.php:811 includes/admin/topics.php:1006
630
- #: includes/replies/template.php:1902 includes/topics/template.php:2529
631
  msgid "Trash"
632
  msgstr ""
633
 
634
- #: includes/admin/classes/class-bbp-topic-replies-list-table.php:141
635
- #: includes/admin/replies.php:774 includes/admin/topics.php:950
636
- #: includes/admin/topics.php:963 includes/admin/users.php:260
637
  msgid "View"
638
  msgstr ""
639
 
640
- #: includes/admin/classes/class-bbp-topic-replies-list-table.php:146
641
- #: includes/common/template.php:2257 includes/forums/template.php:54
642
- #: includes/replies/template.php:55 includes/replies/template.php:1790
643
- #: includes/topics/template.php:53 includes/topics/template.php:2417
644
  #: templates/default/bbpress/user-details.php:74
645
  msgid "Edit"
646
  msgstr ""
647
 
648
- #: includes/admin/classes/class-bbp-topic-replies-list-table.php:232
649
  msgid "No replies to this topic."
650
  msgstr ""
651
 
652
- #: includes/admin/forums.php:101 includes/admin/replies.php:112
653
- #: includes/admin/settings.php:1844 includes/admin/tools/help.php:95
654
- #: includes/admin/topics.php:116
655
  msgid "Overview"
656
  msgstr ""
657
 
@@ -661,13 +661,13 @@ msgid ""
661
  "the display of this screen to suit your workflow."
662
  msgstr ""
663
 
664
- #: includes/admin/forums.php:109 includes/admin/replies.php:120
665
- #: includes/admin/topics.php:124
666
  msgid "Screen Content"
667
  msgstr ""
668
 
669
- #: includes/admin/forums.php:111 includes/admin/replies.php:122
670
- #: includes/admin/topics.php:126
671
  msgid ""
672
  "You can customize the display of this screen&#8217;s contents in a number "
673
  "of ways:"
@@ -694,8 +694,8 @@ msgid ""
694
  "forum creator in the forums list."
695
  msgstr ""
696
 
697
- #: includes/admin/forums.php:122 includes/admin/replies.php:134
698
- #: includes/admin/topics.php:138
699
  msgid "Available Actions"
700
  msgstr ""
701
 
@@ -713,67 +713,73 @@ msgstr ""
713
 
714
  #: includes/admin/forums.php:127
715
  msgid ""
 
 
 
 
 
 
716
  "<strong>Trash</strong> removes your forum from this list and places it in "
717
  "the trash, from which you can permanently delete it."
718
  msgstr ""
719
 
720
- #: includes/admin/forums.php:128
721
  msgid ""
722
- "<strong>View</strong> will show you what your draft forum will look like if "
723
- "you publish it. View will take you to your live site to view the forum. "
724
- "Which link is available depends on your forum&#8217;s status."
725
  msgstr ""
726
 
727
- #: includes/admin/forums.php:135 includes/admin/replies.php:150
728
  #: includes/admin/tools/repair.php:47 includes/admin/tools/repair.php:149
729
  #: includes/admin/tools/upgrade.php:44 includes/admin/tools/upgrade.php:146
730
- #: includes/admin/topics.php:156
731
  msgid "Bulk Actions"
732
  msgstr ""
733
 
734
- #: includes/admin/forums.php:137
735
  msgid ""
736
  "You can also edit or move multiple forums to the trash at once. Select the "
737
  "forums you want to act on using the checkboxes, then select the action you "
738
  "want to take from the Bulk Actions menu and click Apply."
739
  msgstr ""
740
 
741
- #: includes/admin/forums.php:138
742
  msgid ""
743
  "When using Bulk Edit, you can change the metadata (categories, author, "
744
  "etc.) for all selected forums at once. To remove a forum from the grouping, "
745
  "just click the x next to its name in the Bulk Edit area that appears."
746
  msgstr ""
747
 
748
- #: includes/admin/forums.php:143 includes/admin/forums.php:199
749
- #: includes/admin/replies.php:158 includes/admin/replies.php:212
750
- #: includes/admin/settings.php:1910 includes/admin/tools/help.php:43
751
  #: includes/admin/tools/help.php:72 includes/admin/tools/help.php:130
752
- #: includes/admin/topics.php:164 includes/admin/topics.php:217
753
  msgid "For more information:"
754
  msgstr ""
755
 
756
- #: includes/admin/forums.php:144 includes/admin/forums.php:200
757
- #: includes/admin/replies.php:159 includes/admin/replies.php:213
758
- #: includes/admin/settings.php:1911 includes/admin/tools/help.php:44
759
  #: includes/admin/tools/help.php:73 includes/admin/tools/help.php:131
760
- #: includes/admin/topics.php:165 includes/admin/topics.php:218
761
  msgid ""
762
  "<a href=\"https://codex.bbpress.org\" target=\"_blank\">bbPress "
763
  "Documentation</a>"
764
  msgstr ""
765
 
766
- #: includes/admin/forums.php:145 includes/admin/forums.php:201
767
- #: includes/admin/replies.php:160 includes/admin/replies.php:214
768
- #: includes/admin/settings.php:1912 includes/admin/tools/help.php:45
769
  #: includes/admin/tools/help.php:74 includes/admin/tools/help.php:132
770
- #: includes/admin/topics.php:166 includes/admin/topics.php:219
771
  msgid ""
772
  "<a href=\"https://bbpress.org/forums/\" target=\"_blank\">bbPress Support "
773
  "Forums</a>"
774
  msgstr ""
775
 
776
- #: includes/admin/forums.php:156
777
  msgid ""
778
  "The title field and the big forum editing Area are fixed in place, but you "
779
  "can reposition all the other boxes using drag and drop, and can minimize or "
@@ -783,22 +789,22 @@ msgid ""
783
  "screen."
784
  msgstr ""
785
 
786
- #: includes/admin/forums.php:160 includes/admin/replies.php:175
787
- #: includes/admin/topics.php:181
788
  msgid "Customizing This Display"
789
  msgstr ""
790
 
791
- #: includes/admin/forums.php:166
792
  msgid "Title and Forum Editor"
793
  msgstr ""
794
 
795
- #: includes/admin/forums.php:168
796
  msgid ""
797
  "<strong>Title</strong> - Enter a title for your forum. After you enter a "
798
  "title, you&#8217;ll see the permalink below, which you can edit."
799
  msgstr ""
800
 
801
- #: includes/admin/forums.php:169
802
  msgid ""
803
  "<strong>Forum Editor</strong> - Enter the text for your forum. There are "
804
  "two modes of editing: Visual and HTML. Choose the mode by clicking on the "
@@ -813,7 +819,7 @@ msgid ""
813
  "editor."
814
  msgstr ""
815
 
816
- #: includes/admin/forums.php:172
817
  msgid ""
818
  "<strong>Publish</strong> - You can set the terms of publishing your forum "
819
  "in the Publish box. For Status, Visibility, and Publish (immediately), "
@@ -824,7 +830,7 @@ msgid ""
824
  "future or backdate a forum."
825
  msgstr ""
826
 
827
- #: includes/admin/forums.php:175
828
  msgid ""
829
  "<strong>Featured Image</strong> - This allows you to associate an image "
830
  "with your forum without inserting it. This is usually useful only if your "
@@ -832,173 +838,174 @@ msgid ""
832
  "page, a custom header, etc."
833
  msgstr ""
834
 
835
- #: includes/admin/forums.php:180 includes/admin/forums.php:213
 
836
  msgid "Forum Attributes"
837
  msgstr ""
838
 
839
- #: includes/admin/forums.php:182
840
  msgid "Select the attributes that your forum should have:"
841
  msgstr ""
842
 
843
- #: includes/admin/forums.php:184
844
  msgid ""
845
  "<strong>Type</strong> indicates if the forum is a category or forum. "
846
  "Categories generally contain other forums."
847
  msgstr ""
848
 
849
- #: includes/admin/forums.php:185
850
  msgid ""
851
  "<strong>Status</strong> allows you to close a forum to new topics and "
852
  "forums."
853
  msgstr ""
854
 
855
- #: includes/admin/forums.php:186
856
  msgid ""
857
  "<strong>Visibility</strong> lets you pick the scope of each forum and what "
858
  "users are allowed to access it."
859
  msgstr ""
860
 
861
- #: includes/admin/forums.php:187
862
  msgid ""
863
  "<strong>Parent</strong> dropdown determines the parent forum. Select the "
864
  "forum or category from the dropdown, or leave the default \"No parent\" to "
865
  "create the forum at the root of your forums."
866
  msgstr ""
867
 
868
- #: includes/admin/forums.php:188
869
  msgid "<strong>Order</strong> allows you to order your forums numerically."
870
  msgstr ""
871
 
872
- #: includes/admin/forums.php:194 includes/admin/replies.php:207
873
- #: includes/admin/topics.php:212
874
  msgid "Publish Box"
875
  msgstr ""
876
 
877
- #: includes/admin/forums.php:236 includes/admin/settings.php:208
878
  #: includes/admin/tools/reset.php:41
879
  msgid "Forum Moderators"
880
  msgstr ""
881
 
882
- #: includes/admin/forums.php:266 includes/admin/settings.php:184
883
- #: includes/admin/settings.php:436 includes/admin/tools/common.php:332
884
- #: includes/admin/topics.php:477 includes/extend/buddypress/loader.php:248
885
  #: templates/default/bbpress/user-details.php:67
886
  msgid "Subscriptions"
887
  msgstr ""
888
 
889
- #: includes/admin/forums.php:360
890
  msgid "The forum was not found."
891
  msgstr ""
892
 
893
- #: includes/admin/forums.php:365 includes/admin/replies.php:461
894
- #: includes/admin/topics.php:579
895
  msgid "You do not have permission to do that."
896
  msgstr ""
897
 
898
- #: includes/admin/forums.php:450
899
  msgid "There was a problem opening the forum \"%1$s\"."
900
  msgstr ""
901
 
902
- #: includes/admin/forums.php:451
903
  msgid "Forum \"%1$s\" successfully opened."
904
  msgstr ""
905
 
906
- #: includes/admin/forums.php:456
907
  msgid "There was a problem closing the forum \"%1$s\"."
908
  msgstr ""
909
 
910
- #: includes/admin/forums.php:457
911
  msgid "Forum \"%1$s\" successfully closed."
912
  msgstr ""
913
 
914
- #: includes/admin/forums.php:524 includes/admin/metaboxes.php:659
915
  msgid "Moderators"
916
  msgstr ""
917
 
918
- #: includes/admin/forums.php:525
919
  #: templates/default/bbpress/content-single-topic-lead.php:19
920
  #: templates/default/bbpress/content-single-topic-lead.php:87
921
  msgid "Creator"
922
  msgstr ""
923
 
924
- #: includes/admin/forums.php:526 includes/admin/replies.php:647
925
- #: includes/admin/topics.php:836
926
  msgid "Created"
927
  msgstr ""
928
 
929
- #: includes/admin/forums.php:527 includes/admin/topics.php:837
930
  #: templates/default/bbpress/loop-forums.php:26
931
  #: templates/default/bbpress/loop-topics.php:24
932
  msgid "Last Post"
933
  msgstr ""
934
 
935
- #: includes/admin/forums.php:562
936
  msgid "&mdash;"
937
  msgstr ""
938
 
939
- #: includes/admin/forums.php:579 includes/forums/template.php:560
940
  msgid "No Topics"
941
  msgstr ""
942
 
943
- #: includes/admin/forums.php:613
944
  msgid "Close this forum"
945
  msgstr ""
946
 
947
- #: includes/admin/forums.php:615
948
  msgid "Open this forum"
949
  msgstr ""
950
 
951
- #: includes/admin/forums.php:653 includes/admin/forums.php:665
952
  msgid "Forum updated."
953
  msgstr ""
954
 
955
- #: includes/admin/forums.php:655 includes/admin/forums.php:678
956
  msgid "View forum"
957
  msgstr ""
958
 
959
- #: includes/admin/forums.php:659 includes/admin/replies.php:910
960
- #: includes/admin/topics.php:1105
961
  msgid "Custom field updated."
962
  msgstr ""
963
 
964
- #: includes/admin/forums.php:662 includes/admin/replies.php:913
965
- #: includes/admin/topics.php:1108
966
  msgid "Custom field deleted."
967
  msgstr ""
968
 
969
- #: includes/admin/forums.php:670
970
  #. translators: %s: date and time of the revision
971
  msgid "Forum restored to revision from %s"
972
  msgstr ""
973
 
974
- #: includes/admin/forums.php:676
975
  msgid "Forum created."
976
  msgstr ""
977
 
978
- #: includes/admin/forums.php:682
979
  msgid "Forum saved."
980
  msgstr ""
981
 
982
- #: includes/admin/forums.php:687
983
  msgid "Forum submitted."
984
  msgstr ""
985
 
986
- #: includes/admin/forums.php:689 includes/admin/forums.php:701
987
- #: includes/admin/forums.php:709
988
  msgid "Preview forum"
989
  msgstr ""
990
 
991
- #: includes/admin/forums.php:696
992
  msgid "Forum scheduled for: %s."
993
  msgstr ""
994
 
995
- #: includes/admin/forums.php:698 includes/admin/replies.php:949
996
- #: includes/admin/topics.php:1144
997
  #. translators: Publish box date format, see http:php.net/date
998
  msgid "M j, Y @ G:i"
999
  msgstr ""
1000
 
1001
- #: includes/admin/forums.php:707
1002
  msgid "Forum draft updated."
1003
  msgstr ""
1004
 
@@ -1043,7 +1050,7 @@ msgstr[0] ""
1043
  msgstr[1] ""
1044
 
1045
  #: includes/admin/metaboxes.php:166 includes/admin/settings.php:367
1046
- #: includes/topics/template.php:3380
1047
  msgid "Topic Tag"
1048
  msgid_plural "Topic Tags"
1049
  msgstr[0] ""
@@ -1127,13 +1134,13 @@ msgid "Select whether to open or close the topic."
1127
  msgstr ""
1128
 
1129
  #: includes/admin/metaboxes.php:431 includes/admin/metaboxes.php:495
1130
- #: includes/extend/buddypress/groups.php:1180 includes/topics/template.php:65
1131
  #: templates/default/bbpress/form-topic.php:124
1132
  #: templates/default/bbpress/loop-search-forum.php:25
1133
  msgid "Forum:"
1134
  msgstr ""
1135
 
1136
- #: includes/admin/metaboxes.php:445 includes/extend/buddypress/groups.php:350
1137
  #: templates/default/bbpress/form-topic.php:127
1138
  msgid "&mdash; No forum &mdash;"
1139
  msgstr ""
@@ -1146,7 +1153,7 @@ msgstr ""
1146
  msgid "&mdash; No reply &mdash;"
1147
  msgstr ""
1148
 
1149
- #: includes/admin/metaboxes.php:522 includes/replies/template.php:67
1150
  #: templates/default/bbpress/loop-search-topic.php:25
1151
  msgid "Topic:"
1152
  msgstr ""
@@ -1219,87 +1226,87 @@ msgstr ""
1219
  msgid "No users have favorited this topic."
1220
  msgstr ""
1221
 
1222
- #: includes/admin/metaboxes.php:767
1223
  msgid "No users have subscribed to this topic."
1224
  msgstr ""
1225
 
1226
- #: includes/admin/metaboxes.php:803
1227
  msgid "No users have subscribed to this forum."
1228
  msgstr ""
1229
 
1230
- #: includes/admin/replies.php:114
1231
  msgid ""
1232
  "This screen provides access to all of your replies. You can customize the "
1233
  "display of this screen to suit your workflow."
1234
  msgstr ""
1235
 
1236
- #: includes/admin/replies.php:124
1237
  msgid ""
1238
  "You can hide/display columns based on your needs and decide how many "
1239
  "replies to list per screen using the Screen Options tab."
1240
  msgstr ""
1241
 
1242
- #: includes/admin/replies.php:125
1243
  msgid ""
1244
  "You can filter the list of replies by reply status using the text links in "
1245
  "the upper left to show All, Published, Draft, Pending, Trashed, or Spam "
1246
  "replies. The default view is to show all replies."
1247
  msgstr ""
1248
 
1249
- #: includes/admin/replies.php:126
1250
  msgid ""
1251
  "You can view replies in a simple title list or with an excerpt. Choose the "
1252
  "view you prefer by clicking on the icons at the top of the list on the "
1253
  "right."
1254
  msgstr ""
1255
 
1256
- #: includes/admin/replies.php:127
1257
  msgid ""
1258
  "You can refine the list to show only replies in a specific forum or from a "
1259
  "specific month by using the dropdown menus above the replies list. Click "
1260
  "the Filter button after making your selection."
1261
  msgstr ""
1262
 
1263
- #: includes/admin/replies.php:136
1264
  msgid ""
1265
  "Hovering over a row in the replies list will display action links that "
1266
  "allow you to manage your reply. You can perform the following actions:"
1267
  msgstr ""
1268
 
1269
- #: includes/admin/replies.php:138
1270
  msgid ""
1271
  "<strong>Edit</strong> takes you to the editing screen for that reply. You "
1272
  "can also reach that screen by clicking on the reply title."
1273
  msgstr ""
1274
 
1275
- #: includes/admin/replies.php:140
1276
  msgid ""
1277
  "<strong>Trash</strong> removes your reply from this list and places it in "
1278
  "the trash, from which you can permanently delete it."
1279
  msgstr ""
1280
 
1281
- #: includes/admin/replies.php:141
1282
  msgid ""
1283
  "<strong>Spam</strong> removes your reply from this list and places it in "
1284
  "the spam queue, from which you can permanently delete it."
1285
  msgstr ""
1286
 
1287
- #: includes/admin/replies.php:142
1288
  msgid "<strong>View</strong> will take you to your live site to view the reply."
1289
  msgstr ""
1290
 
1291
- #: includes/admin/replies.php:143 includes/admin/topics.php:146
1292
  msgid "<strong>Approve</strong> will change the status from pending to publish."
1293
  msgstr ""
1294
 
1295
- #: includes/admin/replies.php:152
1296
  msgid ""
1297
  "You can also edit, spam, or move multiple replies to the trash at once. "
1298
  "Select the replies you want to act on using the checkboxes, then select the "
1299
  "action you want to take from the Bulk Actions menu and click Apply."
1300
  msgstr ""
1301
 
1302
- #: includes/admin/replies.php:153
1303
  msgid ""
1304
  "When using Bulk Edit, you can change the metadata (categories, author, "
1305
  "etc.) for all selected replies at once. To remove a reply from the "
@@ -1307,7 +1314,7 @@ msgid ""
1307
  "appears."
1308
  msgstr ""
1309
 
1310
- #: includes/admin/replies.php:171
1311
  msgid ""
1312
  "The title field and the big reply editing Area are fixed in place, but you "
1313
  "can reposition all the other boxes using drag and drop, and can minimize or "
@@ -1317,17 +1324,17 @@ msgid ""
1317
  "screen."
1318
  msgstr ""
1319
 
1320
- #: includes/admin/replies.php:181
1321
  msgid "Title and Reply Editor"
1322
  msgstr ""
1323
 
1324
- #: includes/admin/replies.php:183
1325
  msgid ""
1326
  "<strong>Title</strong> - Enter a title for your reply. After you enter a "
1327
  "title, you&#8217;ll see the permalink below, which you can edit."
1328
  msgstr ""
1329
 
1330
- #: includes/admin/replies.php:184
1331
  msgid ""
1332
  "<strong>Reply Editor</strong> - Enter the text for your reply. There are "
1333
  "two modes of editing: Visual and HTML. Choose the mode by clicking on the "
@@ -1342,7 +1349,7 @@ msgid ""
1342
  "editor."
1343
  msgstr ""
1344
 
1345
- #: includes/admin/replies.php:187
1346
  msgid ""
1347
  "<strong>Publish</strong> - You can set the terms of publishing your reply "
1348
  "in the Publish box. For Status, Visibility, and Publish (immediately), "
@@ -1353,7 +1360,7 @@ msgid ""
1353
  "future or backdate a reply."
1354
  msgstr ""
1355
 
1356
- #: includes/admin/replies.php:190
1357
  msgid ""
1358
  "<strong>Featured Image</strong> - This allows you to associate an image "
1359
  "with your reply without inserting it. This is usually useful only if your "
@@ -1361,219 +1368,220 @@ msgid ""
1361
  "page, a custom header, etc."
1362
  msgstr ""
1363
 
1364
- #: includes/admin/replies.php:195 includes/admin/replies.php:333
 
1365
  msgid "Reply Attributes"
1366
  msgstr ""
1367
 
1368
- #: includes/admin/replies.php:197
1369
  msgid "Select the attributes that your reply should have:"
1370
  msgstr ""
1371
 
1372
- #: includes/admin/replies.php:199
1373
  msgid ""
1374
  "<strong>Forum</strong> dropdown determines the parent forum that the reply "
1375
  "belongs to. Select the forum, or leave the default (Use Forum of Topic) to "
1376
  "post the reply in forum of the topic."
1377
  msgstr ""
1378
 
1379
- #: includes/admin/replies.php:200
1380
  msgid ""
1381
  "<strong>Topic</strong> determines the parent topic that the reply belongs "
1382
  "to."
1383
  msgstr ""
1384
 
1385
- #: includes/admin/replies.php:201
1386
  msgid "<strong>Reply To</strong> determines the threading of the reply."
1387
  msgstr ""
1388
 
1389
- #: includes/admin/replies.php:230 includes/admin/topics.php:235
1390
- #: includes/replies/template.php:1971 includes/topics/template.php:2822
1391
  msgid "Unspam"
1392
  msgstr ""
1393
 
1394
- #: includes/admin/replies.php:248
1395
  msgid "%s reply updated."
1396
  msgid_plural "%s replies updated."
1397
  msgstr[0] ""
1398
  msgstr[1] ""
1399
 
1400
- #: includes/admin/replies.php:250
1401
  msgid "1 reply not updated, somebody is editing it."
1402
  msgstr ""
1403
 
1404
- #: includes/admin/replies.php:251
1405
  msgid "%s reply not updated, somebody is editing it."
1406
  msgid_plural "%s replies not updated, somebody is editing them."
1407
  msgstr[0] ""
1408
  msgstr[1] ""
1409
 
1410
- #: includes/admin/replies.php:275 includes/admin/topics.php:280
1411
  msgid "Sorry, you are not allowed to spam this item."
1412
  msgstr ""
1413
 
1414
- #: includes/admin/replies.php:284
1415
  msgid "Error in spamming reply."
1416
  msgstr ""
1417
 
1418
- #: includes/admin/replies.php:300
1419
  msgid "Sorry, you are not allowed to unspam this reply."
1420
  msgstr ""
1421
 
1422
- #: includes/admin/replies.php:309
1423
  msgid "Error in unspamming reply."
1424
  msgstr ""
1425
 
1426
- #: includes/admin/replies.php:358 includes/admin/topics.php:361
1427
  #: templates/default/bbpress/form-anonymous.php:18
1428
  msgid "Author Information"
1429
  msgstr ""
1430
 
1431
- #: includes/admin/replies.php:456
1432
  msgid "The reply was not found."
1433
  msgstr ""
1434
 
1435
- #: includes/admin/replies.php:559
1436
  msgid "There was a problem marking the reply \"%1$s\" as spam."
1437
  msgstr ""
1438
 
1439
- #: includes/admin/replies.php:560
1440
  msgid "Reply \"%1$s\" successfully marked as spam."
1441
  msgstr ""
1442
 
1443
- #: includes/admin/replies.php:565
1444
  msgid "There was a problem unmarking the reply \"%1$s\" as spam."
1445
  msgstr ""
1446
 
1447
- #: includes/admin/replies.php:566
1448
  msgid "Reply \"%1$s\" successfully unmarked as spam."
1449
  msgstr ""
1450
 
1451
- #: includes/admin/replies.php:571
1452
  msgid "There was a problem approving the reply \"%1$s\"."
1453
  msgstr ""
1454
 
1455
- #: includes/admin/replies.php:572
1456
  msgid "Reply \"%1$s\" successfully approved."
1457
  msgstr ""
1458
 
1459
- #: includes/admin/replies.php:577
1460
  msgid "There was a problem unapproving the reply \"%1$s\"."
1461
  msgstr ""
1462
 
1463
- #: includes/admin/replies.php:578
1464
  msgid "Reply \"%1$s\" successfully unapproved."
1465
  msgstr ""
1466
 
1467
- #: includes/admin/replies.php:643
1468
  msgid "Title"
1469
  msgstr ""
1470
 
1471
- #: includes/admin/replies.php:686
1472
  msgid "No topic"
1473
  msgstr ""
1474
 
1475
- #: includes/admin/replies.php:707
1476
  msgid "(Mismatch)"
1477
  msgstr ""
1478
 
1479
- #: includes/admin/replies.php:719 includes/admin/topics.php:876
1480
  msgid "No forum"
1481
  msgstr ""
1482
 
1483
- #: includes/admin/replies.php:774 includes/admin/topics.php:950
1484
- #: includes/admin/topics.php:963
1485
  msgid "View &#8220;%s&#8221;"
1486
  msgstr ""
1487
 
1488
- #: includes/admin/replies.php:787
1489
  msgid "Unapprove this reply"
1490
  msgstr ""
1491
 
1492
- #: includes/admin/replies.php:789
1493
  msgid "Approve this reply"
1494
  msgstr ""
1495
 
1496
- #: includes/admin/replies.php:796
1497
- msgid "Mark the reply as not spam"
1498
  msgstr ""
1499
 
1500
- #: includes/admin/replies.php:796 includes/admin/topics.php:992
1501
- msgid "Not spam"
1502
  msgstr ""
1503
 
1504
- #: includes/admin/replies.php:798
1505
- msgid "Mark this reply as spam"
1506
  msgstr ""
1507
 
1508
- #: includes/admin/replies.php:809 includes/admin/topics.php:1004
1509
- #: includes/replies/template.php:1920 includes/topics/template.php:2546
1510
  msgid "Restore this item from the Trash"
1511
  msgstr ""
1512
 
1513
- #: includes/admin/replies.php:809 includes/admin/topics.php:1004
1514
- #: includes/replies/template.php:1903 includes/topics/template.php:2530
1515
  msgid "Restore"
1516
  msgstr ""
1517
 
1518
- #: includes/admin/replies.php:811 includes/admin/topics.php:1006
1519
- #: includes/replies/template.php:1924 includes/topics/template.php:2548
1520
  msgid "Move this item to the Trash"
1521
  msgstr ""
1522
 
1523
- #: includes/admin/replies.php:815 includes/admin/topics.php:1010
1524
- #: includes/replies/template.php:1929 includes/topics/template.php:2552
1525
  msgid "Delete this item permanently"
1526
  msgstr ""
1527
 
1528
- #: includes/admin/replies.php:815 includes/admin/topics.php:1010
1529
  msgid "Delete Permanently"
1530
  msgstr ""
1531
 
1532
- #: includes/admin/replies.php:837 includes/admin/topics.php:1032
1533
- msgid "Empty Spam"
1534
  msgstr ""
1535
 
1536
- #: includes/admin/replies.php:852 includes/admin/topics.php:1047
1537
- msgid "In all forums"
1538
  msgstr ""
1539
 
1540
- #: includes/admin/replies.php:904 includes/admin/replies.php:916
1541
  msgid "Reply updated."
1542
  msgstr ""
1543
 
1544
- #: includes/admin/replies.php:906 includes/admin/replies.php:929
1545
- #: includes/admin/topics.php:1101 includes/admin/topics.php:1124
1546
  msgid "View topic"
1547
  msgstr ""
1548
 
1549
- #: includes/admin/replies.php:921
1550
  #. translators: %s: date and time of the revision
1551
  msgid "Reply restored to revision from %s"
1552
  msgstr ""
1553
 
1554
- #: includes/admin/replies.php:927
1555
  msgid "Reply created."
1556
  msgstr ""
1557
 
1558
- #: includes/admin/replies.php:933
1559
  msgid "Reply saved."
1560
  msgstr ""
1561
 
1562
- #: includes/admin/replies.php:938
1563
  msgid "Reply submitted."
1564
  msgstr ""
1565
 
1566
- #: includes/admin/replies.php:940 includes/admin/replies.php:952
1567
- #: includes/admin/replies.php:960 includes/admin/topics.php:1135
1568
- #: includes/admin/topics.php:1147 includes/admin/topics.php:1155
1569
  msgid "Preview topic"
1570
  msgstr ""
1571
 
1572
- #: includes/admin/replies.php:947
1573
  msgid "Reply scheduled for: %s."
1574
  msgstr ""
1575
 
1576
- #: includes/admin/replies.php:958
1577
  msgid "Reply draft updated."
1578
  msgstr ""
1579
 
@@ -1637,24 +1645,24 @@ msgstr ""
1637
  msgid "Editing"
1638
  msgstr ""
1639
 
1640
- #: includes/admin/settings.php:155 includes/users/template.php:799
1641
  msgid "Anonymous"
1642
  msgstr ""
1643
 
1644
- #: includes/admin/settings.php:168 includes/admin/settings.php:1997
1645
  msgid "Revisions"
1646
  msgstr ""
1647
 
1648
- #: includes/admin/settings.php:176 includes/admin/tools/common.php:329
1649
- #: includes/admin/topics.php:447 includes/extend/buddypress/loader.php:235
1650
  #: templates/default/bbpress/user-details.php:57
1651
  msgid "Favorites"
1652
  msgstr ""
1653
 
1654
  #: includes/admin/settings.php:192 includes/admin/settings.php:444
1655
- #: includes/admin/tools/common.php:335 includes/admin/topics.php:417
1656
- #: includes/extend/buddypress/loader.php:222
1657
- #: includes/extend/buddypress/loader.php:324
1658
  #: templates/default/bbpress/user-details.php:49
1659
  msgid "Engagements"
1660
  msgstr ""
@@ -1668,7 +1676,7 @@ msgid "Super Moderators"
1668
  msgstr ""
1669
 
1670
  #: includes/admin/settings.php:224 includes/admin/settings.php:391
1671
- #: includes/common/template.php:2372 includes/search/template.php:175
1672
  #: templates/default/bbpress/form-reply-search.php:20
1673
  #: templates/default/bbpress/form-search.php:21
1674
  #: templates/default/bbpress/form-topic-search.php:20
@@ -1711,19 +1719,19 @@ msgstr ""
1711
  msgid "User Base"
1712
  msgstr ""
1713
 
1714
- #: includes/admin/settings.php:412 includes/extend/buddypress/loader.php:199
1715
- #: includes/extend/buddypress/loader.php:307
1716
  #: templates/default/bbpress/user-details.php:36
1717
  msgid "Topics Started"
1718
  msgstr ""
1719
 
1720
- #: includes/admin/settings.php:420 includes/extend/buddypress/loader.php:210
1721
- #: includes/extend/buddypress/loader.php:315
1722
  #: templates/default/bbpress/user-details.php:42
1723
  msgid "Replies Created"
1724
  msgstr ""
1725
 
1726
- #: includes/admin/settings.php:428 includes/extend/buddypress/loader.php:334
1727
  msgid "Favorite Topics"
1728
  msgstr ""
1729
 
@@ -1976,20 +1984,20 @@ msgstr ""
1976
 
1977
  #: includes/admin/settings.php:1525
1978
  msgid ""
1979
- "Information about your previous forums database so that they can be "
1980
- "converted. <strong>Backup your database before proceeding.</strong>"
1981
  msgstr ""
1982
 
1983
  #: includes/admin/settings.php:1548
1984
- msgid "is the previous forum software"
1985
  msgstr ""
1986
 
1987
  #: includes/admin/settings.php:1562
1988
- msgid "Use default \"localhost\" if on the same server, otherwise IP or hostname"
1989
  msgstr ""
1990
 
1991
  #: includes/admin/settings.php:1576
1992
- msgid "Use default \"3306\" if unsure"
1993
  msgstr ""
1994
 
1995
  #: includes/admin/settings.php:1590
@@ -2013,7 +2021,7 @@ msgid "Some optional parameters to help tune the conversion process."
2013
  msgstr ""
2014
 
2015
  #: includes/admin/settings.php:1651
2016
- msgid "(If converting from BuddyPress Forums, use \"wp_bb_\" or your custom prefix)"
2017
  msgstr ""
2018
 
2019
  #: includes/admin/settings.php:1665
@@ -2097,166 +2105,166 @@ msgstr ""
2097
  msgid "Import Forums"
2098
  msgstr ""
2099
 
2100
- #: includes/admin/settings.php:1792
2101
- msgid "Pause"
2102
- msgstr ""
2103
-
2104
- #: includes/admin/settings.php:1802
2105
  msgid "Toggle panel: Import Status"
2106
  msgstr ""
2107
 
2108
- #: includes/admin/settings.php:1806
2109
  msgid "Import Monitor"
2110
  msgstr ""
2111
 
2112
- #: includes/admin/settings.php:1845
 
 
 
 
2113
  msgid "This screen provides access to all of the Forums settings."
2114
  msgstr ""
2115
 
2116
- #: includes/admin/settings.php:1846 includes/admin/tools/help.php:97
2117
  msgid ""
2118
  "Please see the additional help tabs for more information on each individual "
2119
  "section."
2120
  msgstr ""
2121
 
2122
- #: includes/admin/settings.php:1852
2123
  msgid "Main Settings"
2124
  msgstr ""
2125
 
2126
- #: includes/admin/settings.php:1853
2127
  msgid "The \"Main Settings\" section includes a number of options:"
2128
  msgstr ""
2129
 
2130
- #: includes/admin/settings.php:1856
2131
  msgid ""
2132
  "You can choose to lock a post after a certain number of minutes. \"Locking "
2133
  "post editing\" will prevent the author from editing some amount of time "
2134
  "after saving a post."
2135
  msgstr ""
2136
 
2137
- #: includes/admin/settings.php:1857
2138
  msgid ""
2139
  "\"Throttle time\" is the amount of time required between posts from a "
2140
  "single author. The higher the throttle time, the longer a user will need to "
2141
  "wait between posting to the forum."
2142
  msgstr ""
2143
 
2144
- #: includes/admin/settings.php:1858
2145
  msgid ""
2146
  "Favorites are a way for users to save and later return to topics they "
2147
  "favor. This is enabled by default."
2148
  msgstr ""
2149
 
2150
- #: includes/admin/settings.php:1859
2151
  msgid ""
2152
  "Subscriptions allow users to subscribe for notifications to topics that "
2153
  "interest them. This is enabled by default."
2154
  msgstr ""
2155
 
2156
- #: includes/admin/settings.php:1860
2157
  msgid ""
2158
  "Topic-Tags allow users to filter topics between forums. This is enabled by "
2159
  "default."
2160
  msgstr ""
2161
 
2162
- #: includes/admin/settings.php:1861
2163
  msgid ""
2164
  "\"Anonymous Posting\" allows guest users who do not have accounts on your "
2165
  "site to both create topics as well as replies."
2166
  msgstr ""
2167
 
2168
- #: includes/admin/settings.php:1862
2169
  msgid ""
2170
  "The Fancy Editor brings the luxury of the Visual editor and HTML editor "
2171
  "from the traditional WordPress dashboard into your theme."
2172
  msgstr ""
2173
 
2174
- #: includes/admin/settings.php:1863
2175
  msgid ""
2176
  "Auto-embed will embed the media content from a URL directly into the "
2177
  "replies. For example: links to Flickr and YouTube."
2178
  msgstr ""
2179
 
2180
- #: includes/admin/settings.php:1866
2181
  msgid ""
2182
  "You must click the Save Changes button at the bottom of the screen for new "
2183
  "settings to take effect."
2184
  msgstr ""
2185
 
2186
- #: includes/admin/settings.php:1872
2187
  msgid "Theme Packages"
2188
  msgstr ""
2189
 
2190
- #: includes/admin/settings.php:1873
2191
  msgid ""
2192
  "The \"Theme Packages\" section allows you to choose which theme package "
2193
  "should be used."
2194
  msgstr ""
2195
 
2196
- #: includes/admin/settings.php:1876
2197
  msgid "The \"bbPress Default\" package is installed by default."
2198
  msgstr ""
2199
 
2200
- #: includes/admin/settings.php:1877
2201
  msgid "Some themes may choose to ignore this setting entirely."
2202
  msgstr ""
2203
 
2204
- #: includes/admin/settings.php:1878
2205
  msgid "Packages can be stacked to allow for intelligent fallbacks."
2206
  msgstr ""
2207
 
2208
- #: includes/admin/settings.php:1886
2209
  msgid "Per Page"
2210
  msgstr ""
2211
 
2212
- #: includes/admin/settings.php:1887
2213
  msgid ""
2214
  "The \"Per Page\" section allows you to control the number of topics and "
2215
  "replies appear on each page."
2216
  msgstr ""
2217
 
2218
- #: includes/admin/settings.php:1889
2219
  msgid ""
2220
  "This is comparable to the WordPress \"Reading Settings\" page, where you "
2221
  "can set the number of posts that should show on blog pages and in feeds."
2222
  msgstr ""
2223
 
2224
- #: includes/admin/settings.php:1890
2225
  msgid ""
2226
  "These are broken up into two separate groups: one for what appears in your "
2227
  "theme, another for RSS feeds."
2228
  msgstr ""
2229
 
2230
- #: includes/admin/settings.php:1898
2231
  msgid "Slugs"
2232
  msgstr ""
2233
 
2234
- #: includes/admin/settings.php:1899
2235
  msgid ""
2236
  "The \"Slugs\" section allows you to control the permalink structure for "
2237
  "your forums."
2238
  msgstr ""
2239
 
2240
- #: includes/admin/settings.php:1901
2241
  msgid ""
2242
  "\"Archive Slugs\" are used as the \"root\" for your forums and topics. If "
2243
  "you combine these values with existing page slugs, bbPress will attempt to "
2244
  "output the most correct title and content."
2245
  msgstr ""
2246
 
2247
- #: includes/admin/settings.php:1902
2248
  msgid ""
2249
  "\"Single Slugs\" are used as a prefix when viewing an individual forum, "
2250
  "topic, reply, user, or view."
2251
  msgstr ""
2252
 
2253
- #: includes/admin/settings.php:1903
2254
  msgid ""
2255
  "In the event of a slug collision with WordPress or BuddyPress, a warning "
2256
  "will appear next to the problem slug(s)."
2257
  msgstr ""
2258
 
2259
- #: includes/admin/settings.php:1995
2260
  #: templates/default/bbpress/loop-forums.php:24
2261
  #: templates/default/bbpress/loop-replies.php:21
2262
  #: templates/default/bbpress/loop-replies.php:47
@@ -2264,108 +2272,109 @@ msgstr ""
2264
  msgid "Posts"
2265
  msgstr ""
2266
 
2267
- #: includes/admin/settings.php:1996
2268
  msgid "Pages"
2269
  msgstr ""
2270
 
2271
- #: includes/admin/settings.php:1998
2272
  msgid "Attachments"
2273
  msgstr ""
2274
 
2275
- #: includes/admin/settings.php:1999
2276
  msgid "Menus"
2277
  msgstr ""
2278
 
2279
- #: includes/admin/settings.php:2002
2280
  msgid "Tag base"
2281
  msgstr ""
2282
 
2283
- #: includes/admin/settings.php:2005
2284
  msgid "Category base"
2285
  msgstr ""
2286
 
2287
- #: includes/admin/settings.php:2010
2288
  msgid "Forums base"
2289
  msgstr ""
2290
 
2291
- #: includes/admin/settings.php:2013
2292
  msgid "Topics base"
2293
  msgstr ""
2294
 
2295
- #: includes/admin/settings.php:2016
2296
  msgid "Forum slug"
2297
  msgstr ""
2298
 
2299
- #: includes/admin/settings.php:2019
2300
  msgid "Topic slug"
2301
  msgstr ""
2302
 
2303
- #: includes/admin/settings.php:2022
2304
  msgid "Reply slug"
2305
  msgstr ""
2306
 
2307
- #: includes/admin/settings.php:2025
2308
  msgid "User base"
2309
  msgstr ""
2310
 
2311
- #: includes/admin/settings.php:2028
2312
  msgid "View base"
2313
  msgstr ""
2314
 
2315
- #: includes/admin/settings.php:2031
2316
  msgid "Topic tag slug"
2317
  msgstr ""
2318
 
2319
- #: includes/admin/settings.php:2043
2320
  msgid "%s page"
2321
  msgstr ""
2322
 
2323
- #: includes/admin/settings.php:2066
2324
  msgid "Possible %1$s conflict: %2$s"
2325
  msgstr ""
2326
 
2327
- #: includes/admin/tools/common.php:230
2328
  msgid "Search Tools:"
2329
  msgstr ""
2330
 
2331
- #: includes/admin/tools/common.php:232
2332
  msgid "Search Tools"
2333
  msgstr ""
2334
 
2335
- #: includes/admin/tools/common.php:253
2336
  msgid "Filter by Component"
2337
  msgstr ""
2338
 
2339
- #: includes/admin/tools/common.php:255
2340
  msgid "All Components"
2341
  msgstr ""
2342
 
2343
- #: includes/admin/tools/common.php:264
2344
  msgid "Filter"
2345
  msgstr ""
2346
 
2347
- #: includes/admin/tools/common.php:282
2348
  msgid "Low"
2349
  msgstr ""
2350
 
2351
- #: includes/admin/tools/common.php:285
2352
  msgid "Medium"
2353
  msgstr ""
2354
 
2355
- #: includes/admin/tools/common.php:288
2356
  msgid "High"
2357
  msgstr ""
2358
 
2359
- #: includes/admin/tools/common.php:311 includes/admin/tools/common.php:326
2360
  msgid "Users"
2361
  msgstr ""
2362
 
2363
- #: includes/admin/tools/common.php:323 includes/topics/template.php:3379
 
2364
  #: templates/default/bbpress/content-statistics.php:40
2365
  msgid "Topic Tags"
2366
  msgstr ""
2367
 
2368
- #: includes/admin/tools/common.php:504
2369
  msgid "All %s"
2370
  msgstr ""
2371
 
@@ -2547,7 +2556,7 @@ msgstr ""
2547
  #: includes/admin/tools/repair.php:653 includes/admin/tools/repair.php:722
2548
  #: includes/admin/tools/repair.php:830 includes/admin/tools/repair.php:951
2549
  #: includes/admin/tools/repair.php:1063 includes/admin/tools/repair.php:1083
2550
- #: includes/admin/tools/repair.php:1134 includes/admin/tools/reset.php:99
2551
  #: includes/admin/tools/upgrade.php:242
2552
  msgid "Failed!"
2553
  msgstr ""
@@ -2672,16 +2681,17 @@ msgid "The following data will be removed:"
2672
  msgstr ""
2673
 
2674
  #: includes/admin/tools/reset.php:33 includes/forums/template.php:51
 
2675
  msgid "All Forums"
2676
  msgstr ""
2677
 
2678
- #: includes/admin/tools/reset.php:34 includes/topics/functions.php:3653
2679
- #: includes/topics/template.php:50
2680
  msgid "All Topics"
2681
  msgstr ""
2682
 
2683
- #: includes/admin/tools/reset.php:35 includes/replies/functions.php:2057
2684
- #: includes/replies/template.php:52
2685
  msgid "All Replies"
2686
  msgstr ""
2687
 
@@ -2746,52 +2756,56 @@ msgstr ""
2746
  msgid "Reset bbPress"
2747
  msgstr ""
2748
 
2749
- #: includes/admin/tools/reset.php:100
 
 
 
 
2750
  msgid "Success!"
2751
  msgstr ""
2752
 
2753
- #: includes/admin/tools/reset.php:114
2754
- msgid "Deleting Posts&hellip; %s"
2755
  msgstr ""
2756
 
2757
- #: includes/admin/tools/reset.php:128
2758
- msgid "Deleting Post Meta&hellip; %s"
2759
  msgstr ""
2760
 
2761
- #: includes/admin/tools/reset.php:142
2762
- msgid "Deleting Post Revisions&hellip; %s"
2763
  msgstr ""
2764
 
2765
- #: includes/admin/tools/reset.php:151
2766
- msgid "Deleting Forum Moderators&hellip; %s"
2767
  msgstr ""
2768
 
2769
- #: includes/admin/tools/reset.php:158
2770
  msgid "Deleting Topic Tags&hellip; %s"
2771
  msgstr ""
2772
 
2773
- #: includes/admin/tools/reset.php:173
2774
  msgid "Deleting Imported Users&hellip; %s"
2775
  msgstr ""
2776
 
2777
- #: includes/admin/tools/reset.php:178
2778
  msgid "Deleting Imported User Meta&hellip; %s"
2779
  msgstr ""
2780
 
2781
- #: includes/admin/tools/reset.php:186
2782
- msgid "Deleting User Meta&hellip; %s"
2783
  msgstr ""
2784
 
2785
- #: includes/admin/tools/reset.php:193
2786
- msgid "Deleting Conversion Table&hellip; %s"
2787
  msgstr ""
2788
 
2789
- #: includes/admin/tools/reset.php:205
2790
- msgid "Deleting Settings&hellip; %s"
2791
  msgstr ""
2792
 
2793
- #: includes/admin/tools/reset.php:211
2794
- msgid "Deleting Roles and Capabilities&hellip; %s"
2795
  msgstr ""
2796
 
2797
  #: includes/admin/tools/upgrade.php:26 includes/admin/tools.php:508
@@ -3144,101 +3158,101 @@ msgstr ""
3144
  msgid "Run this if you just upgraded BuddyPress Forums from Legacy."
3145
  msgstr ""
3146
 
3147
- #: includes/admin/topics.php:118
3148
  msgid ""
3149
  "This screen displays the individual topics on your site. You can customize "
3150
  "the display of this screen to suit your workflow."
3151
  msgstr ""
3152
 
3153
- #: includes/admin/topics.php:128
3154
  msgid ""
3155
  "You can hide/display columns based on your needs and decide how many topics "
3156
  "to list per screen using the Screen Options tab."
3157
  msgstr ""
3158
 
3159
- #: includes/admin/topics.php:129
3160
  msgid ""
3161
  "You can filter the list of topics by topic status using the text links in "
3162
  "the upper left to show All, Published, Draft, Pending, Trashed, Closed, or "
3163
  "Spam topics. The default view is to show all topics."
3164
  msgstr ""
3165
 
3166
- #: includes/admin/topics.php:130
3167
  msgid ""
3168
  "You can view topics in a simple title list or with an excerpt. Choose the "
3169
  "view you prefer by clicking on the icons at the top of the list on the "
3170
  "right."
3171
  msgstr ""
3172
 
3173
- #: includes/admin/topics.php:131
3174
  msgid ""
3175
  "You can refine the list to show only topics in a specific forum or from a "
3176
  "specific month by using the dropdown menus above the topics list. Click the "
3177
  "Filter button after making your selection."
3178
  msgstr ""
3179
 
3180
- #: includes/admin/topics.php:140
3181
  msgid ""
3182
  "Hovering over a row in the topics list will display action links that allow "
3183
  "you to manage your topic. You can perform the following actions:"
3184
  msgstr ""
3185
 
3186
- #: includes/admin/topics.php:142
3187
  msgid ""
3188
  "<strong>Edit</strong> takes you to the editing screen for that topic. You "
3189
  "can also reach that screen by clicking on the topic title."
3190
  msgstr ""
3191
 
3192
- #: includes/admin/topics.php:143
3193
  msgid ""
3194
- "<strong>Trash</strong> removes your topic from this list and places it in "
3195
- "the trash, from which you can permanently delete it."
3196
  msgstr ""
3197
 
3198
- #: includes/admin/topics.php:144
3199
  msgid ""
3200
- "<strong>Spam</strong> removes your topic from this list and places it in "
3201
- "the spam queue, from which you can permanently delete it."
3202
- msgstr ""
3203
-
3204
- #: includes/admin/topics.php:145
3205
- msgid "<strong>View</strong> will take you to your live site to view the topic."
3206
  msgstr ""
3207
 
3208
- #: includes/admin/topics.php:147
3209
  msgid ""
3210
  "<strong>Close</strong> will mark the selected topic as &#8217;closed&#8217; "
3211
- "and disable the option to post new replies to the topic."
3212
  msgstr ""
3213
 
3214
- #: includes/admin/topics.php:148
3215
  msgid ""
3216
- "<strong>Stick</strong> will keep the selected topic &#8217;pinned&#8217; to "
3217
- "the top the parent forum topic list."
3218
  msgstr ""
3219
 
3220
- #: includes/admin/topics.php:149
3221
  msgid ""
3222
- "<strong>Stick <em>(to front)</em></strong> will keep the selected topic "
3223
- "&#8217;pinned&#8217; to the top of ALL forums and be visable in any forums "
3224
- "topics list."
3225
  msgstr ""
3226
 
3227
- #: includes/admin/topics.php:158
 
 
 
 
3228
  msgid ""
3229
  "You can also edit, spam, or move multiple topics to the trash at once. "
3230
  "Select the topics you want to act on using the checkboxes, then select the "
3231
  "action you want to take from the Bulk Actions menu and click Apply."
3232
  msgstr ""
3233
 
3234
- #: includes/admin/topics.php:159
3235
  msgid ""
3236
  "When using Bulk Edit, you can change the metadata (categories, author, "
3237
  "etc.) for all selected topics at once. To remove a topic from the grouping, "
3238
  "just click the x next to its name in the Bulk Edit area that appears."
3239
  msgstr ""
3240
 
3241
- #: includes/admin/topics.php:177
3242
  msgid ""
3243
  "The title field and the big topic editing Area are fixed in place, but you "
3244
  "can reposition all the other boxes using drag and drop, and can minimize or "
@@ -3248,17 +3262,17 @@ msgid ""
3248
  "screen."
3249
  msgstr ""
3250
 
3251
- #: includes/admin/topics.php:187
3252
  msgid "Title and Topic Editor"
3253
  msgstr ""
3254
 
3255
- #: includes/admin/topics.php:189
3256
  msgid ""
3257
  "<strong>Title</strong> - Enter a title for your topic. After you enter a "
3258
  "title, you&#8217;ll see the permalink below, which you can edit."
3259
  msgstr ""
3260
 
3261
- #: includes/admin/topics.php:190
3262
  msgid ""
3263
  "<strong>Topic Editor</strong> - Enter the text for your topic. There are "
3264
  "two modes of editing: Visual and HTML. Choose the mode by clicking on the "
@@ -3273,7 +3287,7 @@ msgid ""
3273
  "editor."
3274
  msgstr ""
3275
 
3276
- #: includes/admin/topics.php:193
3277
  msgid ""
3278
  "<strong>Publish</strong> - You can set the terms of publishing your topic "
3279
  "in the Publish box. For Status, Visibility, and Publish (immediately), "
@@ -3284,7 +3298,7 @@ msgid ""
3284
  "future or backdate a topic."
3285
  msgstr ""
3286
 
3287
- #: includes/admin/topics.php:196
3288
  msgid ""
3289
  "<strong>Featured Image</strong> - This allows you to associate an image "
3290
  "with your topic without inserting it. This is usually useful only if your "
@@ -3292,22 +3306,23 @@ msgid ""
3292
  "page, a custom header, etc."
3293
  msgstr ""
3294
 
3295
- #: includes/admin/topics.php:201 includes/admin/topics.php:338
 
3296
  msgid "Topic Attributes"
3297
  msgstr ""
3298
 
3299
- #: includes/admin/topics.php:203
3300
  msgid "Select the attributes that your topic should have:"
3301
  msgstr ""
3302
 
3303
- #: includes/admin/topics.php:205
3304
  msgid ""
3305
  "<strong>Forum</strong> dropdown determines the parent forum that the topic "
3306
  "belongs to. Select the forum or category from the dropdown, or leave the "
3307
  "default \"No forum\" to post the topic without an assigned forum."
3308
  msgstr ""
3309
 
3310
- #: includes/admin/topics.php:206
3311
  msgid ""
3312
  "<strong>Topic Type</strong> dropdown indicates the sticky status of the "
3313
  "topic. Selecting the super sticky option would stick the topic to the front "
@@ -3316,203 +3331,203 @@ msgid ""
3316
  "anywhere."
3317
  msgstr ""
3318
 
3319
- #: includes/admin/topics.php:253
3320
  msgid "%s topic updated."
3321
  msgid_plural "%s topics updated."
3322
  msgstr[0] ""
3323
  msgstr[1] ""
3324
 
3325
- #: includes/admin/topics.php:255
3326
  msgid "1 topic not updated, somebody is editing it."
3327
  msgstr ""
3328
 
3329
- #: includes/admin/topics.php:256
3330
  msgid "%s topic not updated, somebody is editing it."
3331
  msgid_plural "%s topics not updated, somebody is editing them."
3332
  msgstr[0] ""
3333
  msgstr[1] ""
3334
 
3335
- #: includes/admin/topics.php:289
3336
  msgid "Error in spamming topic."
3337
  msgstr ""
3338
 
3339
- #: includes/admin/topics.php:305
3340
  msgid "Sorry, you are not allowed to unspam this topic."
3341
  msgstr ""
3342
 
3343
- #: includes/admin/topics.php:314
3344
  msgid "Error in unspamming topic."
3345
  msgstr ""
3346
 
3347
- #: includes/admin/topics.php:574
3348
  msgid "The topic was not found."
3349
  msgstr ""
3350
 
3351
- #: includes/admin/topics.php:710
3352
  msgid "There was a problem opening the topic \"%1$s\"."
3353
  msgstr ""
3354
 
3355
- #: includes/admin/topics.php:711
3356
  msgid "Topic \"%1$s\" successfully opened."
3357
  msgstr ""
3358
 
3359
- #: includes/admin/topics.php:716
3360
  msgid "There was a problem closing the topic \"%1$s\"."
3361
  msgstr ""
3362
 
3363
- #: includes/admin/topics.php:717
3364
  msgid "Topic \"%1$s\" successfully closed."
3365
  msgstr ""
3366
 
3367
- #: includes/admin/topics.php:722
3368
  msgid "There was a problem sticking the topic \"%1$s\" to front."
3369
  msgstr ""
3370
 
3371
- #: includes/admin/topics.php:723
3372
  msgid "Topic \"%1$s\" successfully stuck to front."
3373
  msgstr ""
3374
 
3375
- #: includes/admin/topics.php:728
3376
  msgid "There was a problem sticking the topic \"%1$s\"."
3377
  msgstr ""
3378
 
3379
- #: includes/admin/topics.php:729
3380
  msgid "Topic \"%1$s\" successfully stuck."
3381
  msgstr ""
3382
 
3383
- #: includes/admin/topics.php:734
3384
  msgid "There was a problem unsticking the topic \"%1$s\"."
3385
  msgstr ""
3386
 
3387
- #: includes/admin/topics.php:735
3388
  msgid "Topic \"%1$s\" successfully unstuck."
3389
  msgstr ""
3390
 
3391
- #: includes/admin/topics.php:740
3392
  msgid "There was a problem marking the topic \"%1$s\" as spam."
3393
  msgstr ""
3394
 
3395
- #: includes/admin/topics.php:741
3396
  msgid "Topic \"%1$s\" successfully marked as spam."
3397
  msgstr ""
3398
 
3399
- #: includes/admin/topics.php:746
3400
  msgid "There was a problem unmarking the topic \"%1$s\" as spam."
3401
  msgstr ""
3402
 
3403
- #: includes/admin/topics.php:747
3404
  msgid "Topic \"%1$s\" successfully unmarked as spam."
3405
  msgstr ""
3406
 
3407
- #: includes/admin/topics.php:752
3408
  msgid "There was a problem approving the topic \"%1$s\"."
3409
  msgstr ""
3410
 
3411
- #: includes/admin/topics.php:753
3412
  msgid "Topic \"%1$s\" successfully approved."
3413
  msgstr ""
3414
 
3415
- #: includes/admin/topics.php:758
3416
  msgid "There was a problem unapproving the topic \"%1$s\"."
3417
  msgstr ""
3418
 
3419
- #: includes/admin/topics.php:759
3420
  msgid "Topic \"%1$s\" successfully unapproved."
3421
  msgstr ""
3422
 
3423
- #: includes/admin/topics.php:834 templates/default/bbpress/loop-topics.php:19
3424
  msgid "Voices"
3425
  msgstr ""
3426
 
3427
- #: includes/admin/topics.php:912 includes/topics/template.php:2002
3428
  msgid "No Replies"
3429
  msgstr ""
3430
 
3431
- #: includes/admin/topics.php:960
3432
  msgid "Unapprove this topic"
3433
  msgstr ""
3434
 
3435
- #: includes/admin/topics.php:962
3436
  msgid "Approve this topic"
3437
  msgstr ""
3438
 
3439
- #: includes/admin/topics.php:971
3440
  msgid "Close this topic"
3441
  msgstr ""
3442
 
3443
- #: includes/admin/topics.php:973
3444
  msgid "Open this topic"
3445
  msgstr ""
3446
 
3447
- #: includes/admin/topics.php:982
3448
  msgid "Unstick this topic"
3449
  msgstr ""
3450
 
3451
- #: includes/admin/topics.php:982 includes/topics/template.php:2703
3452
  msgid "Unstick"
3453
  msgstr ""
3454
 
3455
- #: includes/admin/topics.php:985
3456
  msgid "Stick this topic to its forum"
3457
  msgstr ""
3458
 
3459
- #: includes/admin/topics.php:985 includes/topics/template.php:2702
3460
  msgid "Stick"
3461
  msgstr ""
3462
 
3463
- #: includes/admin/topics.php:985
3464
  msgid "Stick this topic to front"
3465
  msgstr ""
3466
 
3467
- #: includes/admin/topics.php:985 includes/topics/template.php:2704
3468
  msgid "(to front)"
3469
  msgstr ""
3470
 
3471
- #: includes/admin/topics.php:992
3472
- msgid "Mark the topic as not spam"
3473
  msgstr ""
3474
 
3475
- #: includes/admin/topics.php:994
3476
- msgid "Mark this topic as spam"
3477
  msgstr ""
3478
 
3479
- #: includes/admin/topics.php:1099 includes/admin/topics.php:1111
3480
  msgid "Topic updated."
3481
  msgstr ""
3482
 
3483
- #: includes/admin/topics.php:1116
3484
  #. translators: %s: date and time of the revision
3485
  msgid "Topic restored to revision from %s"
3486
  msgstr ""
3487
 
3488
- #: includes/admin/topics.php:1122
3489
  msgid "Topic created."
3490
  msgstr ""
3491
 
3492
- #: includes/admin/topics.php:1128
3493
  msgid "Topic saved."
3494
  msgstr ""
3495
 
3496
- #: includes/admin/topics.php:1133
3497
  msgid "Topic submitted."
3498
  msgstr ""
3499
 
3500
- #: includes/admin/topics.php:1142
3501
  msgid "Topic scheduled for: %s."
3502
  msgstr ""
3503
 
3504
- #: includes/admin/topics.php:1153
3505
  msgid "Topic draft updated."
3506
  msgstr ""
3507
 
3508
- #: includes/admin/users.php:98 includes/admin/users.php:277
3509
  #: includes/users/signups.php:26
3510
  #: templates/default/bbpress/form-user-roles.php:23
3511
  msgid "Forum Role"
3512
  msgstr ""
3513
 
3514
  #: includes/admin/users.php:107 includes/admin/users.php:111
3515
- #: includes/users/template.php:1540
3516
  msgid "&mdash; No role for these forums &mdash;"
3517
  msgstr ""
3518
 
@@ -3524,93 +3539,93 @@ msgstr ""
3524
  msgid "Change"
3525
  msgstr ""
3526
 
3527
- #: includes/admin/users.php:276
3528
  msgid "Site Role"
3529
  msgstr ""
3530
 
3531
- #: includes/common/classes.php:493 includes/replies/template.php:2506
3532
  msgid "%1$s - %2$s"
3533
  msgstr ""
3534
 
3535
- #: includes/common/formatting.php:626
3536
  msgid "sometime"
3537
  msgstr ""
3538
 
3539
- #: includes/common/formatting.php:627
3540
  msgid "right now"
3541
  msgstr ""
3542
 
3543
- #: includes/common/formatting.php:628
3544
  msgid "%s ago"
3545
  msgstr ""
3546
 
3547
- #: includes/common/formatting.php:632
3548
  msgid "%s year"
3549
  msgid_plural "%s years"
3550
  msgstr[0] ""
3551
  msgstr[1] ""
3552
 
3553
- #: includes/common/formatting.php:633
3554
  msgid "%s month"
3555
  msgid_plural "%s months"
3556
  msgstr[0] ""
3557
  msgstr[1] ""
3558
 
3559
- #: includes/common/formatting.php:634
3560
  msgid "%s week"
3561
  msgid_plural "%s weeks"
3562
  msgstr[0] ""
3563
  msgstr[1] ""
3564
 
3565
- #: includes/common/formatting.php:635
3566
  msgid "%s day"
3567
  msgid_plural "%s days"
3568
  msgstr[0] ""
3569
  msgstr[1] ""
3570
 
3571
- #: includes/common/formatting.php:636
3572
  msgid "%s hour"
3573
  msgid_plural "%s hours"
3574
  msgstr[0] ""
3575
  msgstr[1] ""
3576
 
3577
- #: includes/common/formatting.php:637
3578
  msgid "%s minute"
3579
  msgid_plural "%s minutes"
3580
  msgstr[0] ""
3581
  msgstr[1] ""
3582
 
3583
- #: includes/common/formatting.php:638
3584
  msgid "%s second"
3585
  msgid_plural "%s seconds"
3586
  msgstr[0] ""
3587
  msgstr[1] ""
3588
 
3589
- #: includes/common/functions.php:355 includes/common/functions.php:413
3590
  msgid "Pending: %s"
3591
  msgstr ""
3592
 
3593
- #: includes/common/functions.php:359 includes/common/functions.php:416
3594
  msgid "Private: %s"
3595
  msgstr ""
3596
 
3597
- #: includes/common/functions.php:363 includes/common/functions.php:420
3598
  msgid "Spammed: %s"
3599
  msgstr ""
3600
 
3601
- #: includes/common/functions.php:367 includes/common/functions.php:424
3602
  msgid "Trashed: %s"
3603
  msgstr ""
3604
 
3605
- #: includes/common/functions.php:508
3606
  msgid "<strong>ERROR</strong>: Invalid author name."
3607
  msgstr ""
3608
 
3609
- #: includes/common/functions.php:514
3610
  msgid "<strong>ERROR</strong>: Invalid email address."
3611
  msgstr ""
3612
 
3613
- #: includes/common/functions.php:1094
3614
  msgid ""
3615
  "%1$s wrote:\n"
3616
  "\n"
@@ -3625,7 +3640,7 @@ msgid ""
3625
  "Login and visit the topic to unsubscribe from these emails."
3626
  msgstr ""
3627
 
3628
- #: includes/common/functions.php:1247
3629
  msgid ""
3630
  "%1$s wrote:\n"
3631
  "\n"
@@ -3640,127 +3655,127 @@ msgid ""
3640
  "Login and visit the topic to unsubscribe from these emails."
3641
  msgstr ""
3642
 
3643
- #: includes/common/template.php:1560
3644
  msgid "No topics available"
3645
  msgstr ""
3646
 
3647
- #: includes/common/template.php:1565
3648
  msgid "No forums available"
3649
  msgstr ""
3650
 
3651
- #: includes/common/template.php:1570
3652
  msgid "None available"
3653
  msgstr ""
3654
 
3655
- #: includes/common/template.php:2179
3656
  msgid "Home"
3657
  msgstr ""
3658
 
3659
- #: includes/common/template.php:2249
3660
  msgid "(Edit)"
3661
  msgstr ""
3662
 
3663
- #: includes/common/template.php:2253 includes/common/template.php:2368
3664
- #: includes/common/template.php:2613 includes/core/theme-compat.php:794
3665
  #: templates/default/extras/taxonomy-topic-tag-edit.php:17
3666
  #: templates/default/extras/taxonomy-topic-tag.php:17
3667
  msgid "Topic Tag: %s"
3668
  msgstr ""
3669
 
3670
- #: includes/common/template.php:2274
3671
  msgid "&lsaquo;"
3672
  msgstr ""
3673
 
3674
- #: includes/common/template.php:2274
3675
  msgid "&rsaquo;"
3676
  msgstr ""
3677
 
3678
- #: includes/common/template.php:2537
3679
  msgid "Log Out"
3680
  msgstr ""
3681
 
3682
- #: includes/common/template.php:2577
3683
  msgid "Forum Edit: %s"
3684
  msgstr ""
3685
 
3686
- #: includes/common/template.php:2582
3687
  msgid "Topic Edit: %s"
3688
  msgstr ""
3689
 
3690
- #: includes/common/template.php:2587
3691
  msgid "Reply Edit: %s"
3692
  msgstr ""
3693
 
3694
- #: includes/common/template.php:2592
3695
  msgid "Topic Tag Edit: %s"
3696
  msgstr ""
3697
 
3698
- #: includes/common/template.php:2599
3699
  msgid "Forum: %s"
3700
  msgstr ""
3701
 
3702
- #: includes/common/template.php:2604
3703
  msgid "Topic: %s"
3704
  msgstr ""
3705
 
3706
- #: includes/common/template.php:2626
3707
  msgid "Your Topics"
3708
  msgstr ""
3709
 
3710
- #: includes/common/template.php:2630
3711
  #. translators: user's display name
3712
  msgid "%s's Topics"
3713
  msgstr ""
3714
 
3715
- #: includes/common/template.php:2636
3716
  msgid "Your Replies"
3717
  msgstr ""
3718
 
3719
- #: includes/common/template.php:2640
3720
  #. translators: user's display name
3721
  msgid "%s's Replies"
3722
  msgstr ""
3723
 
3724
- #: includes/common/template.php:2646
3725
  msgid "Your Favorites"
3726
  msgstr ""
3727
 
3728
- #: includes/common/template.php:2650
3729
  #: templates/default/bbpress/user-details.php:57
3730
  #. translators: user's display name
3731
  msgid "%s's Favorites"
3732
  msgstr ""
3733
 
3734
- #: includes/common/template.php:2656
3735
  msgid "Your Subscriptions"
3736
  msgstr ""
3737
 
3738
- #: includes/common/template.php:2660
3739
  #: templates/default/bbpress/user-details.php:67
3740
  #. translators: user's display name
3741
  msgid "%s's Subscriptions"
3742
  msgstr ""
3743
 
3744
- #: includes/common/template.php:2666
3745
  msgid "Your Profile"
3746
  msgstr ""
3747
 
3748
- #: includes/common/template.php:2670
3749
  #: templates/default/bbpress/user-details.php:30
3750
  #. translators: user's display name
3751
  msgid "%s's Profile"
3752
  msgstr ""
3753
 
3754
- #: includes/common/template.php:2679
3755
  msgid "Edit Your Profile"
3756
  msgstr ""
3757
 
3758
- #: includes/common/template.php:2684
3759
  #: templates/default/bbpress/user-details.php:74
3760
  msgid "Edit %s's Profile"
3761
  msgstr ""
3762
 
3763
- #: includes/common/template.php:2692
3764
  msgid "View: %s"
3765
  msgstr ""
3766
 
@@ -3768,164 +3783,165 @@ msgstr ""
3768
  msgid "A simple login form with optional links to sign-up and lost password pages."
3769
  msgstr ""
3770
 
3771
- #: includes/common/widgets.php:37
3772
  msgid "(bbPress) Login Widget"
3773
  msgstr ""
3774
 
3775
- #: includes/common/widgets.php:80 includes/common/widgets.php:101
3776
  #: templates/default/bbpress/form-user-login.php:17
3777
  #: templates/default/bbpress/form-user-login.php:38
3778
  msgid "Log In"
3779
  msgstr ""
3780
 
3781
- #: includes/common/widgets.php:83
3782
  #: templates/default/bbpress/form-user-edit.php:107
3783
  #: templates/default/bbpress/form-user-login.php:20
3784
  #: templates/default/bbpress/form-user-register.php:29
3785
  msgid "Username"
3786
  msgstr ""
3787
 
3788
- #: includes/common/widgets.php:88
3789
  #: templates/default/bbpress/form-user-login.php:25
3790
  #: templates/default/bbpress/form-user-passwords.php:17
3791
  msgid "Password"
3792
  msgstr ""
3793
 
3794
- #: includes/common/widgets.php:94
3795
- msgid "Remember Me"
 
3796
  msgstr ""
3797
 
3798
- #: includes/common/widgets.php:113
3799
  #: templates/default/bbpress/form-user-register.php:42
3800
  msgid "Register"
3801
  msgstr ""
3802
 
3803
- #: includes/common/widgets.php:119
3804
  #: templates/default/bbpress/form-user-lost-pass.php:17
3805
  msgid "Lost Password"
3806
  msgstr ""
3807
 
3808
- #: includes/common/widgets.php:174 includes/common/widgets.php:318
3809
- #: includes/common/widgets.php:434 includes/common/widgets.php:595
3810
- #: includes/common/widgets.php:866 includes/common/widgets.php:1009
3811
- #: includes/common/widgets.php:1214
3812
  msgid "Title:"
3813
  msgstr ""
3814
 
3815
- #: includes/common/widgets.php:179
3816
  msgid "Register URI:"
3817
  msgstr ""
3818
 
3819
- #: includes/common/widgets.php:184
3820
  msgid "Lost Password URI:"
3821
  msgstr ""
3822
 
3823
- #: includes/common/widgets.php:226
3824
  msgid "A list of registered optional topic views."
3825
  msgstr ""
3826
 
3827
- #: includes/common/widgets.php:229
3828
  msgid "(bbPress) Topic Views List"
3829
  msgstr ""
3830
 
3831
- #: includes/common/widgets.php:359
3832
  msgid "The bbPress forum search form."
3833
  msgstr ""
3834
 
3835
- #: includes/common/widgets.php:362
3836
  msgid "(bbPress) Forum Search Form"
3837
  msgstr ""
3838
 
3839
- #: includes/common/widgets.php:451 includes/forums/template.php:60
3840
  msgid "Search Forums"
3841
  msgstr ""
3842
 
3843
- #: includes/common/widgets.php:475
3844
  msgid "A list of forums with an option to set the parent."
3845
  msgstr ""
3846
 
3847
- #: includes/common/widgets.php:478
3848
  msgid "(bbPress) Forums List"
3849
  msgstr ""
3850
 
3851
- #: includes/common/widgets.php:601 includes/common/widgets.php:870
3852
  msgid "Parent Forum ID:"
3853
  msgstr ""
3854
 
3855
- #: includes/common/widgets.php:607 includes/common/widgets.php:876
3856
  msgid "\"0\" to show only root - \"any\" to show all"
3857
  msgstr ""
3858
 
3859
- #: includes/common/widgets.php:647
3860
  msgid "A list of recent topics, sorted by: newness, popularity, or recent replies."
3861
  msgstr ""
3862
 
3863
- #: includes/common/widgets.php:650
3864
  msgid "(bbPress) Recent Topics"
3865
  msgstr ""
3866
 
3867
- #: includes/common/widgets.php:867
3868
  msgid "Maximum topics to show:"
3869
  msgstr ""
3870
 
3871
- #: includes/common/widgets.php:879 includes/common/widgets.php:1216
3872
  msgid "Show post date:"
3873
  msgstr ""
3874
 
3875
- #: includes/common/widgets.php:880
3876
  msgid "Show topic author:"
3877
  msgstr ""
3878
 
3879
- #: includes/common/widgets.php:883
3880
  msgid "Order By:"
3881
  msgstr ""
3882
 
3883
- #: includes/common/widgets.php:885
3884
  msgid "Newest Topics"
3885
  msgstr ""
3886
 
3887
- #: includes/common/widgets.php:886
3888
  #: templates/default/extras/page-forum-statistics.php:34
3889
  msgid "Popular Topics"
3890
  msgstr ""
3891
 
3892
- #: includes/common/widgets.php:887
3893
  msgid "Topics With Recent Replies"
3894
  msgstr ""
3895
 
3896
- #: includes/common/widgets.php:903
3897
  msgid "Recent Topics"
3898
  msgstr ""
3899
 
3900
- #: includes/common/widgets.php:932
3901
  msgid "Some statistics from your forum."
3902
  msgstr ""
3903
 
3904
- #: includes/common/widgets.php:935
3905
  msgid "(bbPress) Statistics"
3906
  msgstr ""
3907
 
3908
- #: includes/common/widgets.php:1026
3909
  msgid "Forum Statistics"
3910
  msgstr ""
3911
 
3912
- #: includes/common/widgets.php:1050
3913
  msgid "A list of the most recent replies."
3914
  msgstr ""
3915
 
3916
- #: includes/common/widgets.php:1053
3917
  msgid "(bbPress) Recent Replies"
3918
  msgstr ""
3919
 
3920
- #: includes/common/widgets.php:1215
3921
  msgid "Maximum replies to show:"
3922
  msgstr ""
3923
 
3924
- #: includes/common/widgets.php:1217
3925
  msgid "Show reply author:"
3926
  msgstr ""
3927
 
3928
- #: includes/common/widgets.php:1231
3929
  msgid "Recent Replies"
3930
  msgstr ""
3931
 
@@ -3933,24 +3949,24 @@ msgstr ""
3933
  msgid "Editable forum roles no longer exist."
3934
  msgstr ""
3935
 
3936
- #: includes/core/update.php:183
3937
  msgid "General"
3938
  msgstr ""
3939
 
3940
- #: includes/core/update.php:184
3941
- msgid "General chit-chat"
3942
  msgstr ""
3943
 
3944
- #: includes/core/update.php:187
3945
  msgid "Hello World!"
3946
  msgstr ""
3947
 
3948
- #: includes/core/update.php:188
3949
- msgid "I am the first topic in your new forums."
3950
  msgstr ""
3951
 
3952
- #: includes/core/update.php:191
3953
- msgid "Oh, and this is what a reply looks like."
3954
  msgstr ""
3955
 
3956
  #: includes/extend/akismet.php:315
@@ -3991,7 +4007,7 @@ msgstr ""
3991
  msgid "Akismet caught this post as spam"
3992
  msgstr ""
3993
 
3994
- #: includes/extend/akismet.php:499 includes/extend/akismet.php:514
3995
  msgid "Post status was changed to %s"
3996
  msgstr ""
3997
 
@@ -3999,17 +4015,17 @@ msgstr ""
3999
  msgid "Akismet cleared this post as not spam"
4000
  msgstr ""
4001
 
4002
- #: includes/extend/akismet.php:521
4003
  msgid ""
4004
  "Akismet was unable to check this post (response: %s), will automatically "
4005
  "retry again later."
4006
  msgstr ""
4007
 
4008
- #: includes/extend/akismet.php:722 includes/extend/akismet.php:732
4009
  msgid "Akismet History"
4010
  msgstr ""
4011
 
4012
- #: includes/extend/akismet.php:776
4013
  msgid "No recorded history. Akismet has not checked this post."
4014
  msgstr ""
4015
 
@@ -4021,77 +4037,77 @@ msgstr ""
4021
  msgid "New forum reply"
4022
  msgstr ""
4023
 
4024
- #: includes/extend/buddypress/activity.php:450
4025
- #: includes/extend/buddypress/functions.php:769
4026
  msgid "%1$s started the topic %2$s in the forum %3$s"
4027
  msgstr ""
4028
 
4029
- #: includes/extend/buddypress/activity.php:588
4030
- #: includes/extend/buddypress/functions.php:770
4031
  msgid "%1$s replied to the topic %2$s in the forum %3$s"
4032
  msgstr ""
4033
 
4034
- #: includes/extend/buddypress/groups.php:330
4035
- #: includes/extend/buddypress/groups.php:333
4036
  msgid "Group Forum Settings"
4037
  msgstr ""
4038
 
4039
- #: includes/extend/buddypress/groups.php:334
4040
- #: includes/extend/buddypress/groups.php:533
4041
  msgid ""
4042
  "Create a discussion forum to allow members of this group to communicate in "
4043
  "a structured, bulletin-board style fashion."
4044
  msgstr ""
4045
 
4046
- #: includes/extend/buddypress/groups.php:338
4047
- #: includes/extend/buddypress/groups.php:536
4048
  msgid "Yes. I want this group to have a forum."
4049
  msgstr ""
4050
 
4051
- #: includes/extend/buddypress/groups.php:341
4052
  msgid "Saying no will not delete existing forum content."
4053
  msgstr ""
4054
 
4055
- #: includes/extend/buddypress/groups.php:346
4056
  msgid "Group Forum:"
4057
  msgstr ""
4058
 
4059
- #: includes/extend/buddypress/groups.php:354
4060
  msgid "Network administrators can reconfigure which forum belongs to this group."
4061
  msgstr ""
4062
 
4063
- #: includes/extend/buddypress/groups.php:359
4064
  msgid "Save Settings"
4065
  msgstr ""
4066
 
4067
- #: includes/extend/buddypress/groups.php:394
4068
- #: includes/extend/buddypress/groups.php:551
4069
- #: includes/extend/buddypress/notifications.php:195
4070
- #: includes/forums/functions.php:122 includes/forums/functions.php:384
4071
- #: includes/replies/functions.php:129 includes/replies/functions.php:507
4072
- #: includes/replies/functions.php:1210 includes/topics/functions.php:105
4073
- #: includes/topics/functions.php:463 includes/topics/functions.php:1067
4074
- #: includes/topics/functions.php:1342 includes/topics/functions.php:1678
4075
- #: includes/topics/functions.php:1718 includes/topics/functions.php:1776
4076
- #: includes/users/engagements.php:633 includes/users/engagements.php:925
4077
- #: includes/users/functions.php:199 includes/users/functions.php:205
4078
- #: includes/users/functions.php:385
4079
  msgid "<strong>ERROR</strong>: Are you sure you wanted to do that?"
4080
  msgstr ""
4081
 
4082
- #: includes/extend/buddypress/groups.php:531
4083
  msgid "Group Forum"
4084
  msgstr ""
4085
 
4086
- #: includes/extend/buddypress/groups.php:878
4087
  msgid "This group does not currently have a forum."
4088
  msgstr ""
4089
 
4090
- #: includes/extend/buddypress/loader.php:107
4091
  msgid "Search Forums..."
4092
  msgstr ""
4093
 
4094
- #: includes/extend/buddypress/loader.php:344
4095
  #: templates/default/bbpress/user-subscriptions.php:41
4096
  msgid "Subscribed Topics"
4097
  msgstr ""
@@ -4112,85 +4128,91 @@ msgstr ""
4112
  msgid "Topic Replies"
4113
  msgstr ""
4114
 
4115
- #: includes/extend/buddypress/notifications.php:199
4116
  msgid ""
4117
  "<strong>ERROR</strong>: You do not have permission to mark notifications "
4118
  "for that user."
4119
  msgstr ""
4120
 
4121
- #: includes/forums/functions.php:136
4122
  msgid "<strong>ERROR</strong>: You do not have permission to create new forums."
4123
  msgstr ""
4124
 
4125
- #: includes/forums/functions.php:161 includes/forums/functions.php:445
4126
  msgid "<strong>ERROR</strong>: Your forum needs a title."
4127
  msgstr ""
4128
 
4129
- #: includes/forums/functions.php:175 includes/forums/functions.php:459
 
 
 
 
 
 
4130
  msgid "<strong>ERROR</strong>: Your forum description cannot be empty."
4131
  msgstr ""
4132
 
4133
- #: includes/forums/functions.php:190
4134
  msgid "<strong>ERROR</strong>: Your forum must have a parent."
4135
  msgstr ""
4136
 
4137
- #: includes/forums/functions.php:197
4138
  msgid ""
4139
  "<strong>ERROR</strong>: This forum is a category. No forums can be created "
4140
  "in this forum."
4141
  msgstr ""
4142
 
4143
- #: includes/forums/functions.php:202 includes/forums/functions.php:420
4144
  msgid "<strong>ERROR</strong>: This forum has been closed to new forums."
4145
  msgstr ""
4146
 
4147
- #: includes/forums/functions.php:207 includes/forums/functions.php:425
4148
  msgid ""
4149
  "<strong>ERROR</strong>: This forum is private and you do not have the "
4150
  "capability to read or create new forums in it."
4151
  msgstr ""
4152
 
4153
- #: includes/forums/functions.php:212 includes/forums/functions.php:430
4154
  msgid ""
4155
  "<strong>ERROR</strong>: This forum is hidden and you do not have the "
4156
  "capability to read or create new forums in it."
4157
  msgstr ""
4158
 
4159
- #: includes/forums/functions.php:219 includes/replies/functions.php:294
4160
- #: includes/topics/functions.php:242
4161
  msgid "<strong>ERROR</strong>: Slow down; you move too fast."
4162
  msgstr ""
4163
 
4164
- #: includes/forums/functions.php:225
4165
  msgid "<strong>ERROR</strong>: This forum already exists."
4166
  msgstr ""
4167
 
4168
- #: includes/forums/functions.php:231
4169
  msgid "<strong>ERROR</strong>: Your forum cannot be created at this time."
4170
  msgstr ""
4171
 
4172
- #: includes/forums/functions.php:344 includes/replies/functions.php:464
4173
- #: includes/topics/functions.php:395
4174
  msgid "<strong>ERROR</strong>: The following problem(s) occurred: %s"
4175
  msgstr ""
4176
 
4177
- #: includes/forums/functions.php:348
4178
  msgid "<strong>ERROR</strong>: The forum was not created."
4179
  msgstr ""
4180
 
4181
- #: includes/forums/functions.php:373
4182
  msgid "<strong>ERROR</strong>: Forum ID not found."
4183
  msgstr ""
4184
 
4185
- #: includes/forums/functions.php:389
4186
  msgid "<strong>ERROR</strong>: The forum you want to edit was not found."
4187
  msgstr ""
4188
 
4189
- #: includes/forums/functions.php:394
4190
  msgid "<strong>ERROR</strong>: You do not have permission to edit that forum."
4191
  msgstr ""
4192
 
4193
- #: includes/forums/functions.php:465
4194
  msgid "<strong>ERROR</strong>: Your forum cannot be edited at this time."
4195
  msgstr ""
4196
 
@@ -4243,67 +4265,103 @@ msgstr ""
4243
  msgid "Parent Forum:"
4244
  msgstr ""
4245
 
4246
- #: includes/forums/template.php:794 includes/topics/template.php:1796
4247
- #: includes/users/template.php:1272
4248
- msgid "Subscribe"
 
 
 
 
 
 
 
 
 
 
 
4249
  msgstr ""
4250
 
4251
- #: includes/forums/template.php:795 includes/topics/template.php:1797
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4252
  #: includes/users/template.php:1273
 
 
 
 
 
4253
  msgid "Unsubscribe"
4254
  msgstr ""
4255
 
4256
- #: includes/forums/template.php:1131 includes/forums/template.php:1932
4257
  msgid "%s topic"
4258
  msgid_plural "%s topics"
4259
  msgstr[0] ""
4260
  msgstr[1] ""
4261
 
4262
- #: includes/forums/template.php:1146 includes/topics/template.php:2045
4263
  msgid "(+%s hidden)"
4264
  msgid_plural "(+%s hidden)"
4265
  msgstr[0] ""
4266
  msgstr[1] ""
4267
 
4268
- #: includes/forums/template.php:1921 includes/topics/template.php:2030
4269
  msgid "%s reply"
4270
  msgid_plural "%s replies"
4271
  msgstr[0] ""
4272
  msgstr[1] ""
4273
 
4274
- #: includes/forums/template.php:1941
4275
  msgid "This category has %1$s, %2$s, and was last updated %3$s by %4$s."
4276
  msgstr ""
4277
 
4278
- #: includes/forums/template.php:1942
4279
  msgid "This forum has %1$s, %2$s, and was last updated %3$s by %4$s."
4280
  msgstr ""
4281
 
4282
- #: includes/forums/template.php:1947
4283
  msgid "This category has %1$s, and was last updated %2$s by %3$s."
4284
  msgstr ""
4285
 
4286
- #: includes/forums/template.php:1948
4287
  msgid "This forum has %1$s, and was last updated %2$s by %3$s."
4288
  msgstr ""
4289
 
4290
- #: includes/forums/template.php:1954
4291
  msgid "This category has %1$s and %2$s."
4292
  msgstr ""
4293
 
4294
- #: includes/forums/template.php:1955
4295
  msgid "This forum has %1$s and %2$s."
4296
  msgstr ""
4297
 
4298
- #: includes/forums/template.php:1960
4299
  msgid "This category has %1$s."
4300
  msgstr ""
4301
 
4302
- #: includes/forums/template.php:1961
4303
  msgid "This forum has %1$s."
4304
  msgstr ""
4305
 
4306
- #: includes/forums/template.php:1965
4307
  msgid "This forum is empty."
4308
  msgstr ""
4309
 
@@ -4328,176 +4386,176 @@ msgid "<strong>ERROR</strong>: Topic does not exist."
4328
  msgstr ""
4329
 
4330
  #: includes/replies/functions.php:202 includes/replies/functions.php:216
4331
- #: includes/topics/functions.php:182 includes/topics/functions.php:196
4332
- #: includes/topics/functions.php:478
4333
  msgid "<strong>ERROR</strong>: Forum ID is missing."
4334
  msgstr ""
4335
 
4336
- #: includes/replies/functions.php:206 includes/topics/functions.php:186
4337
  msgid "<strong>ERROR</strong>: Forum ID must be a number."
4338
  msgstr ""
4339
 
4340
- #: includes/replies/functions.php:220 includes/topics/functions.php:200
4341
  msgid "<strong>ERROR</strong>: Forum ID cannot be a negative number."
4342
  msgstr ""
4343
 
4344
- #: includes/replies/functions.php:224 includes/topics/functions.php:204
4345
  msgid "<strong>ERROR</strong>: Forum does not exist."
4346
  msgstr ""
4347
 
4348
- #: includes/replies/functions.php:238 includes/replies/functions.php:559
4349
  msgid ""
4350
  "<strong>ERROR</strong>: This forum is a category. No replies can be created "
4351
  "in this forum."
4352
  msgstr ""
4353
 
4354
- #: includes/replies/functions.php:245 includes/replies/functions.php:566
4355
  msgid "<strong>ERROR</strong>: This forum has been closed to new replies."
4356
  msgstr ""
4357
 
4358
- #: includes/replies/functions.php:250 includes/replies/functions.php:571
4359
  msgid ""
4360
  "<strong>ERROR</strong>: This forum is private and you do not have the "
4361
  "capability to read or create new replies in it."
4362
  msgstr ""
4363
 
4364
- #: includes/replies/functions.php:254 includes/replies/functions.php:575
4365
  msgid ""
4366
  "<strong>ERROR</strong>: This forum is hidden and you do not have the "
4367
  "capability to read or create new replies in it."
4368
  msgstr ""
4369
 
4370
- #: includes/replies/functions.php:288 includes/replies/functions.php:600
4371
  msgid "<strong>ERROR</strong>: Your reply cannot be empty."
4372
  msgstr ""
4373
 
4374
- #: includes/replies/functions.php:300
4375
  msgid ""
4376
  "<strong>ERROR</strong>: Duplicate reply detected; it looks as though "
4377
  "you&#8217;ve already said that."
4378
  msgstr ""
4379
 
4380
- #: includes/replies/functions.php:306
4381
  msgid "<strong>ERROR</strong>: Your reply cannot be created at this time."
4382
  msgstr ""
4383
 
4384
- #: includes/replies/functions.php:331
4385
  msgid "<strong>ERROR</strong>: Topic is closed."
4386
  msgstr ""
4387
 
4388
- #: includes/replies/functions.php:391 includes/replies/functions.php:694
4389
  msgid "<strong>ERROR</strong>: There was a problem adding the tags to the topic."
4390
  msgstr ""
4391
 
4392
- #: includes/replies/functions.php:468
4393
  msgid "<strong>ERROR</strong>: The reply was not created."
4394
  msgstr ""
4395
 
4396
- #: includes/replies/functions.php:496
4397
  msgid "<strong>ERROR</strong>: Reply ID not found."
4398
  msgstr ""
4399
 
4400
- #: includes/replies/functions.php:513
4401
  msgid "<strong>ERROR</strong>: The reply you want to edit was not found."
4402
  msgstr ""
4403
 
4404
- #: includes/replies/functions.php:524
4405
  msgid "<strong>ERROR</strong>: You do not have permission to edit that reply."
4406
  msgstr ""
4407
 
4408
- #: includes/replies/functions.php:606
4409
  msgid "<strong>ERROR</strong>: Your reply cannot be edited at this time."
4410
  msgstr ""
4411
 
4412
- #: includes/replies/functions.php:1186
4413
  msgid "<strong>ERROR</strong>: A reply ID is required"
4414
  msgstr ""
4415
 
4416
- #: includes/replies/functions.php:1195
4417
  msgid "<strong>ERROR</strong>: The reply you want to move was not found."
4418
  msgstr ""
4419
 
4420
- #: includes/replies/functions.php:1205
4421
  msgid "<strong>ERROR</strong>: The topic you want to move from was not found."
4422
  msgstr ""
4423
 
4424
- #: includes/replies/functions.php:1216 includes/topics/functions.php:1078
4425
- #: includes/topics/functions.php:1348
4426
  msgid "<strong>ERROR</strong>: You do not have permission to edit the source topic."
4427
  msgstr ""
4428
 
4429
- #: includes/replies/functions.php:1226
4430
  msgid "<strong>ERROR</strong>: You need to choose a valid move option."
4431
  msgstr ""
4432
 
4433
- #: includes/replies/functions.php:1239 includes/topics/functions.php:1371
4434
  msgid "<strong>ERROR</strong>: A topic ID is required."
4435
  msgstr ""
4436
 
4437
- #: includes/replies/functions.php:1249
4438
  msgid "<strong>ERROR</strong>: The topic you want to move to was not found."
4439
  msgstr ""
4440
 
4441
- #: includes/replies/functions.php:1254 includes/topics/functions.php:1098
4442
- #: includes/topics/functions.php:1386
4443
  msgid ""
4444
  "<strong>ERROR</strong>: You do not have permission to edit the destination "
4445
  "topic."
4446
  msgstr ""
4447
 
4448
- #: includes/replies/functions.php:1308 includes/topics/functions.php:1424
4449
  msgid ""
4450
  "<strong>ERROR</strong>: There was a problem converting the reply into the "
4451
  "topic. Please try again."
4452
  msgstr ""
4453
 
4454
- #: includes/replies/functions.php:1313 includes/topics/functions.php:1429
4455
  msgid ""
4456
  "<strong>ERROR</strong>: You do not have permission to create new topics. "
4457
  "The reply could not be converted into a topic."
4458
  msgstr ""
4459
 
4460
- #: includes/replies/functions.php:1461
4461
  msgid "<strong>ERROR:</strong> This reply could not be found or no longer exists."
4462
  msgstr ""
4463
 
4464
- #: includes/replies/functions.php:1467 includes/topics/functions.php:1958
4465
  msgid "<strong>ERROR:</strong> You do not have permission to do that."
4466
  msgstr ""
4467
 
4468
- #: includes/replies/functions.php:1543
4469
  msgid "<strong>ERROR</strong>: There was a problem approving the reply."
4470
  msgstr ""
4471
 
4472
- #: includes/replies/functions.php:1543
4473
  msgid "<strong>ERROR</strong>: There was a problem unapproving the reply."
4474
  msgstr ""
4475
 
4476
- #: includes/replies/functions.php:1554
4477
  msgid "<strong>ERROR</strong>: There was a problem unmarking the reply as spam."
4478
  msgstr ""
4479
 
4480
- #: includes/replies/functions.php:1554
4481
  msgid "<strong>ERROR</strong>: There was a problem marking the reply as spam."
4482
  msgstr ""
4483
 
4484
- #: includes/replies/functions.php:1569
4485
  msgid "<strong>ERROR</strong>: There was a problem trashing the reply."
4486
  msgstr ""
4487
 
4488
- #: includes/replies/functions.php:1577
4489
  msgid "<strong>ERROR</strong>: There was a problem untrashing the reply."
4490
  msgstr ""
4491
 
4492
- #: includes/replies/functions.php:1585
4493
  msgid "<strong>ERROR</strong>: There was a problem deleting the reply."
4494
  msgstr ""
4495
 
4496
- #: includes/replies/functions.php:2055
4497
  msgid "All Posts"
4498
  msgstr ""
4499
 
4500
- #: includes/replies/functions.php:2101 includes/topics/functions.php:3697
4501
  msgid "Replies: %s"
4502
  msgstr ""
4503
 
@@ -4545,85 +4603,129 @@ msgstr ""
4545
  msgid "Replies list navigation"
4546
  msgstr ""
4547
 
4548
- #: includes/replies/template.php:520
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4549
  #: templates/default/bbpress/form-reply.php:30
4550
  msgid "Reply To: %s"
4551
  msgstr ""
4552
 
4553
- #: includes/replies/template.php:732
4554
  msgid "This reply was modified %1$s by %2$s. Reason: %3$s"
4555
  msgstr ""
4556
 
4557
- #: includes/replies/template.php:734
4558
  msgid "This reply was modified %1$s by %2$s."
4559
  msgstr ""
4560
 
4561
- #: includes/replies/template.php:1138 includes/topics/template.php:1445
4562
- #: includes/users/template.php:1991
4563
  msgid "View %s's profile"
4564
  msgstr ""
4565
 
4566
- #: includes/replies/template.php:1139 includes/topics/template.php:1446
4567
- #: includes/users/template.php:1991
4568
  msgid "Visit %s's website"
4569
  msgstr ""
4570
 
4571
- #: includes/replies/template.php:1594
4572
  #: templates/default/bbpress/form-user-passwords.php:31
4573
  msgid "Cancel"
4574
  msgstr ""
4575
 
4576
- #: includes/replies/template.php:1904 includes/topics/template.php:2531
4577
  #: templates/default/bbpress/form-topic-tag.php:100
4578
  #: templates/default/bbpress/form-topic-tag.php:117
4579
  msgid "Delete"
4580
  msgstr ""
4581
 
4582
- #: includes/replies/template.php:1929 includes/topics/template.php:2552
4583
  msgid "Are you sure you want to delete that permanently?"
4584
  msgstr ""
4585
 
4586
- #: includes/replies/template.php:2026
4587
  msgid "Move"
4588
  msgstr ""
4589
 
4590
- #: includes/replies/template.php:2027
4591
  msgid "Move this reply"
4592
  msgstr ""
4593
 
4594
- #: includes/replies/template.php:2085
4595
  msgid "Split"
4596
  msgstr ""
4597
 
4598
- #: includes/replies/template.php:2086
4599
  msgid "Split the topic from this reply"
4600
  msgstr ""
4601
 
4602
- #: includes/replies/template.php:2320
4603
  msgid "Viewing %1$s reply thread"
4604
  msgid_plural "Viewing %1$s reply threads"
4605
  msgstr[0] ""
4606
  msgstr[1] ""
4607
 
4608
- #: includes/replies/template.php:2327
4609
  msgid "Viewing %1$s reply"
4610
  msgid_plural "Viewing %1$s replies"
4611
  msgstr[0] ""
4612
  msgstr[1] ""
4613
 
4614
- #: includes/replies/template.php:2331
4615
  msgid "Viewing %2$s replies (of %4$s total)"
4616
  msgid_plural "Viewing %1$s replies - %2$s through %3$s (of %4$s total)"
4617
  msgstr[0] ""
4618
  msgstr[1] ""
4619
 
4620
- #: includes/replies/template.php:2339
4621
  msgid "Viewing %1$s post"
4622
  msgid_plural "Viewing %1$s posts"
4623
  msgstr[0] ""
4624
  msgstr[1] ""
4625
 
4626
- #: includes/replies/template.php:2343
4627
  msgid "Viewing %2$s post (of %4$s total)"
4628
  msgid_plural "Viewing %1$s posts - %2$s through %3$s (of %4$s total)"
4629
  msgstr[0] ""
@@ -4633,13 +4735,13 @@ msgstr[1] ""
4633
  msgid "Search Results for '%s'"
4634
  msgstr ""
4635
 
4636
- #: includes/search/template.php:392
4637
  msgid "Viewing %1$s result"
4638
  msgid_plural "Viewing %1$s results"
4639
  msgstr[0] ""
4640
  msgstr[1] ""
4641
 
4642
- #: includes/search/template.php:396
4643
  msgid "Viewing %2$s results (of %4$s total)"
4644
  msgid_plural "Viewing %1$s results - %2$s through %3$s (of %4$s total)"
4645
  msgstr[0] ""
@@ -4649,189 +4751,189 @@ msgstr[1] ""
4649
  msgid "<strong>ERROR</strong>: You do not have permission to create new topics."
4650
  msgstr ""
4651
 
4652
- #: includes/topics/functions.php:158 includes/topics/functions.php:525
4653
  msgid "<strong>ERROR</strong>: Your topic needs a title."
4654
  msgstr ""
4655
 
4656
- #: includes/topics/functions.php:172 includes/topics/functions.php:539
4657
  msgid "<strong>ERROR</strong>: Your topic cannot be empty."
4658
  msgstr ""
4659
 
4660
- #: includes/topics/functions.php:218
4661
  msgid ""
4662
  "<strong>ERROR</strong>: This forum is a category. No topics can be created "
4663
  "in this forum."
4664
  msgstr ""
4665
 
4666
- #: includes/topics/functions.php:225 includes/topics/functions.php:500
4667
  msgid "<strong>ERROR</strong>: This forum has been closed to new topics."
4668
  msgstr ""
4669
 
4670
- #: includes/topics/functions.php:230 includes/topics/functions.php:505
4671
  msgid ""
4672
  "<strong>ERROR</strong>: This forum is private and you do not have the "
4673
  "capability to read or create new topics in it."
4674
  msgstr ""
4675
 
4676
- #: includes/topics/functions.php:234 includes/topics/functions.php:509
4677
  msgid ""
4678
  "<strong>ERROR</strong>: This forum is hidden and you do not have the "
4679
  "capability to read or create new topics in it."
4680
  msgstr ""
4681
 
4682
- #: includes/topics/functions.php:248
4683
  msgid ""
4684
  "<strong>ERROR</strong>: Duplicate topic detected; it looks as though "
4685
  "you&#8217;ve already said that."
4686
  msgstr ""
4687
 
4688
- #: includes/topics/functions.php:254
4689
  msgid "<strong>ERROR</strong>: Your topic cannot be created at this time."
4690
  msgstr ""
4691
 
4692
- #: includes/topics/functions.php:399
4693
  msgid "<strong>ERROR</strong>: The topic was not created."
4694
  msgstr ""
4695
 
4696
- #: includes/topics/functions.php:425 includes/topics/functions.php:1060
4697
  msgid "<strong>ERROR</strong>: Topic ID not found."
4698
  msgstr ""
4699
 
4700
- #: includes/topics/functions.php:436
4701
  msgid "<strong>ERROR</strong>: The topic you want to edit was not found."
4702
  msgstr ""
4703
 
4704
- #: includes/topics/functions.php:447
4705
  msgid "<strong>ERROR</strong>: You do not have permission to edit that topic."
4706
  msgstr ""
4707
 
4708
- #: includes/topics/functions.php:493
4709
  msgid ""
4710
  "<strong>ERROR</strong>: This forum is a category. No topics can be created "
4711
  "in it."
4712
  msgstr ""
4713
 
4714
- #: includes/topics/functions.php:545
4715
  msgid "<strong>ERROR</strong>: Your topic cannot be edited at this time."
4716
  msgstr ""
4717
 
4718
- #: includes/topics/functions.php:1072
4719
  msgid "<strong>ERROR</strong>: The topic you want to merge was not found."
4720
  msgstr ""
4721
 
4722
- #: includes/topics/functions.php:1086
4723
  msgid "<strong>ERROR</strong>: Destination topic ID not found."
4724
  msgstr ""
4725
 
4726
- #: includes/topics/functions.php:1093
4727
  msgid "<strong>ERROR</strong>: The topic you want to merge to was not found."
4728
  msgstr ""
4729
 
4730
- #: includes/topics/functions.php:1318
4731
  msgid "<strong>ERROR</strong>: A reply ID is required."
4732
  msgstr ""
4733
 
4734
- #: includes/topics/functions.php:1327
4735
  msgid "<strong>ERROR</strong>: The reply you want to split from was not found."
4736
  msgstr ""
4737
 
4738
- #: includes/topics/functions.php:1337
4739
  msgid "<strong>ERROR</strong>: The topic you want to split was not found."
4740
  msgstr ""
4741
 
4742
- #: includes/topics/functions.php:1358
4743
  msgid "<strong>ERROR</strong>: You need to choose a valid split option."
4744
  msgstr ""
4745
 
4746
- #: includes/topics/functions.php:1381
4747
  msgid "<strong>ERROR</strong>: The topic you want to split to was not found."
4748
  msgstr ""
4749
 
4750
- #: includes/topics/functions.php:1666
4751
  msgid ""
4752
  "<strong>ERROR</strong>: The following problem(s) have been found while "
4753
  "getting the tag: %s"
4754
  msgstr ""
4755
 
4756
- #: includes/topics/functions.php:1684 includes/topics/functions.php:1724
4757
  msgid "<strong>ERROR</strong>: You do not have permission to edit the topic tags."
4758
  msgstr ""
4759
 
4760
- #: includes/topics/functions.php:1690 includes/topics/functions.php:1730
4761
  msgid "<strong>ERROR</strong>: You need to enter a tag name."
4762
  msgstr ""
4763
 
4764
- #: includes/topics/functions.php:1701
4765
  msgid ""
4766
  "<strong>ERROR</strong>: The following problem(s) have been found while "
4767
  "updating the tag: %s"
4768
  msgstr ""
4769
 
4770
- #: includes/topics/functions.php:1741 includes/topics/functions.php:1759
4771
  msgid ""
4772
  "<strong>ERROR</strong>: The following problem(s) have been found while "
4773
  "merging the tags: %s"
4774
  msgstr ""
4775
 
4776
- #: includes/topics/functions.php:1750
4777
  msgid "<strong>ERROR</strong>: The tags which are being merged can not be the same."
4778
  msgstr ""
4779
 
4780
- #: includes/topics/functions.php:1782
4781
  msgid "<strong>ERROR</strong>: You do not have permission to delete the topic tags."
4782
  msgstr ""
4783
 
4784
- #: includes/topics/functions.php:1791
4785
  msgid ""
4786
  "<strong>ERROR</strong>: The following problem(s) have been found while "
4787
  "deleting the tag: %s"
4788
  msgstr ""
4789
 
4790
- #: includes/topics/functions.php:1952
4791
  msgid "<strong>ERROR:</strong> This topic could not be found or no longer exists."
4792
  msgstr ""
4793
 
4794
- #: includes/topics/functions.php:2042
4795
  msgid "<strong>ERROR</strong>: There was a problem approving the topic."
4796
  msgstr ""
4797
 
4798
- #: includes/topics/functions.php:2043
4799
  msgid "<strong>ERROR</strong>: There was a problem unapproving the topic."
4800
  msgstr ""
4801
 
4802
- #: includes/topics/functions.php:2060
4803
  msgid "<strong>ERROR</strong>: There was a problem closing the topic."
4804
  msgstr ""
4805
 
4806
- #: includes/topics/functions.php:2061
4807
  msgid "<strong>ERROR</strong>: There was a problem opening the topic."
4808
  msgstr ""
4809
 
4810
- #: includes/topics/functions.php:2079
4811
  msgid "<strong>ERROR</strong>: There was a problem unsticking the topic."
4812
  msgstr ""
4813
 
4814
- #: includes/topics/functions.php:2080
4815
  msgid "<strong>ERROR</strong>: There was a problem sticking the topic."
4816
  msgstr ""
4817
 
4818
- #: includes/topics/functions.php:2098
4819
  msgid "<strong>ERROR</strong>: There was a problem unmarking the topic as spam."
4820
  msgstr ""
4821
 
4822
- #: includes/topics/functions.php:2099
4823
  msgid "<strong>ERROR</strong>: There was a problem marking the topic as spam."
4824
  msgstr ""
4825
 
4826
- #: includes/topics/functions.php:2112
4827
  msgid "<strong>ERROR</strong>: There was a problem trashing the topic."
4828
  msgstr ""
4829
 
4830
- #: includes/topics/functions.php:2123
4831
  msgid "<strong>ERROR</strong>: There was a problem untrashing the topic."
4832
  msgstr ""
4833
 
4834
- #: includes/topics/functions.php:2132
4835
  msgid "<strong>ERROR</strong>: There was a problem deleting the topic."
4836
  msgstr ""
4837
 
@@ -4879,181 +4981,249 @@ msgstr ""
4879
  msgid "Topics list navigation"
4880
  msgstr ""
4881
 
4882
- #: includes/topics/template.php:911
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4883
  msgid "This topic was modified %1$s by %2$s. Reason: %3$s"
4884
  msgstr ""
4885
 
4886
- #: includes/topics/template.php:913
4887
  msgid "This topic was modified %1$s by %2$s."
4888
  msgstr ""
4889
 
4890
- #: includes/topics/template.php:1843 includes/users/template.php:1074
4891
  msgid "Favorite"
4892
  msgstr ""
4893
 
4894
- #: includes/topics/template.php:1844 includes/users/template.php:1075
4895
  msgid "Unfavorite"
4896
  msgstr ""
4897
 
4898
- #: includes/topics/template.php:2209
4899
  msgid "Tagged:"
4900
  msgstr ""
4901
 
4902
- #: includes/topics/template.php:2770
4903
  #: templates/default/bbpress/form-topic-tag.php:69
4904
  #: templates/default/bbpress/form-topic-tag.php:85
4905
  msgid "Merge"
4906
  msgstr ""
4907
 
4908
- #: includes/topics/template.php:3002
4909
  msgid "Viewing %1$s topic"
4910
  msgid_plural "Viewing %1$s topics"
4911
  msgstr[0] ""
4912
  msgstr[1] ""
4913
 
4914
- #: includes/topics/template.php:3006
4915
  msgid "Viewing topic %2$s (of %4$s total)"
4916
  msgid_plural "Viewing %1$s topics - %2$s through %3$s (of %4$s total)"
4917
  msgstr[0] ""
4918
  msgstr[1] ""
4919
 
4920
- #: includes/topics/template.php:3063
4921
  msgid "This topic is marked as spam."
4922
  msgstr ""
4923
 
4924
- #: includes/topics/template.php:3068
4925
  msgid "This topic is in the trash."
4926
  msgstr ""
4927
 
4928
- #: includes/topics/template.php:3318
4929
  msgid "%s voice"
4930
  msgid_plural "%s voices"
4931
  msgstr[0] ""
4932
  msgstr[1] ""
4933
 
4934
- #: includes/topics/template.php:3324
4935
  msgid "This topic has %1$s, %2$s, and was last updated %3$s by %4$s."
4936
  msgstr ""
4937
 
4938
- #: includes/topics/template.php:3328
4939
  msgid "This topic has %1$s and %2$s."
4940
  msgstr ""
4941
 
4942
- #: includes/topics/template.php:3332
4943
  msgid "This topic has no replies."
4944
  msgstr ""
4945
 
4946
- #: includes/topics/template.php:3381
4947
  msgid "Search Tags"
4948
  msgstr ""
4949
 
4950
- #: includes/topics/template.php:3382
4951
  msgid "Popular Tags"
4952
  msgstr ""
4953
 
4954
- #: includes/topics/template.php:3383
4955
  msgid "All Tags"
4956
  msgstr ""
4957
 
4958
- #: includes/topics/template.php:3384
 
 
 
 
 
 
 
 
4959
  msgid "Edit Tag"
4960
  msgstr ""
4961
 
4962
- #: includes/topics/template.php:3385
 
 
 
 
4963
  msgid "Update Tag"
4964
  msgstr ""
4965
 
4966
- #: includes/topics/template.php:3386
4967
  msgid "Add New Tag"
4968
  msgstr ""
4969
 
4970
- #: includes/topics/template.php:3387
4971
  msgid "New Tag Name"
4972
  msgstr ""
4973
 
4974
- #: includes/topics/template.php:3388
4975
- msgid "View Topic Tag"
4976
  msgstr ""
4977
 
4978
- #: includes/topics/template.php:3389
4979
- msgid "View Topic Tags"
4980
  msgstr ""
4981
 
4982
- #: includes/topics/template.php:3390
4983
- msgid "Topic tags list"
 
 
 
 
 
 
 
 
4984
  msgstr ""
4985
 
4986
- #: includes/topics/template.php:3391
4987
  msgid "Topic tags list navigation"
4988
  msgstr ""
4989
 
4990
- #: includes/topics/template.php:3392
4991
- msgid "Separate topic tags with commas"
 
 
 
 
4992
  msgstr ""
4993
 
4994
- #: includes/topics/template.php:4018
 
 
 
 
4995
  msgid "Nobody"
4996
  msgstr ""
4997
 
4998
- #: includes/topics/template.php:4022
4999
  msgid "%1$s is currently editing this topic."
5000
  msgstr ""
5001
 
5002
- #: includes/users/engagements.php:629
5003
  msgid ""
5004
  "<strong>ERROR</strong>: No topic was found. Which topic are you "
5005
  "marking/unmarking as favorite?"
5006
  msgstr ""
5007
 
5008
- #: includes/users/engagements.php:637
5009
  msgid ""
5010
  "<strong>ERROR</strong>: You do not have permission to edit favorites for "
5011
  "that user!."
5012
  msgstr ""
5013
 
5014
- #: includes/users/engagements.php:678
5015
  msgid ""
5016
  "<strong>ERROR</strong>: There was a problem removing that topic from "
5017
  "favorites."
5018
  msgstr ""
5019
 
5020
- #: includes/users/engagements.php:680
5021
  msgid "<strong>ERROR</strong>: There was a problem favoriting that topic."
5022
  msgstr ""
5023
 
5024
- #: includes/users/engagements.php:921
5025
  msgid ""
5026
  "<strong>ERROR</strong>: Not found. What are you subscribing/unsubscribing "
5027
  "to?"
5028
  msgstr ""
5029
 
5030
- #: includes/users/engagements.php:929
5031
  msgid ""
5032
  "<strong>ERROR</strong>: You do not have permission to edit subscriptions of "
5033
  "that user."
5034
  msgstr ""
5035
 
5036
- #: includes/users/engagements.php:972
5037
  msgid "<strong>ERROR</strong>: There was a problem unsubscribing."
5038
  msgstr ""
5039
 
5040
- #: includes/users/engagements.php:974
5041
  msgid "<strong>ERROR</strong>: There was a problem subscribing."
5042
  msgstr ""
5043
 
5044
- #: includes/users/functions.php:211 includes/users/functions.php:223
5045
  msgid "<strong>ERROR</strong>: That is not a valid email address."
5046
  msgstr ""
5047
 
5048
- #: includes/users/functions.php:229 includes/users/functions.php:348
5049
  msgid "<strong>ERROR</strong>: That email address is already in use."
5050
  msgstr ""
5051
 
5052
- #: includes/users/functions.php:411
5053
  msgid "<strong>ERROR</strong>: An error occurred while updating your email address."
5054
  msgstr ""
5055
 
5056
- #: includes/users/functions.php:423
5057
  msgid ""
5058
  "%1$s\n"
5059
  "\n"
@@ -5072,67 +5242,67 @@ msgid ""
5072
  "%5$s"
5073
  msgstr ""
5074
 
5075
- #: includes/users/functions.php:458
5076
  msgid "[%s] New Email Address"
5077
  msgstr ""
5078
 
5079
- #: includes/users/template.php:676
5080
  msgid "Guest"
5081
  msgstr ""
5082
 
5083
- #: includes/users/template.php:680
5084
  msgid "Inactive"
5085
  msgstr ""
5086
 
5087
- #: includes/users/template.php:690
5088
  msgid "Member"
5089
  msgstr ""
5090
 
5091
- #: includes/users/template.php:731
5092
  msgid "Admin"
5093
  msgstr ""
5094
 
5095
- #: includes/users/template.php:1368
5096
  msgid "User updated."
5097
  msgstr ""
5098
 
5099
- #: includes/users/template.php:1412
5100
  msgid "There is a pending email address change to %1$s. %2$s"
5101
  msgstr ""
5102
 
5103
- #: includes/users/template.php:1429
5104
  msgid "You have super admin privileges."
5105
  msgstr ""
5106
 
5107
- #: includes/users/template.php:1429
5108
  msgid "This user has super admin privileges."
5109
  msgstr ""
5110
 
5111
- #: includes/users/template.php:1503
5112
  msgid "&mdash; No role for this site &mdash;"
5113
  msgstr ""
5114
 
5115
- #: includes/users/template.php:1823
5116
  msgid "You are now logged out."
5117
  msgstr ""
5118
 
5119
- #: includes/users/template.php:1827
5120
  msgid "New user registration is currently not allowed."
5121
  msgstr ""
5122
 
5123
- #: includes/users/template.php:1836
5124
  msgid "Check your e-mail for the confirmation link."
5125
  msgstr ""
5126
 
5127
- #: includes/users/template.php:1841
5128
  msgid "Check your e-mail for your new password."
5129
  msgstr ""
5130
 
5131
- #: includes/users/template.php:1846
5132
  msgid "Registration complete. Please check your e-mail."
5133
  msgstr ""
5134
 
5135
- #: includes/users/template.php:2351
5136
  msgid "Moderators:"
5137
  msgstr ""
5138
 
@@ -5638,10 +5808,6 @@ msgstr ""
5638
  msgid "Update User"
5639
  msgstr ""
5640
 
5641
- #: templates/default/bbpress/form-user-login.php:31
5642
- msgid "Keep me signed in"
5643
- msgstr ""
5644
-
5645
  #: templates/default/bbpress/form-user-lost-pass.php:21
5646
  msgid "Username or Email"
5647
  msgstr ""
@@ -5865,80 +6031,80 @@ msgstr ""
5865
  msgid "The bbPress Contributors"
5866
  msgstr ""
5867
 
5868
- #: bbpress.php:595
5869
  msgctxt "post"
5870
  msgid "Closed"
5871
  msgstr ""
5872
 
5873
- #: bbpress.php:596
5874
  msgctxt "post"
5875
  msgid "Closed <span class=\"count\">(%s)</span>"
5876
  msgid_plural "Closed <span class=\"count\">(%s)</span>"
5877
  msgstr[0] ""
5878
  msgstr[1] ""
5879
 
5880
- #: bbpress.php:608
5881
  msgctxt "post"
5882
  msgid "Spam"
5883
  msgstr ""
5884
 
5885
- #: bbpress.php:609
5886
  msgctxt "post"
5887
  msgid "Spam <span class=\"count\">(%s)</span>"
5888
  msgid_plural "Spam <span class=\"count\">(%s)</span>"
5889
  msgstr[0] ""
5890
  msgstr[1] ""
5891
 
5892
- #: bbpress.php:622
5893
  msgctxt "post"
5894
  msgid "Orphan"
5895
  msgstr ""
5896
 
5897
- #: bbpress.php:623
5898
  msgctxt "post"
5899
  msgid "Orphan <span class=\"count\">(%s)</span>"
5900
  msgid_plural "Orphans <span class=\"count\">(%s)</span>"
5901
  msgstr[0] ""
5902
  msgstr[1] ""
5903
 
5904
- #: bbpress.php:636
5905
  msgctxt "post"
5906
  msgid "Hidden"
5907
  msgstr ""
5908
 
5909
- #: bbpress.php:637
5910
  msgctxt "post"
5911
  msgid "Hidden <span class=\"count\">(%s)</span>"
5912
  msgid_plural "Hidden <span class=\"count\">(%s)</span>"
5913
  msgstr[0] ""
5914
  msgstr[1] ""
5915
 
5916
- #: includes/admin/classes/class-bbp-admin.php:687
5917
  msgctxt "admin color scheme"
5918
  msgid "Mint"
5919
  msgstr ""
5920
 
5921
- #: includes/admin/classes/class-bbp-admin.php:696
5922
  msgctxt "admin color scheme"
5923
  msgid "Evergreen"
5924
  msgstr ""
5925
 
5926
- #: includes/admin/forums.php:613
5927
  msgctxt "Close a Forum"
5928
  msgid "Close"
5929
  msgstr ""
5930
 
5931
- #: includes/admin/forums.php:615
5932
  msgctxt "Open a Forum"
5933
  msgid "Open"
5934
  msgstr ""
5935
 
5936
- #: includes/admin/replies.php:787
5937
  msgctxt "Unapprove reply"
5938
  msgid "Unapprove"
5939
  msgstr ""
5940
 
5941
- #: includes/admin/replies.php:789
5942
  msgctxt "Approve reply"
5943
  msgid "Approve"
5944
  msgstr ""
@@ -5948,27 +6114,27 @@ msgctxt "noun"
5948
  msgid "Reply"
5949
  msgstr ""
5950
 
5951
- #: includes/admin/topics.php:960
5952
  msgctxt "Unapprove Topic"
5953
  msgid "Unapprove"
5954
  msgstr ""
5955
 
5956
- #: includes/admin/topics.php:962
5957
  msgctxt "Approve Topic"
5958
  msgid "Approve"
5959
  msgstr ""
5960
 
5961
- #: includes/admin/topics.php:971
5962
  msgctxt "Close a Topic"
5963
  msgid "Close"
5964
  msgstr ""
5965
 
5966
- #: includes/admin/topics.php:973
5967
  msgctxt "Open a Topic"
5968
  msgid "Open"
5969
  msgstr ""
5970
 
5971
- #: includes/common/formatting.php:692
5972
  msgctxt "Separator in time since"
5973
  msgid ","
5974
  msgstr ""
@@ -6003,176 +6169,164 @@ msgctxt "User role"
6003
  msgid "Blocked"
6004
  msgstr ""
6005
 
6006
- #: includes/common/widgets.php:796
6007
  msgctxt "widgets"
6008
  msgid "by %1$s"
6009
  msgstr ""
6010
 
6011
- #: includes/common/widgets.php:1137
6012
  #. translators: 1: reply author, 2: reply link, 3: reply timestamp
6013
  msgctxt "widgets"
6014
  msgid "%1$s on %2$s %3$s"
6015
  msgstr ""
6016
 
6017
- #: includes/common/widgets.php:1143
6018
- #. translators: 1: reply link, 2: reply timestamp
6019
- msgctxt "widgets"
6020
- msgid "%1$s %2$s"
6021
- msgstr ""
6022
-
6023
- #: includes/common/widgets.php:1149
6024
  #. translators: 1: reply author, 2: reply link
6025
  msgctxt "widgets"
6026
  msgid "%1$s on %2$s"
6027
  msgstr ""
6028
 
6029
- #: includes/common/widgets.php:1155
6030
- #. translators: 1: reply link
6031
- msgctxt "widgets"
6032
- msgid "%1$s"
6033
- msgstr ""
6034
-
6035
- #: includes/extend/buddypress/groups.php:491
6036
  msgctxt "group admin edit screen"
6037
  msgid "Discussion Forum"
6038
  msgstr ""
6039
 
6040
- #: includes/forums/functions.php:1830
6041
  msgctxt "Open the forum"
6042
  msgid "Open"
6043
  msgstr ""
6044
 
6045
- #: includes/forums/functions.php:1831
6046
  msgctxt "Close the forum"
6047
  msgid "Closed"
6048
  msgstr ""
6049
 
6050
- #: includes/forums/functions.php:1848
6051
  msgctxt "Forum accepts new topics"
6052
  msgid "Forum"
6053
  msgstr ""
6054
 
6055
- #: includes/forums/functions.php:1849
6056
  msgctxt "Forum is a category"
6057
  msgid "Category"
6058
  msgstr ""
6059
 
6060
- #: includes/forums/functions.php:1866
6061
  msgctxt "Make forum public"
6062
  msgid "Public"
6063
  msgstr ""
6064
 
6065
- #: includes/forums/functions.php:1867
6066
  msgctxt "Make forum private"
6067
  msgid "Private"
6068
  msgstr ""
6069
 
6070
- #: includes/forums/functions.php:1868
6071
  msgctxt "Make forum hidden"
6072
  msgid "Hidden"
6073
  msgstr ""
6074
 
6075
- #: includes/replies/functions.php:1617
6076
  msgctxt "Publish the reply"
6077
  msgid "Publish"
6078
  msgstr ""
6079
 
6080
- #: includes/replies/functions.php:1618
6081
  msgctxt "Spam the reply"
6082
  msgid "Spam"
6083
  msgstr ""
6084
 
6085
- #: includes/replies/functions.php:1619
6086
  msgctxt "Trash the reply"
6087
  msgid "Trash"
6088
  msgstr ""
6089
 
6090
- #: includes/replies/functions.php:1620
6091
  msgctxt "Mark reply as pending"
6092
  msgid "Pending"
6093
  msgstr ""
6094
 
6095
- #: includes/replies/template.php:642 includes/topics/template.php:751
6096
  msgctxt "date at time"
6097
  msgid "%1$s at %2$s"
6098
  msgstr ""
6099
 
6100
- #: includes/replies/template.php:1521 includes/topics/template.php:2867
6101
  msgctxt "verb"
6102
  msgid "Reply"
6103
  msgstr ""
6104
 
6105
- #: includes/replies/template.php:2142
6106
  msgctxt "Pending Status"
6107
  msgid "Approve"
6108
  msgstr ""
6109
 
6110
- #: includes/replies/template.php:2143
6111
  msgctxt "Pending Status"
6112
  msgid "Unapprove"
6113
  msgstr ""
6114
 
6115
- #: includes/replies/template.php:2505
6116
  msgctxt "Default reply to dropdown text"
6117
  msgid "None"
6118
  msgstr ""
6119
 
6120
- #: includes/topics/functions.php:1826 includes/topics/template.php:2595
6121
  msgctxt "Open the topic"
6122
  msgid "Open"
6123
  msgstr ""
6124
 
6125
- #: includes/topics/functions.php:1827
6126
  msgctxt "Close the topic"
6127
  msgid "Closed"
6128
  msgstr ""
6129
 
6130
- #: includes/topics/template.php:2594
6131
  msgctxt "Close the topic"
6132
  msgid "Close"
6133
  msgstr ""
6134
 
6135
- #: includes/topics/functions.php:1828
6136
  msgctxt "Spam the topic"
6137
  msgid "Spam"
6138
  msgstr ""
6139
 
6140
- #: includes/topics/functions.php:1829
6141
  msgctxt "Trash the topic"
6142
  msgid "Trash"
6143
  msgstr ""
6144
 
6145
- #: includes/topics/functions.php:1830
6146
  msgctxt "Unapprove the topic"
6147
  msgid "Pending"
6148
  msgstr ""
6149
 
6150
- #: includes/topics/template.php:2649
6151
  msgctxt "Unapprove the topic"
6152
  msgid "Unapprove"
6153
  msgstr ""
6154
 
6155
- #: includes/topics/functions.php:1847
6156
  msgctxt "Unstick a topic"
6157
  msgid "Normal"
6158
  msgstr ""
6159
 
6160
- #: includes/topics/functions.php:1848
6161
  msgctxt "Make topic sticky"
6162
  msgid "Sticky"
6163
  msgstr ""
6164
 
6165
- #: includes/topics/functions.php:1849
6166
  msgctxt "Make topic super sticky"
6167
  msgid "Super Sticky"
6168
  msgstr ""
6169
 
6170
- #: includes/topics/template.php:2648
6171
  msgctxt "Approve the topic"
6172
  msgid "Approve"
6173
  msgstr ""
6174
 
6175
- #: includes/users/template.php:1407
6176
  msgctxt "Dismiss pending user email address change"
6177
  msgid "Cancel"
6178
  msgstr ""
1
+ # Copyright (C) 2018 The bbPress Contributors
2
  # This file is distributed under the GPLv2 or later (license.txt).
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: bbPress 2.6-rc-6\n"
6
  "Report-Msgid-Bugs-To: https://bbpress.trac.wordpress.org\n"
7
+ "POT-Creation-Date: 2018-09-03 21:22:01+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: 2018-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
+ "X-Generator: grunt-wp-i18n1.0.2\n"
15
 
16
  #: bbpress.php:144 bbpress.php:151
17
  msgid "Cheatin&#8217; huh?"
18
  msgstr ""
19
 
20
+ #: bbpress.php:516
21
  msgid "bbPress Forums"
22
  msgstr ""
23
 
24
+ #: bbpress.php:542
25
  msgid "bbPress Topics"
26
  msgstr ""
27
 
28
+ #: bbpress.php:568
29
  msgid "bbPress Replies"
30
  msgstr ""
31
 
32
+ #: bbpress.php:712
33
  msgid "Most popular topics"
34
  msgstr ""
35
 
36
+ #: bbpress.php:725
37
  msgid "Topics with no replies"
38
  msgstr ""
39
 
40
+ #: bbpress.php:758
41
  msgid "bbPress Item Count"
42
  msgstr ""
43
 
44
+ #: includes/admin/actions.php:177 includes/admin/forums.php:538
45
  #: includes/admin/settings.php:280 includes/admin/settings.php:301
46
+ #: includes/admin/tools/common.php:269 includes/admin/topics.php:854
47
  #: includes/extend/buddypress/activity.php:197
48
+ #: includes/extend/buddypress/activity.php:391
49
+ #: includes/forums/template.php:2592 includes/topics/template.php:47
50
  #: includes/topics/template.php:48
51
  #: templates/default/bbpress/content-statistics.php:30
52
  #: templates/default/bbpress/loop-forums.php:21
53
  msgid "Topics"
54
  msgstr ""
55
 
56
+ #: includes/admin/actions.php:182 includes/admin/actions.php:194
57
+ #: includes/admin/forums.php:539 includes/admin/settings.php:288
58
+ #: includes/admin/settings.php:309 includes/admin/tools/common.php:272
59
+ #: includes/admin/topics.php:390 includes/admin/topics.php:856
60
  #: includes/core/theme-compat.php:694
61
  #: includes/extend/buddypress/activity.php:207
62
+ #: includes/extend/buddypress/activity.php:392
63
+ #: includes/forums/template.php:2646 includes/replies/template.php:49
64
  #: includes/replies/template.php:50
65
  #: templates/default/bbpress/content-statistics.php:35
66
  #: templates/default/bbpress/loop-forums.php:23
70
  msgid "Replies"
71
  msgstr ""
72
 
73
+ #: includes/admin/actions.php:189 includes/admin/actions.php:201
74
+ #: includes/admin/forums.php:537 includes/admin/metaboxes.php:113
75
  #: includes/admin/metaboxes.php:432 includes/admin/metaboxes.php:496
76
+ #: includes/admin/replies.php:665 includes/admin/settings.php:351
77
+ #: includes/admin/topics.php:855 includes/extend/buddypress/groups.php:51
78
+ #: includes/extend/buddypress/groups.php:52 includes/forums/template.php:50
79
  #: templates/default/bbpress/loop-forums.php:20
80
  msgid "Forum"
81
  msgstr ""
82
 
83
+ #: includes/admin/actions.php:206 includes/admin/metaboxes.php:130
84
+ #: includes/admin/metaboxes.php:523 includes/admin/replies.php:666
85
  #: includes/admin/settings.php:359 includes/topics/template.php:49
86
  #: templates/default/bbpress/content-single-topic-lead.php:23
87
  #: templates/default/bbpress/content-single-topic-lead.php:91
89
  msgid "Topic"
90
  msgstr ""
91
 
92
+ #: includes/admin/classes/class-bbp-admin.php:221
93
  msgid "Go Upgrade"
94
  msgstr ""
95
 
96
+ #: includes/admin/classes/class-bbp-admin.php:222
97
  msgid "Hide Forever"
98
  msgstr ""
99
 
100
+ #: includes/admin/classes/class-bbp-admin.php:225
101
  msgid "bbPress requires a manual database upgrade. %s or %s"
102
  msgstr ""
103
 
104
+ #: includes/admin/classes/class-bbp-admin.php:408
105
+ #: includes/admin/classes/class-bbp-admin.php:409
106
+ #: includes/admin/classes/class-bbp-admin.php:418
107
+ #: includes/admin/classes/class-bbp-admin.php:419
108
+ #: includes/admin/tools/common.php:266 includes/admin/tools.php:30
109
+ #: includes/admin/users.php:93 includes/common/widgets.php:626
110
  #: includes/extend/buddypress/loader.php:42
111
+ #: includes/extend/buddypress/loader.php:189
112
+ #: includes/extend/buddypress/loader.php:311
113
+ #: includes/extend/buddypress/loader.php:376 includes/forums/template.php:48
114
+ #: includes/forums/template.php:49 includes/forums/template.php:68
115
  #: templates/default/bbpress/content-statistics.php:25
116
  #: templates/default/bbpress/user-profile.php:34
117
  msgid "Forums"
118
  msgstr ""
119
 
120
+ #: includes/admin/classes/class-bbp-admin.php:431
121
+ #: includes/admin/classes/class-bbp-admin.php:432
122
+ #: includes/admin/classes/class-bbp-admin.php:440
123
+ #: includes/admin/classes/class-bbp-admin.php:441
124
  msgid "Welcome to bbPress"
125
  msgstr ""
126
 
127
+ #: includes/admin/classes/class-bbp-admin.php:455
128
+ #: includes/admin/classes/class-bbp-admin.php:456
129
+ #: includes/admin/classes/class-bbp-admin.php:477
130
+ #: includes/admin/classes/class-bbp-admin.php:478
131
+ #: includes/admin/classes/class-bbp-admin.php:1182
132
+ #: includes/admin/classes/class-bbp-admin.php:1279
133
  msgid "Update Forums"
134
  msgstr ""
135
 
136
+ #: includes/admin/classes/class-bbp-admin.php:663
137
  msgid "Settings"
138
  msgstr ""
139
 
140
+ #: includes/admin/classes/class-bbp-admin.php:668
141
  msgid "About"
142
  msgstr ""
143
 
144
+ #: includes/admin/classes/class-bbp-admin.php:846
145
+ #: includes/admin/classes/class-bbp-admin.php:883
146
  msgid "%s - %s"
147
  msgstr ""
148
 
149
+ #: includes/admin/classes/class-bbp-admin.php:901
150
  msgid "Welcome to bbPress %s"
151
  msgstr ""
152
 
153
+ #: includes/admin/classes/class-bbp-admin.php:902
154
  msgid ""
155
  "bbPress is fun to use, contains no artificial colors or preservatives, and "
156
  "is absolutely wonderful in every environment. Your community is going to "
157
  "love using it."
158
  msgstr ""
159
 
160
+ #: includes/admin/classes/class-bbp-admin.php:928
161
+ #: includes/admin/classes/class-bbp-admin.php:1002
162
  msgid "What&#8217;s New"
163
  msgstr ""
164
 
165
+ #: includes/admin/classes/class-bbp-admin.php:930
166
+ #: includes/admin/classes/class-bbp-admin.php:1004
167
  msgid "Credits"
168
  msgstr ""
169
 
170
+ #: includes/admin/classes/class-bbp-admin.php:935
171
  msgid "Forum Subscriptions"
172
  msgstr ""
173
 
174
+ #: includes/admin/classes/class-bbp-admin.php:939
175
  msgid "Subscribe to Forums"
176
  msgstr ""
177
 
178
+ #: includes/admin/classes/class-bbp-admin.php:940
179
  msgid "Now your users can subscribe to new topics in specific forums."
180
  msgstr ""
181
 
182
+ #: includes/admin/classes/class-bbp-admin.php:944
183
  msgid "Manage Subscriptions"
184
  msgstr ""
185
 
186
+ #: includes/admin/classes/class-bbp-admin.php:945
187
  msgid "Your users can manage all of their subscriptions in one convenient location."
188
  msgstr ""
189
 
190
+ #: includes/admin/classes/class-bbp-admin.php:951
191
  msgid "Converters"
192
  msgstr ""
193
 
194
+ #: includes/admin/classes/class-bbp-admin.php:955
195
  msgid ""
196
  "We&#8217;re all abuzz about the hive of new importers, AEF, Drupal, FluxBB, "
197
  "Kunena Forums for Joomla, MyBB, Phorum, PHPFox, PHPWind, PunBB, SMF, "
200
  "now gone if you need to remove imported users."
201
  msgstr ""
202
 
203
+ #: includes/admin/classes/class-bbp-admin.php:961
204
  msgid "Theme Compatibility"
205
  msgstr ""
206
 
207
+ #: includes/admin/classes/class-bbp-admin.php:962
208
  msgid "Better handling of styles and scripts in the template stack."
209
  msgstr ""
210
 
211
+ #: includes/admin/classes/class-bbp-admin.php:966
212
  msgid "Polyglot support"
213
  msgstr ""
214
 
215
+ #: includes/admin/classes/class-bbp-admin.php:967
216
  msgid "bbPress fully supports automatic translation updates."
217
  msgstr ""
218
 
219
+ #: includes/admin/classes/class-bbp-admin.php:971
220
  msgid "User capabilities"
221
  msgstr ""
222
 
223
+ #: includes/admin/classes/class-bbp-admin.php:972
224
  msgid "Roles and capabilities have been swept through, cleaned up, and simplified."
225
  msgstr ""
226
 
227
+ #: includes/admin/classes/class-bbp-admin.php:978
228
+ #: includes/admin/classes/class-bbp-admin.php:1118
229
  msgid "Go to Forum Settings"
230
  msgstr ""
231
 
232
+ #: includes/admin/classes/class-bbp-admin.php:1008
233
  msgid "bbPress is created by a worldwide swarm of busy, busy bees."
234
  msgstr ""
235
 
236
+ #: includes/admin/classes/class-bbp-admin.php:1010
237
  msgid "Project Leaders"
238
  msgstr ""
239
 
240
+ #: includes/admin/classes/class-bbp-admin.php:1014
241
  msgid "Founding Developer"
242
  msgstr ""
243
 
244
+ #: includes/admin/classes/class-bbp-admin.php:1018
245
  msgid "Lead Developer"
246
  msgstr ""
247
 
248
+ #: includes/admin/classes/class-bbp-admin.php:1022
249
  msgid "Feature Virtuoso"
250
  msgstr ""
251
 
252
+ #: includes/admin/classes/class-bbp-admin.php:1026
253
  msgid "Tool Maven"
254
  msgstr ""
255
 
256
+ #: includes/admin/classes/class-bbp-admin.php:1030
257
  msgid "Contributing Developers"
258
  msgstr ""
259
 
260
+ #: includes/admin/classes/class-bbp-admin.php:1034
261
+ #: includes/admin/classes/class-bbp-admin.php:1038
262
  msgid "Core Developer"
263
  msgstr ""
264
 
265
+ #: includes/admin/classes/class-bbp-admin.php:1042
266
  msgid "Project Emeriti"
267
  msgstr ""
268
 
269
+ #: includes/admin/classes/class-bbp-admin.php:1046
270
  msgid "Feature Developer"
271
  msgstr ""
272
 
273
+ #: includes/admin/classes/class-bbp-admin.php:1050
274
  msgid "Integration Testing"
275
  msgstr ""
276
 
277
+ #: includes/admin/classes/class-bbp-admin.php:1054
278
  msgid "Contributors to bbPress 2.6"
279
  msgstr ""
280
 
281
+ #: includes/admin/classes/class-bbp-admin.php:1139
282
+ #: includes/admin/classes/class-bbp-admin.php:1161
283
  msgid "Update Forum"
284
  msgstr ""
285
 
286
+ #: includes/admin/classes/class-bbp-admin.php:1150
287
+ #: includes/admin/classes/class-bbp-admin.php:1199
288
  msgid "All done!"
289
  msgstr ""
290
 
291
+ #: includes/admin/classes/class-bbp-admin.php:1151
292
+ #: includes/admin/classes/class-bbp-admin.php:1200
293
  msgid "Go Back"
294
  msgstr ""
295
 
296
+ #: includes/admin/classes/class-bbp-admin.php:1160
297
  msgid "You can update your forum through this page. Hit the link below to update."
298
  msgstr ""
299
 
300
+ #: includes/admin/classes/class-bbp-admin.php:1234
301
  msgid ""
302
  "Warning! Problem updating %1$s. Your server may not be able to connect to "
303
  "sites running on it. Error message: %2$s"
304
  msgstr ""
305
 
306
+ #: includes/admin/classes/class-bbp-admin.php:1259
307
  msgid ""
308
  "If your browser doesn&#8217;t start loading the next page automatically, "
309
  "click this link:"
310
  msgstr ""
311
 
312
+ #: includes/admin/classes/class-bbp-admin.php:1260
313
  msgid "Next Forums"
314
  msgstr ""
315
 
316
+ #: includes/admin/classes/class-bbp-admin.php:1278
317
  msgid ""
318
  "You can update all the forums on your network through this page. It works "
319
  "by calling the update script of each site automatically. Hit the link below "
320
  "to update."
321
  msgstr ""
322
 
323
+ #: includes/admin/classes/class-bbp-converter-base.php:154
324
  msgid "Database connection failed."
325
  msgstr ""
326
 
377
  msgid "Next in %s seconds..."
378
  msgstr ""
379
 
380
+ #: includes/admin/classes/class-bbp-converter.php:513
381
  msgid "Readying sync-table"
382
  msgstr ""
383
 
384
+ #: includes/admin/classes/class-bbp-converter.php:514
385
  msgid "Sync-table ready"
386
  msgstr ""
387
 
388
+ #: includes/admin/classes/class-bbp-converter.php:517
389
+ msgid "Deleting previously converted data (%1$s through %2$s)"
390
  msgstr ""
391
 
392
+ #: includes/admin/classes/class-bbp-converter.php:524
393
  msgid "Skipping sync-table clean-up"
394
  msgstr ""
395
 
396
+ #: includes/admin/classes/class-bbp-converter.php:539
397
  msgid "No users to import"
398
  msgstr ""
399
 
400
+ #: includes/admin/classes/class-bbp-converter.php:540
401
  msgid "All users imported"
402
  msgstr ""
403
 
404
+ #: includes/admin/classes/class-bbp-converter.php:543
405
  msgid "Converting users (%1$s through %2$s of %3$s)"
406
  msgstr ""
407
 
408
+ #: includes/admin/classes/class-bbp-converter.php:547
409
  msgid "Skipping user clean-up"
410
  msgstr ""
411
 
412
+ #: includes/admin/classes/class-bbp-converter.php:562
413
  msgid "No passwords to clear"
414
  msgstr ""
415
 
416
+ #: includes/admin/classes/class-bbp-converter.php:563
417
  msgid "All passwords cleared"
418
  msgstr ""
419
 
420
+ #: includes/admin/classes/class-bbp-converter.php:566
421
+ msgid "Delete default WordPress user passwords (%1$s through %2$s)"
422
  msgstr ""
423
 
424
+ #: includes/admin/classes/class-bbp-converter.php:570
425
  msgid "Skipping password clean-up"
426
  msgstr ""
427
 
428
+ #: includes/admin/classes/class-bbp-converter.php:584
429
  msgid "No forums to import"
430
  msgstr ""
431
 
432
+ #: includes/admin/classes/class-bbp-converter.php:585
433
  msgid "All forums imported"
434
  msgstr ""
435
 
436
+ #: includes/admin/classes/class-bbp-converter.php:588
437
  msgid "Converting forums (%1$s through %2$s of %3$s)"
438
  msgstr ""
439
 
440
+ #: includes/admin/classes/class-bbp-converter.php:602
441
  msgid "No forum parents to import"
442
  msgstr ""
443
 
444
+ #: includes/admin/classes/class-bbp-converter.php:603
445
  msgid "All forum parents imported"
446
  msgstr ""
447
 
448
+ #: includes/admin/classes/class-bbp-converter.php:606
449
  msgid "Calculating forum hierarchy (%1$s through %2$s of %3$s)"
450
  msgstr ""
451
 
452
+ #: includes/admin/classes/class-bbp-converter.php:620
453
  msgid "No forum subscriptions to import"
454
  msgstr ""
455
 
456
+ #: includes/admin/classes/class-bbp-converter.php:621
457
  msgid "All forum subscriptions imported"
458
  msgstr ""
459
 
460
+ #: includes/admin/classes/class-bbp-converter.php:624
461
  msgid "Converting forum subscriptions (%1$s through %2$s of %3$s)"
462
  msgstr ""
463
 
464
+ #: includes/admin/classes/class-bbp-converter.php:638
465
  msgid "No topics to import"
466
  msgstr ""
467
 
468
+ #: includes/admin/classes/class-bbp-converter.php:639
469
  msgid "All topics imported"
470
  msgstr ""
471
 
472
+ #: includes/admin/classes/class-bbp-converter.php:642
473
  msgid "Converting topics (%1$s through %2$s of %3$s)"
474
  msgstr ""
475
 
476
+ #: includes/admin/classes/class-bbp-converter.php:656
477
  msgid "No anonymous topic authors to import"
478
  msgstr ""
479
 
480
+ #: includes/admin/classes/class-bbp-converter.php:657
481
  msgid "All anonymous topic authors imported"
482
  msgstr ""
483
 
484
+ #: includes/admin/classes/class-bbp-converter.php:660
485
  msgid "Converting anonymous topic authors (%1$s through %2$s of %3$s)"
486
  msgstr ""
487
 
488
+ #: includes/admin/classes/class-bbp-converter.php:674
489
  msgid "No stickies to import"
490
  msgstr ""
491
 
492
+ #: includes/admin/classes/class-bbp-converter.php:675
493
  msgid "All stickies imported"
494
  msgstr ""
495
 
496
+ #: includes/admin/classes/class-bbp-converter.php:678
497
  msgid "Calculating topic stickies (%1$s through %2$s of %3$s)"
498
  msgstr ""
499
 
500
+ #: includes/admin/classes/class-bbp-converter.php:692
501
  msgid "No super stickies to import"
502
  msgstr ""
503
 
504
+ #: includes/admin/classes/class-bbp-converter.php:693
505
  msgid "All super stickies imported"
506
  msgstr ""
507
 
508
+ #: includes/admin/classes/class-bbp-converter.php:696
509
  msgid "Calculating topic super stickies (%1$s through %2$s of %3$s)"
510
  msgstr ""
511
 
512
+ #: includes/admin/classes/class-bbp-converter.php:710
513
  msgid "No closed topics to import"
514
  msgstr ""
515
 
516
+ #: includes/admin/classes/class-bbp-converter.php:711
517
  msgid "All closed topics imported"
518
  msgstr ""
519
 
520
+ #: includes/admin/classes/class-bbp-converter.php:714
521
  msgid "Calculating closed topics (%1$s through %2$s of %3$s)"
522
  msgstr ""
523
 
524
+ #: includes/admin/classes/class-bbp-converter.php:728
525
  msgid "No topic tags to import"
526
  msgstr ""
527
 
528
+ #: includes/admin/classes/class-bbp-converter.php:729
529
  msgid "All topic tags imported"
530
  msgstr ""
531
 
532
+ #: includes/admin/classes/class-bbp-converter.php:732
533
  msgid "Converting topic tags (%1$s through %2$s of %3$s)"
534
  msgstr ""
535
 
536
+ #: includes/admin/classes/class-bbp-converter.php:746
537
  msgid "No topic subscriptions to import"
538
  msgstr ""
539
 
540
+ #: includes/admin/classes/class-bbp-converter.php:747
541
  msgid "All topic subscriptions imported"
542
  msgstr ""
543
 
544
+ #: includes/admin/classes/class-bbp-converter.php:750
545
  msgid "Converting topic subscriptions (%1$s through %2$s of %3$s)"
546
  msgstr ""
547
 
548
+ #: includes/admin/classes/class-bbp-converter.php:764
549
  msgid "No favorites to import"
550
  msgstr ""
551
 
552
+ #: includes/admin/classes/class-bbp-converter.php:765
553
  msgid "All favorites imported"
554
  msgstr ""
555
 
556
+ #: includes/admin/classes/class-bbp-converter.php:768
557
  msgid "Converting favorites (%1$s through %2$s of %3$s)"
558
  msgstr ""
559
 
560
+ #: includes/admin/classes/class-bbp-converter.php:782
561
  msgid "No replies to import"
562
  msgstr ""
563
 
564
+ #: includes/admin/classes/class-bbp-converter.php:783
565
  msgid "All replies imported"
566
  msgstr ""
567
 
568
+ #: includes/admin/classes/class-bbp-converter.php:786
569
  msgid "Converting replies (%1$s through %2$s of %3$s)"
570
  msgstr ""
571
 
572
+ #: includes/admin/classes/class-bbp-converter.php:800
573
  msgid "No anonymous reply authors to import"
574
  msgstr ""
575
 
576
+ #: includes/admin/classes/class-bbp-converter.php:801
577
  msgid "All anonymous reply authors imported"
578
  msgstr ""
579
 
580
+ #: includes/admin/classes/class-bbp-converter.php:804
581
  msgid "Converting anonymous reply authors (%1$s through %2$s of %3$s)"
582
  msgstr ""
583
 
584
+ #: includes/admin/classes/class-bbp-converter.php:818
585
  msgid "No threaded replies to import"
586
  msgstr ""
587
 
588
+ #: includes/admin/classes/class-bbp-converter.php:819
589
  msgid "All threaded replies imported"
590
  msgstr ""
591
 
592
+ #: includes/admin/classes/class-bbp-converter.php:822
593
  msgid "Calculating threaded replies parents (%1$s through %2$s of %3$s)"
594
  msgstr ""
595
 
596
+ #: includes/admin/classes/class-bbp-converter.php:833
597
  msgid "Import Finished"
598
  msgstr ""
599
 
600
+ #: includes/admin/classes/class-bbp-topic-replies-list-table.php:59
601
+ #: includes/admin/replies.php:667 includes/admin/topics.php:858
602
  #: templates/default/bbpress/loop-replies.php:18
603
  #: templates/default/bbpress/loop-replies.php:44
604
  #: templates/default/bbpress/loop-search.php:19
606
  msgid "Author"
607
  msgstr ""
608
 
609
+ #: includes/admin/classes/class-bbp-topic-replies-list-table.php:60
610
  msgid "Content"
611
  msgstr ""
612
 
613
+ #: includes/admin/classes/class-bbp-topic-replies-list-table.php:61
614
  msgid "Replied"
615
  msgstr ""
616
 
617
+ #: includes/admin/classes/class-bbp-topic-replies-list-table.php:90
618
  msgid "Unapprove"
619
  msgstr ""
620
 
621
+ #: includes/admin/classes/class-bbp-topic-replies-list-table.php:91
622
+ #: includes/admin/replies.php:235 includes/admin/replies.php:818
623
+ #: includes/admin/topics.php:240 includes/admin/topics.php:1023
624
+ #: includes/replies/template.php:2028 includes/topics/template.php:2833
625
  msgid "Spam"
626
  msgstr ""
627
 
628
+ #: includes/admin/classes/class-bbp-topic-replies-list-table.php:92
629
+ #: includes/admin/replies.php:833 includes/admin/topics.php:1037
630
+ #: includes/replies/template.php:1960 includes/topics/template.php:2541
631
  msgid "Trash"
632
  msgstr ""
633
 
634
+ #: includes/admin/classes/class-bbp-topic-replies-list-table.php:144
635
+ #: includes/admin/replies.php:796 includes/admin/topics.php:975
636
+ #: includes/admin/topics.php:994 includes/admin/users.php:260
637
  msgid "View"
638
  msgstr ""
639
 
640
+ #: includes/admin/classes/class-bbp-topic-replies-list-table.php:149
641
+ #: includes/common/template.php:2262 includes/forums/template.php:54
642
+ #: includes/replies/template.php:55 includes/replies/template.php:1848
643
+ #: includes/topics/template.php:53 includes/topics/template.php:2429
644
  #: templates/default/bbpress/user-details.php:74
645
  msgid "Edit"
646
  msgstr ""
647
 
648
+ #: includes/admin/classes/class-bbp-topic-replies-list-table.php:249
649
  msgid "No replies to this topic."
650
  msgstr ""
651
 
652
+ #: includes/admin/forums.php:101 includes/admin/replies.php:115
653
+ #: includes/admin/settings.php:1845 includes/admin/tools/help.php:95
654
+ #: includes/admin/topics.php:119
655
  msgid "Overview"
656
  msgstr ""
657
 
661
  "the display of this screen to suit your workflow."
662
  msgstr ""
663
 
664
+ #: includes/admin/forums.php:109 includes/admin/replies.php:123
665
+ #: includes/admin/topics.php:127
666
  msgid "Screen Content"
667
  msgstr ""
668
 
669
+ #: includes/admin/forums.php:111 includes/admin/replies.php:125
670
+ #: includes/admin/topics.php:129
671
  msgid ""
672
  "You can customize the display of this screen&#8217;s contents in a number "
673
  "of ways:"
694
  "forum creator in the forums list."
695
  msgstr ""
696
 
697
+ #: includes/admin/forums.php:122 includes/admin/replies.php:137
698
+ #: includes/admin/topics.php:141
699
  msgid "Available Actions"
700
  msgstr ""
701
 
713
 
714
  #: includes/admin/forums.php:127
715
  msgid ""
716
+ "<strong>Close</strong> will mark the selected forum as &#8217;closed&#8217 "
717
+ "and disable the ability to post new topics and replies in it."
718
+ msgstr ""
719
+
720
+ #: includes/admin/forums.php:128
721
+ msgid ""
722
  "<strong>Trash</strong> removes your forum from this list and places it in "
723
  "the trash, from which you can permanently delete it."
724
  msgstr ""
725
 
726
+ #: includes/admin/forums.php:129
727
  msgid ""
728
+ "<strong>View</strong> will either show you what your draft forum will look "
729
+ "like if you publish it, or take you to your live site to view it. Which "
730
+ "link depends on your forum&#8217;s status."
731
  msgstr ""
732
 
733
+ #: includes/admin/forums.php:136 includes/admin/replies.php:153
734
  #: includes/admin/tools/repair.php:47 includes/admin/tools/repair.php:149
735
  #: includes/admin/tools/upgrade.php:44 includes/admin/tools/upgrade.php:146
736
+ #: includes/admin/topics.php:159
737
  msgid "Bulk Actions"
738
  msgstr ""
739
 
740
+ #: includes/admin/forums.php:138
741
  msgid ""
742
  "You can also edit or move multiple forums to the trash at once. Select the "
743
  "forums you want to act on using the checkboxes, then select the action you "
744
  "want to take from the Bulk Actions menu and click Apply."
745
  msgstr ""
746
 
747
+ #: includes/admin/forums.php:139
748
  msgid ""
749
  "When using Bulk Edit, you can change the metadata (categories, author, "
750
  "etc.) for all selected forums at once. To remove a forum from the grouping, "
751
  "just click the x next to its name in the Bulk Edit area that appears."
752
  msgstr ""
753
 
754
+ #: includes/admin/forums.php:144 includes/admin/forums.php:200
755
+ #: includes/admin/replies.php:161 includes/admin/replies.php:215
756
+ #: includes/admin/settings.php:1911 includes/admin/tools/help.php:43
757
  #: includes/admin/tools/help.php:72 includes/admin/tools/help.php:130
758
+ #: includes/admin/topics.php:167 includes/admin/topics.php:220
759
  msgid "For more information:"
760
  msgstr ""
761
 
762
+ #: includes/admin/forums.php:145 includes/admin/forums.php:201
763
+ #: includes/admin/replies.php:162 includes/admin/replies.php:216
764
+ #: includes/admin/settings.php:1912 includes/admin/tools/help.php:44
765
  #: includes/admin/tools/help.php:73 includes/admin/tools/help.php:131
766
+ #: includes/admin/topics.php:168 includes/admin/topics.php:221
767
  msgid ""
768
  "<a href=\"https://codex.bbpress.org\" target=\"_blank\">bbPress "
769
  "Documentation</a>"
770
  msgstr ""
771
 
772
+ #: includes/admin/forums.php:146 includes/admin/forums.php:202
773
+ #: includes/admin/replies.php:163 includes/admin/replies.php:217
774
+ #: includes/admin/settings.php:1913 includes/admin/tools/help.php:45
775
  #: includes/admin/tools/help.php:74 includes/admin/tools/help.php:132
776
+ #: includes/admin/topics.php:169 includes/admin/topics.php:222
777
  msgid ""
778
  "<a href=\"https://bbpress.org/forums/\" target=\"_blank\">bbPress Support "
779
  "Forums</a>"
780
  msgstr ""
781
 
782
+ #: includes/admin/forums.php:157
783
  msgid ""
784
  "The title field and the big forum editing Area are fixed in place, but you "
785
  "can reposition all the other boxes using drag and drop, and can minimize or "
789
  "screen."
790
  msgstr ""
791
 
792
+ #: includes/admin/forums.php:161 includes/admin/replies.php:178
793
+ #: includes/admin/topics.php:184
794
  msgid "Customizing This Display"
795
  msgstr ""
796
 
797
+ #: includes/admin/forums.php:167
798
  msgid "Title and Forum Editor"
799
  msgstr ""
800
 
801
+ #: includes/admin/forums.php:169
802
  msgid ""
803
  "<strong>Title</strong> - Enter a title for your forum. After you enter a "
804
  "title, you&#8217;ll see the permalink below, which you can edit."
805
  msgstr ""
806
 
807
+ #: includes/admin/forums.php:170
808
  msgid ""
809
  "<strong>Forum Editor</strong> - Enter the text for your forum. There are "
810
  "two modes of editing: Visual and HTML. Choose the mode by clicking on the "
819
  "editor."
820
  msgstr ""
821
 
822
+ #: includes/admin/forums.php:173
823
  msgid ""
824
  "<strong>Publish</strong> - You can set the terms of publishing your forum "
825
  "in the Publish box. For Status, Visibility, and Publish (immediately), "
830
  "future or backdate a forum."
831
  msgstr ""
832
 
833
+ #: includes/admin/forums.php:176
834
  msgid ""
835
  "<strong>Featured Image</strong> - This allows you to associate an image "
836
  "with your forum without inserting it. This is usually useful only if your "
838
  "page, a custom header, etc."
839
  msgstr ""
840
 
841
+ #: includes/admin/forums.php:181 includes/admin/forums.php:214
842
+ #: includes/forums/template.php:69
843
  msgid "Forum Attributes"
844
  msgstr ""
845
 
846
+ #: includes/admin/forums.php:183
847
  msgid "Select the attributes that your forum should have:"
848
  msgstr ""
849
 
850
+ #: includes/admin/forums.php:185
851
  msgid ""
852
  "<strong>Type</strong> indicates if the forum is a category or forum. "
853
  "Categories generally contain other forums."
854
  msgstr ""
855
 
856
+ #: includes/admin/forums.php:186
857
  msgid ""
858
  "<strong>Status</strong> allows you to close a forum to new topics and "
859
  "forums."
860
  msgstr ""
861
 
862
+ #: includes/admin/forums.php:187
863
  msgid ""
864
  "<strong>Visibility</strong> lets you pick the scope of each forum and what "
865
  "users are allowed to access it."
866
  msgstr ""
867
 
868
+ #: includes/admin/forums.php:188
869
  msgid ""
870
  "<strong>Parent</strong> dropdown determines the parent forum. Select the "
871
  "forum or category from the dropdown, or leave the default \"No parent\" to "
872
  "create the forum at the root of your forums."
873
  msgstr ""
874
 
875
+ #: includes/admin/forums.php:189
876
  msgid "<strong>Order</strong> allows you to order your forums numerically."
877
  msgstr ""
878
 
879
+ #: includes/admin/forums.php:195 includes/admin/replies.php:210
880
+ #: includes/admin/topics.php:215
881
  msgid "Publish Box"
882
  msgstr ""
883
 
884
+ #: includes/admin/forums.php:237 includes/admin/settings.php:208
885
  #: includes/admin/tools/reset.php:41
886
  msgid "Forum Moderators"
887
  msgstr ""
888
 
889
+ #: includes/admin/forums.php:267 includes/admin/settings.php:184
890
+ #: includes/admin/settings.php:436 includes/admin/tools/common.php:284
891
+ #: includes/admin/topics.php:480 includes/extend/buddypress/loader.php:260
892
  #: templates/default/bbpress/user-details.php:67
893
  msgid "Subscriptions"
894
  msgstr ""
895
 
896
+ #: includes/admin/forums.php:361
897
  msgid "The forum was not found."
898
  msgstr ""
899
 
900
+ #: includes/admin/forums.php:366 includes/admin/replies.php:464
901
+ #: includes/admin/topics.php:582
902
  msgid "You do not have permission to do that."
903
  msgstr ""
904
 
905
+ #: includes/admin/forums.php:451
906
  msgid "There was a problem opening the forum \"%1$s\"."
907
  msgstr ""
908
 
909
+ #: includes/admin/forums.php:452
910
  msgid "Forum \"%1$s\" successfully opened."
911
  msgstr ""
912
 
913
+ #: includes/admin/forums.php:457
914
  msgid "There was a problem closing the forum \"%1$s\"."
915
  msgstr ""
916
 
917
+ #: includes/admin/forums.php:458
918
  msgid "Forum \"%1$s\" successfully closed."
919
  msgstr ""
920
 
921
+ #: includes/admin/forums.php:540 includes/admin/metaboxes.php:659
922
  msgid "Moderators"
923
  msgstr ""
924
 
925
+ #: includes/admin/forums.php:541
926
  #: templates/default/bbpress/content-single-topic-lead.php:19
927
  #: templates/default/bbpress/content-single-topic-lead.php:87
928
  msgid "Creator"
929
  msgstr ""
930
 
931
+ #: includes/admin/forums.php:542 includes/admin/replies.php:668
932
+ #: includes/admin/topics.php:859
933
  msgid "Created"
934
  msgstr ""
935
 
936
+ #: includes/admin/forums.php:543 includes/admin/topics.php:860
937
  #: templates/default/bbpress/loop-forums.php:26
938
  #: templates/default/bbpress/loop-topics.php:24
939
  msgid "Last Post"
940
  msgstr ""
941
 
942
+ #: includes/admin/forums.php:578
943
  msgid "&mdash;"
944
  msgstr ""
945
 
946
+ #: includes/admin/forums.php:595 includes/forums/template.php:572
947
  msgid "No Topics"
948
  msgstr ""
949
 
950
+ #: includes/admin/forums.php:631
951
  msgid "Close this forum"
952
  msgstr ""
953
 
954
+ #: includes/admin/forums.php:633
955
  msgid "Open this forum"
956
  msgstr ""
957
 
958
+ #: includes/admin/forums.php:701 includes/admin/forums.php:713
959
  msgid "Forum updated."
960
  msgstr ""
961
 
962
+ #: includes/admin/forums.php:703 includes/admin/forums.php:726
963
  msgid "View forum"
964
  msgstr ""
965
 
966
+ #: includes/admin/forums.php:707 includes/admin/replies.php:977
967
+ #: includes/admin/topics.php:1181
968
  msgid "Custom field updated."
969
  msgstr ""
970
 
971
+ #: includes/admin/forums.php:710 includes/admin/replies.php:980
972
+ #: includes/admin/topics.php:1184
973
  msgid "Custom field deleted."
974
  msgstr ""
975
 
976
+ #: includes/admin/forums.php:718
977
  #. translators: %s: date and time of the revision
978
  msgid "Forum restored to revision from %s"
979
  msgstr ""
980
 
981
+ #: includes/admin/forums.php:724
982
  msgid "Forum created."
983
  msgstr ""
984
 
985
+ #: includes/admin/forums.php:730
986
  msgid "Forum saved."
987
  msgstr ""
988
 
989
+ #: includes/admin/forums.php:735
990
  msgid "Forum submitted."
991
  msgstr ""
992
 
993
+ #: includes/admin/forums.php:737 includes/admin/forums.php:749
994
+ #: includes/admin/forums.php:757
995
  msgid "Preview forum"
996
  msgstr ""
997
 
998
+ #: includes/admin/forums.php:744
999
  msgid "Forum scheduled for: %s."
1000
  msgstr ""
1001
 
1002
+ #: includes/admin/forums.php:746 includes/admin/replies.php:1016
1003
+ #: includes/admin/topics.php:1220
1004
  #. translators: Publish box date format, see http:php.net/date
1005
  msgid "M j, Y @ G:i"
1006
  msgstr ""
1007
 
1008
+ #: includes/admin/forums.php:755
1009
  msgid "Forum draft updated."
1010
  msgstr ""
1011
 
1050
  msgstr[1] ""
1051
 
1052
  #: includes/admin/metaboxes.php:166 includes/admin/settings.php:367
1053
+ #: includes/topics/template.php:3393
1054
  msgid "Topic Tag"
1055
  msgid_plural "Topic Tags"
1056
  msgstr[0] ""
1134
  msgstr ""
1135
 
1136
  #: includes/admin/metaboxes.php:431 includes/admin/metaboxes.php:495
1137
+ #: includes/extend/buddypress/groups.php:1188 includes/topics/template.php:65
1138
  #: templates/default/bbpress/form-topic.php:124
1139
  #: templates/default/bbpress/loop-search-forum.php:25
1140
  msgid "Forum:"
1141
  msgstr ""
1142
 
1143
+ #: includes/admin/metaboxes.php:445 includes/extend/buddypress/groups.php:356
1144
  #: templates/default/bbpress/form-topic.php:127
1145
  msgid "&mdash; No forum &mdash;"
1146
  msgstr ""
1153
  msgid "&mdash; No reply &mdash;"
1154
  msgstr ""
1155
 
1156
+ #: includes/admin/metaboxes.php:522
1157
  #: templates/default/bbpress/loop-search-topic.php:25
1158
  msgid "Topic:"
1159
  msgstr ""
1226
  msgid "No users have favorited this topic."
1227
  msgstr ""
1228
 
1229
+ #: includes/admin/metaboxes.php:769
1230
  msgid "No users have subscribed to this topic."
1231
  msgstr ""
1232
 
1233
+ #: includes/admin/metaboxes.php:805
1234
  msgid "No users have subscribed to this forum."
1235
  msgstr ""
1236
 
1237
+ #: includes/admin/replies.php:117
1238
  msgid ""
1239
  "This screen provides access to all of your replies. You can customize the "
1240
  "display of this screen to suit your workflow."
1241
  msgstr ""
1242
 
1243
+ #: includes/admin/replies.php:127
1244
  msgid ""
1245
  "You can hide/display columns based on your needs and decide how many "
1246
  "replies to list per screen using the Screen Options tab."
1247
  msgstr ""
1248
 
1249
+ #: includes/admin/replies.php:128
1250
  msgid ""
1251
  "You can filter the list of replies by reply status using the text links in "
1252
  "the upper left to show All, Published, Draft, Pending, Trashed, or Spam "
1253
  "replies. The default view is to show all replies."
1254
  msgstr ""
1255
 
1256
+ #: includes/admin/replies.php:129
1257
  msgid ""
1258
  "You can view replies in a simple title list or with an excerpt. Choose the "
1259
  "view you prefer by clicking on the icons at the top of the list on the "
1260
  "right."
1261
  msgstr ""
1262
 
1263
+ #: includes/admin/replies.php:130
1264
  msgid ""
1265
  "You can refine the list to show only replies in a specific forum or from a "
1266
  "specific month by using the dropdown menus above the replies list. Click "
1267
  "the Filter button after making your selection."
1268
  msgstr ""
1269
 
1270
+ #: includes/admin/replies.php:139
1271
  msgid ""
1272
  "Hovering over a row in the replies list will display action links that "
1273
  "allow you to manage your reply. You can perform the following actions:"
1274
  msgstr ""
1275
 
1276
+ #: includes/admin/replies.php:141
1277
  msgid ""
1278
  "<strong>Edit</strong> takes you to the editing screen for that reply. You "
1279
  "can also reach that screen by clicking on the reply title."
1280
  msgstr ""
1281
 
1282
+ #: includes/admin/replies.php:143
1283
  msgid ""
1284
  "<strong>Trash</strong> removes your reply from this list and places it in "
1285
  "the trash, from which you can permanently delete it."
1286
  msgstr ""
1287
 
1288
+ #: includes/admin/replies.php:144
1289
  msgid ""
1290
  "<strong>Spam</strong> removes your reply from this list and places it in "
1291
  "the spam queue, from which you can permanently delete it."
1292
  msgstr ""
1293
 
1294
+ #: includes/admin/replies.php:145
1295
  msgid "<strong>View</strong> will take you to your live site to view the reply."
1296
  msgstr ""
1297
 
1298
+ #: includes/admin/replies.php:146 includes/admin/topics.php:148
1299
  msgid "<strong>Approve</strong> will change the status from pending to publish."
1300
  msgstr ""
1301
 
1302
+ #: includes/admin/replies.php:155
1303
  msgid ""
1304
  "You can also edit, spam, or move multiple replies to the trash at once. "
1305
  "Select the replies you want to act on using the checkboxes, then select the "
1306
  "action you want to take from the Bulk Actions menu and click Apply."
1307
  msgstr ""
1308
 
1309
+ #: includes/admin/replies.php:156
1310
  msgid ""
1311
  "When using Bulk Edit, you can change the metadata (categories, author, "
1312
  "etc.) for all selected replies at once. To remove a reply from the "
1314
  "appears."
1315
  msgstr ""
1316
 
1317
+ #: includes/admin/replies.php:174
1318
  msgid ""
1319
  "The title field and the big reply editing Area are fixed in place, but you "
1320
  "can reposition all the other boxes using drag and drop, and can minimize or "
1324
  "screen."
1325
  msgstr ""
1326
 
1327
+ #: includes/admin/replies.php:184
1328
  msgid "Title and Reply Editor"
1329
  msgstr ""
1330
 
1331
+ #: includes/admin/replies.php:186
1332
  msgid ""
1333
  "<strong>Title</strong> - Enter a title for your reply. After you enter a "
1334
  "title, you&#8217;ll see the permalink below, which you can edit."
1335
  msgstr ""
1336
 
1337
+ #: includes/admin/replies.php:187
1338
  msgid ""
1339
  "<strong>Reply Editor</strong> - Enter the text for your reply. There are "
1340
  "two modes of editing: Visual and HTML. Choose the mode by clicking on the "
1349
  "editor."
1350
  msgstr ""
1351
 
1352
+ #: includes/admin/replies.php:190
1353
  msgid ""
1354
  "<strong>Publish</strong> - You can set the terms of publishing your reply "
1355
  "in the Publish box. For Status, Visibility, and Publish (immediately), "
1360
  "future or backdate a reply."
1361
  msgstr ""
1362
 
1363
+ #: includes/admin/replies.php:193
1364
  msgid ""
1365
  "<strong>Featured Image</strong> - This allows you to associate an image "
1366
  "with your reply without inserting it. This is usually useful only if your "
1368
  "page, a custom header, etc."
1369
  msgstr ""
1370
 
1371
+ #: includes/admin/replies.php:198 includes/admin/replies.php:336
1372
+ #: includes/replies/template.php:70
1373
  msgid "Reply Attributes"
1374
  msgstr ""
1375
 
1376
+ #: includes/admin/replies.php:200
1377
  msgid "Select the attributes that your reply should have:"
1378
  msgstr ""
1379
 
1380
+ #: includes/admin/replies.php:202
1381
  msgid ""
1382
  "<strong>Forum</strong> dropdown determines the parent forum that the reply "
1383
  "belongs to. Select the forum, or leave the default (Use Forum of Topic) to "
1384
  "post the reply in forum of the topic."
1385
  msgstr ""
1386
 
1387
+ #: includes/admin/replies.php:203
1388
  msgid ""
1389
  "<strong>Topic</strong> determines the parent topic that the reply belongs "
1390
  "to."
1391
  msgstr ""
1392
 
1393
+ #: includes/admin/replies.php:204
1394
  msgid "<strong>Reply To</strong> determines the threading of the reply."
1395
  msgstr ""
1396
 
1397
+ #: includes/admin/replies.php:233 includes/admin/topics.php:238
1398
+ #: includes/replies/template.php:2029 includes/topics/template.php:2834
1399
  msgid "Unspam"
1400
  msgstr ""
1401
 
1402
+ #: includes/admin/replies.php:251
1403
  msgid "%s reply updated."
1404
  msgid_plural "%s replies updated."
1405
  msgstr[0] ""
1406
  msgstr[1] ""
1407
 
1408
+ #: includes/admin/replies.php:253
1409
  msgid "1 reply not updated, somebody is editing it."
1410
  msgstr ""
1411
 
1412
+ #: includes/admin/replies.php:254
1413
  msgid "%s reply not updated, somebody is editing it."
1414
  msgid_plural "%s replies not updated, somebody is editing them."
1415
  msgstr[0] ""
1416
  msgstr[1] ""
1417
 
1418
+ #: includes/admin/replies.php:278 includes/admin/topics.php:283
1419
  msgid "Sorry, you are not allowed to spam this item."
1420
  msgstr ""
1421
 
1422
+ #: includes/admin/replies.php:287
1423
  msgid "Error in spamming reply."
1424
  msgstr ""
1425
 
1426
+ #: includes/admin/replies.php:303
1427
  msgid "Sorry, you are not allowed to unspam this reply."
1428
  msgstr ""
1429
 
1430
+ #: includes/admin/replies.php:312
1431
  msgid "Error in unspamming reply."
1432
  msgstr ""
1433
 
1434
+ #: includes/admin/replies.php:361 includes/admin/topics.php:364
1435
  #: templates/default/bbpress/form-anonymous.php:18
1436
  msgid "Author Information"
1437
  msgstr ""
1438
 
1439
+ #: includes/admin/replies.php:459
1440
  msgid "The reply was not found."
1441
  msgstr ""
1442
 
1443
+ #: includes/admin/replies.php:562
1444
  msgid "There was a problem marking the reply \"%1$s\" as spam."
1445
  msgstr ""
1446
 
1447
+ #: includes/admin/replies.php:563
1448
  msgid "Reply \"%1$s\" successfully marked as spam."
1449
  msgstr ""
1450
 
1451
+ #: includes/admin/replies.php:568
1452
  msgid "There was a problem unmarking the reply \"%1$s\" as spam."
1453
  msgstr ""
1454
 
1455
+ #: includes/admin/replies.php:569
1456
  msgid "Reply \"%1$s\" successfully unmarked as spam."
1457
  msgstr ""
1458
 
1459
+ #: includes/admin/replies.php:574
1460
  msgid "There was a problem approving the reply \"%1$s\"."
1461
  msgstr ""
1462
 
1463
+ #: includes/admin/replies.php:575
1464
  msgid "Reply \"%1$s\" successfully approved."
1465
  msgstr ""
1466
 
1467
+ #: includes/admin/replies.php:580
1468
  msgid "There was a problem unapproving the reply \"%1$s\"."
1469
  msgstr ""
1470
 
1471
+ #: includes/admin/replies.php:581
1472
  msgid "Reply \"%1$s\" successfully unapproved."
1473
  msgstr ""
1474
 
1475
+ #: includes/admin/replies.php:664
1476
  msgid "Title"
1477
  msgstr ""
1478
 
1479
+ #: includes/admin/replies.php:707
1480
  msgid "No topic"
1481
  msgstr ""
1482
 
1483
+ #: includes/admin/replies.php:728
1484
  msgid "(Mismatch)"
1485
  msgstr ""
1486
 
1487
+ #: includes/admin/replies.php:740 includes/admin/topics.php:899
1488
  msgid "No forum"
1489
  msgstr ""
1490
 
1491
+ #: includes/admin/replies.php:796 includes/admin/topics.php:975
1492
+ #: includes/admin/topics.php:994
1493
  msgid "View &#8220;%s&#8221;"
1494
  msgstr ""
1495
 
1496
+ #: includes/admin/replies.php:809
1497
  msgid "Unapprove this reply"
1498
  msgstr ""
1499
 
1500
+ #: includes/admin/replies.php:811
1501
  msgid "Approve this reply"
1502
  msgstr ""
1503
 
1504
+ #: includes/admin/replies.php:818
1505
+ msgid "Mark this reply as spam"
1506
  msgstr ""
1507
 
1508
+ #: includes/admin/replies.php:820
1509
+ msgid "Mark the reply as not spam"
1510
  msgstr ""
1511
 
1512
+ #: includes/admin/replies.php:820 includes/admin/topics.php:1025
1513
+ msgid "Not Spam"
1514
  msgstr ""
1515
 
1516
+ #: includes/admin/replies.php:831 includes/admin/topics.php:1035
1517
+ #: includes/replies/template.php:1978 includes/topics/template.php:2558
1518
  msgid "Restore this item from the Trash"
1519
  msgstr ""
1520
 
1521
+ #: includes/admin/replies.php:831 includes/admin/topics.php:1035
1522
+ #: includes/replies/template.php:1961 includes/topics/template.php:2542
1523
  msgid "Restore"
1524
  msgstr ""
1525
 
1526
+ #: includes/admin/replies.php:833 includes/admin/topics.php:1037
1527
+ #: includes/replies/template.php:1982 includes/topics/template.php:2560
1528
  msgid "Move this item to the Trash"
1529
  msgstr ""
1530
 
1531
+ #: includes/admin/replies.php:837 includes/admin/topics.php:1041
1532
+ #: includes/replies/template.php:1987 includes/topics/template.php:2564
1533
  msgid "Delete this item permanently"
1534
  msgstr ""
1535
 
1536
+ #: includes/admin/replies.php:837 includes/admin/topics.php:1041
1537
  msgid "Delete Permanently"
1538
  msgstr ""
1539
 
1540
+ #: includes/admin/replies.php:891 includes/admin/topics.php:1095
1541
+ msgid "In all forums"
1542
  msgstr ""
1543
 
1544
+ #: includes/admin/replies.php:914 includes/admin/topics.php:1118
1545
+ msgid "Empty Spam"
1546
  msgstr ""
1547
 
1548
+ #: includes/admin/replies.php:971 includes/admin/replies.php:983
1549
  msgid "Reply updated."
1550
  msgstr ""
1551
 
1552
+ #: includes/admin/replies.php:973 includes/admin/replies.php:996
1553
+ #: includes/admin/topics.php:1177 includes/admin/topics.php:1200
1554
  msgid "View topic"
1555
  msgstr ""
1556
 
1557
+ #: includes/admin/replies.php:988
1558
  #. translators: %s: date and time of the revision
1559
  msgid "Reply restored to revision from %s"
1560
  msgstr ""
1561
 
1562
+ #: includes/admin/replies.php:994
1563
  msgid "Reply created."
1564
  msgstr ""
1565
 
1566
+ #: includes/admin/replies.php:1000
1567
  msgid "Reply saved."
1568
  msgstr ""
1569
 
1570
+ #: includes/admin/replies.php:1005
1571
  msgid "Reply submitted."
1572
  msgstr ""
1573
 
1574
+ #: includes/admin/replies.php:1007 includes/admin/replies.php:1019
1575
+ #: includes/admin/replies.php:1027 includes/admin/topics.php:1211
1576
+ #: includes/admin/topics.php:1223 includes/admin/topics.php:1231
1577
  msgid "Preview topic"
1578
  msgstr ""
1579
 
1580
+ #: includes/admin/replies.php:1014
1581
  msgid "Reply scheduled for: %s."
1582
  msgstr ""
1583
 
1584
+ #: includes/admin/replies.php:1025
1585
  msgid "Reply draft updated."
1586
  msgstr ""
1587
 
1645
  msgid "Editing"
1646
  msgstr ""
1647
 
1648
+ #: includes/admin/settings.php:155 includes/users/template.php:800
1649
  msgid "Anonymous"
1650
  msgstr ""
1651
 
1652
+ #: includes/admin/settings.php:168 includes/admin/settings.php:1998
1653
  msgid "Revisions"
1654
  msgstr ""
1655
 
1656
+ #: includes/admin/settings.php:176 includes/admin/tools/common.php:281
1657
+ #: includes/admin/topics.php:450 includes/extend/buddypress/loader.php:247
1658
  #: templates/default/bbpress/user-details.php:57
1659
  msgid "Favorites"
1660
  msgstr ""
1661
 
1662
  #: includes/admin/settings.php:192 includes/admin/settings.php:444
1663
+ #: includes/admin/tools/common.php:287 includes/admin/topics.php:420
1664
+ #: includes/extend/buddypress/loader.php:234
1665
+ #: includes/extend/buddypress/loader.php:336
1666
  #: templates/default/bbpress/user-details.php:49
1667
  msgid "Engagements"
1668
  msgstr ""
1676
  msgstr ""
1677
 
1678
  #: includes/admin/settings.php:224 includes/admin/settings.php:391
1679
+ #: includes/common/template.php:2377 includes/search/template.php:175
1680
  #: templates/default/bbpress/form-reply-search.php:20
1681
  #: templates/default/bbpress/form-search.php:21
1682
  #: templates/default/bbpress/form-topic-search.php:20
1719
  msgid "User Base"
1720
  msgstr ""
1721
 
1722
+ #: includes/admin/settings.php:412 includes/extend/buddypress/loader.php:211
1723
+ #: includes/extend/buddypress/loader.php:319
1724
  #: templates/default/bbpress/user-details.php:36
1725
  msgid "Topics Started"
1726
  msgstr ""
1727
 
1728
+ #: includes/admin/settings.php:420 includes/extend/buddypress/loader.php:222
1729
+ #: includes/extend/buddypress/loader.php:327
1730
  #: templates/default/bbpress/user-details.php:42
1731
  msgid "Replies Created"
1732
  msgstr ""
1733
 
1734
+ #: includes/admin/settings.php:428 includes/extend/buddypress/loader.php:346
1735
  msgid "Favorite Topics"
1736
  msgstr ""
1737
 
1984
 
1985
  #: includes/admin/settings.php:1525
1986
  msgid ""
1987
+ "Information about the database for your previous forums so they can be "
1988
+ "converted."
1989
  msgstr ""
1990
 
1991
  #: includes/admin/settings.php:1548
1992
+ msgid "The previous forum software"
1993
  msgstr ""
1994
 
1995
  #: includes/admin/settings.php:1562
1996
+ msgid "Use default %s if same server, or IP or hostname"
1997
  msgstr ""
1998
 
1999
  #: includes/admin/settings.php:1576
2000
+ msgid "Use default %s if unsure"
2001
  msgstr ""
2002
 
2003
  #: includes/admin/settings.php:1590
2021
  msgstr ""
2022
 
2023
  #: includes/admin/settings.php:1651
2024
+ msgid "Use %s if converting from BuddyPress Legacy"
2025
  msgstr ""
2026
 
2027
  #: includes/admin/settings.php:1665
2105
  msgid "Import Forums"
2106
  msgstr ""
2107
 
2108
+ #: includes/admin/settings.php:1787
 
 
 
 
2109
  msgid "Toggle panel: Import Status"
2110
  msgstr ""
2111
 
2112
+ #: includes/admin/settings.php:1791
2113
  msgid "Import Monitor"
2114
  msgstr ""
2115
 
2116
+ #: includes/admin/settings.php:1803
2117
+ msgid "Pause"
2118
+ msgstr ""
2119
+
2120
+ #: includes/admin/settings.php:1846
2121
  msgid "This screen provides access to all of the Forums settings."
2122
  msgstr ""
2123
 
2124
+ #: includes/admin/settings.php:1847 includes/admin/tools/help.php:97
2125
  msgid ""
2126
  "Please see the additional help tabs for more information on each individual "
2127
  "section."
2128
  msgstr ""
2129
 
2130
+ #: includes/admin/settings.php:1853
2131
  msgid "Main Settings"
2132
  msgstr ""
2133
 
2134
+ #: includes/admin/settings.php:1854
2135
  msgid "The \"Main Settings\" section includes a number of options:"
2136
  msgstr ""
2137
 
2138
+ #: includes/admin/settings.php:1857
2139
  msgid ""
2140
  "You can choose to lock a post after a certain number of minutes. \"Locking "
2141
  "post editing\" will prevent the author from editing some amount of time "
2142
  "after saving a post."
2143
  msgstr ""
2144
 
2145
+ #: includes/admin/settings.php:1858
2146
  msgid ""
2147
  "\"Throttle time\" is the amount of time required between posts from a "
2148
  "single author. The higher the throttle time, the longer a user will need to "
2149
  "wait between posting to the forum."
2150
  msgstr ""
2151
 
2152
+ #: includes/admin/settings.php:1859
2153
  msgid ""
2154
  "Favorites are a way for users to save and later return to topics they "
2155
  "favor. This is enabled by default."
2156
  msgstr ""
2157
 
2158
+ #: includes/admin/settings.php:1860
2159
  msgid ""
2160
  "Subscriptions allow users to subscribe for notifications to topics that "
2161
  "interest them. This is enabled by default."
2162
  msgstr ""
2163
 
2164
+ #: includes/admin/settings.php:1861
2165
  msgid ""
2166
  "Topic-Tags allow users to filter topics between forums. This is enabled by "
2167
  "default."
2168
  msgstr ""
2169
 
2170
+ #: includes/admin/settings.php:1862
2171
  msgid ""
2172
  "\"Anonymous Posting\" allows guest users who do not have accounts on your "
2173
  "site to both create topics as well as replies."
2174
  msgstr ""
2175
 
2176
+ #: includes/admin/settings.php:1863
2177
  msgid ""
2178
  "The Fancy Editor brings the luxury of the Visual editor and HTML editor "
2179
  "from the traditional WordPress dashboard into your theme."
2180
  msgstr ""
2181
 
2182
+ #: includes/admin/settings.php:1864
2183
  msgid ""
2184
  "Auto-embed will embed the media content from a URL directly into the "
2185
  "replies. For example: links to Flickr and YouTube."
2186
  msgstr ""
2187
 
2188
+ #: includes/admin/settings.php:1867
2189
  msgid ""
2190
  "You must click the Save Changes button at the bottom of the screen for new "
2191
  "settings to take effect."
2192
  msgstr ""
2193
 
2194
+ #: includes/admin/settings.php:1873
2195
  msgid "Theme Packages"
2196
  msgstr ""
2197
 
2198
+ #: includes/admin/settings.php:1874
2199
  msgid ""
2200
  "The \"Theme Packages\" section allows you to choose which theme package "
2201
  "should be used."
2202
  msgstr ""
2203
 
2204
+ #: includes/admin/settings.php:1877
2205
  msgid "The \"bbPress Default\" package is installed by default."
2206
  msgstr ""
2207
 
2208
+ #: includes/admin/settings.php:1878
2209
  msgid "Some themes may choose to ignore this setting entirely."
2210
  msgstr ""
2211
 
2212
+ #: includes/admin/settings.php:1879
2213
  msgid "Packages can be stacked to allow for intelligent fallbacks."
2214
  msgstr ""
2215
 
2216
+ #: includes/admin/settings.php:1887
2217
  msgid "Per Page"
2218
  msgstr ""
2219
 
2220
+ #: includes/admin/settings.php:1888
2221
  msgid ""
2222
  "The \"Per Page\" section allows you to control the number of topics and "
2223
  "replies appear on each page."
2224
  msgstr ""
2225
 
2226
+ #: includes/admin/settings.php:1890
2227
  msgid ""
2228
  "This is comparable to the WordPress \"Reading Settings\" page, where you "
2229
  "can set the number of posts that should show on blog pages and in feeds."
2230
  msgstr ""
2231
 
2232
+ #: includes/admin/settings.php:1891
2233
  msgid ""
2234
  "These are broken up into two separate groups: one for what appears in your "
2235
  "theme, another for RSS feeds."
2236
  msgstr ""
2237
 
2238
+ #: includes/admin/settings.php:1899
2239
  msgid "Slugs"
2240
  msgstr ""
2241
 
2242
+ #: includes/admin/settings.php:1900
2243
  msgid ""
2244
  "The \"Slugs\" section allows you to control the permalink structure for "
2245
  "your forums."
2246
  msgstr ""
2247
 
2248
+ #: includes/admin/settings.php:1902
2249
  msgid ""
2250
  "\"Archive Slugs\" are used as the \"root\" for your forums and topics. If "
2251
  "you combine these values with existing page slugs, bbPress will attempt to "
2252
  "output the most correct title and content."
2253
  msgstr ""
2254
 
2255
+ #: includes/admin/settings.php:1903
2256
  msgid ""
2257
  "\"Single Slugs\" are used as a prefix when viewing an individual forum, "
2258
  "topic, reply, user, or view."
2259
  msgstr ""
2260
 
2261
+ #: includes/admin/settings.php:1904
2262
  msgid ""
2263
  "In the event of a slug collision with WordPress or BuddyPress, a warning "
2264
  "will appear next to the problem slug(s)."
2265
  msgstr ""
2266
 
2267
+ #: includes/admin/settings.php:1996
2268
  #: templates/default/bbpress/loop-forums.php:24
2269
  #: templates/default/bbpress/loop-replies.php:21
2270
  #: templates/default/bbpress/loop-replies.php:47
2272
  msgid "Posts"
2273
  msgstr ""
2274
 
2275
+ #: includes/admin/settings.php:1997
2276
  msgid "Pages"
2277
  msgstr ""
2278
 
2279
+ #: includes/admin/settings.php:1999
2280
  msgid "Attachments"
2281
  msgstr ""
2282
 
2283
+ #: includes/admin/settings.php:2000
2284
  msgid "Menus"
2285
  msgstr ""
2286
 
2287
+ #: includes/admin/settings.php:2003
2288
  msgid "Tag base"
2289
  msgstr ""
2290
 
2291
+ #: includes/admin/settings.php:2006
2292
  msgid "Category base"
2293
  msgstr ""
2294
 
2295
+ #: includes/admin/settings.php:2011
2296
  msgid "Forums base"
2297
  msgstr ""
2298
 
2299
+ #: includes/admin/settings.php:2014
2300
  msgid "Topics base"
2301
  msgstr ""
2302
 
2303
+ #: includes/admin/settings.php:2017
2304
  msgid "Forum slug"
2305
  msgstr ""
2306
 
2307
+ #: includes/admin/settings.php:2020
2308
  msgid "Topic slug"
2309
  msgstr ""
2310
 
2311
+ #: includes/admin/settings.php:2023
2312
  msgid "Reply slug"
2313
  msgstr ""
2314
 
2315
+ #: includes/admin/settings.php:2026
2316
  msgid "User base"
2317
  msgstr ""
2318
 
2319
+ #: includes/admin/settings.php:2029
2320
  msgid "View base"
2321
  msgstr ""
2322
 
2323
+ #: includes/admin/settings.php:2032
2324
  msgid "Topic tag slug"
2325
  msgstr ""
2326
 
2327
+ #: includes/admin/settings.php:2044
2328
  msgid "%s page"
2329
  msgstr ""
2330
 
2331
+ #: includes/admin/settings.php:2067
2332
  msgid "Possible %1$s conflict: %2$s"
2333
  msgstr ""
2334
 
2335
+ #: includes/admin/tools/common.php:182
2336
  msgid "Search Tools:"
2337
  msgstr ""
2338
 
2339
+ #: includes/admin/tools/common.php:184
2340
  msgid "Search Tools"
2341
  msgstr ""
2342
 
2343
+ #: includes/admin/tools/common.php:205
2344
  msgid "Filter by Component"
2345
  msgstr ""
2346
 
2347
+ #: includes/admin/tools/common.php:207
2348
  msgid "All Components"
2349
  msgstr ""
2350
 
2351
+ #: includes/admin/tools/common.php:216
2352
  msgid "Filter"
2353
  msgstr ""
2354
 
2355
+ #: includes/admin/tools/common.php:234
2356
  msgid "Low"
2357
  msgstr ""
2358
 
2359
+ #: includes/admin/tools/common.php:237
2360
  msgid "Medium"
2361
  msgstr ""
2362
 
2363
+ #: includes/admin/tools/common.php:240
2364
  msgid "High"
2365
  msgstr ""
2366
 
2367
+ #: includes/admin/tools/common.php:263 includes/admin/tools/common.php:278
2368
  msgid "Users"
2369
  msgstr ""
2370
 
2371
+ #: includes/admin/tools/common.php:275 includes/topics/template.php:3391
2372
+ #: includes/topics/template.php:3392
2373
  #: templates/default/bbpress/content-statistics.php:40
2374
  msgid "Topic Tags"
2375
  msgstr ""
2376
 
2377
+ #: includes/admin/tools/common.php:456
2378
  msgid "All %s"
2379
  msgstr ""
2380
 
2556
  #: includes/admin/tools/repair.php:653 includes/admin/tools/repair.php:722
2557
  #: includes/admin/tools/repair.php:830 includes/admin/tools/repair.php:951
2558
  #: includes/admin/tools/repair.php:1063 includes/admin/tools/repair.php:1083
2559
+ #: includes/admin/tools/repair.php:1134 includes/admin/tools/reset.php:121
2560
  #: includes/admin/tools/upgrade.php:242
2561
  msgid "Failed!"
2562
  msgstr ""
2681
  msgstr ""
2682
 
2683
  #: includes/admin/tools/reset.php:33 includes/forums/template.php:51
2684
+ #: includes/forums/template.php:67
2685
  msgid "All Forums"
2686
  msgstr ""
2687
 
2688
+ #: includes/admin/tools/reset.php:34 includes/topics/functions.php:3679
2689
+ #: includes/topics/template.php:50 includes/topics/template.php:66
2690
  msgid "All Topics"
2691
  msgstr ""
2692
 
2693
+ #: includes/admin/tools/reset.php:35 includes/replies/functions.php:2078
2694
+ #: includes/replies/template.php:52 includes/replies/template.php:68
2695
  msgid "All Replies"
2696
  msgstr ""
2697
 
2756
  msgid "Reset bbPress"
2757
  msgstr ""
2758
 
2759
+ #: includes/admin/tools/reset.php:118
2760
+ msgid "Resetting&hellip;"
2761
+ msgstr ""
2762
+
2763
+ #: includes/admin/tools/reset.php:120
2764
  msgid "Success!"
2765
  msgstr ""
2766
 
2767
+ #: includes/admin/tools/reset.php:122
2768
+ msgid "Skipped."
2769
  msgstr ""
2770
 
2771
+ #: includes/admin/tools/reset.php:181
2772
+ msgid "Removing Forums, Topics, and Replies&hellip; %s"
2773
  msgstr ""
2774
 
2775
+ #: includes/admin/tools/reset.php:189
2776
+ msgid "Removing Forum, Topic, and Reply Meta Data&hellip; %s"
2777
  msgstr ""
2778
 
2779
+ #: includes/admin/tools/reset.php:198
2780
+ msgid "Removing Revision Data&hellip; %s"
2781
  msgstr ""
2782
 
2783
+ #: includes/admin/tools/reset.php:207
2784
  msgid "Deleting Topic Tags&hellip; %s"
2785
  msgstr ""
2786
 
2787
+ #: includes/admin/tools/reset.php:226
2788
  msgid "Deleting Imported Users&hellip; %s"
2789
  msgstr ""
2790
 
2791
+ #: includes/admin/tools/reset.php:232
2792
  msgid "Deleting Imported User Meta&hellip; %s"
2793
  msgstr ""
2794
 
2795
+ #: includes/admin/tools/reset.php:240
2796
+ msgid "Deleting bbPress Specific User Meta&hellip; %s"
2797
  msgstr ""
2798
 
2799
+ #: includes/admin/tools/reset.php:249
2800
+ msgid "Dropping Conversion Table&hellip; %s"
2801
  msgstr ""
2802
 
2803
+ #: includes/admin/tools/reset.php:256
2804
+ msgid "Deleting Settings&hellip; Success!"
2805
  msgstr ""
2806
 
2807
+ #: includes/admin/tools/reset.php:262
2808
+ msgid "Removing Roles and Capabilities&hellip; Success!"
2809
  msgstr ""
2810
 
2811
  #: includes/admin/tools/upgrade.php:26 includes/admin/tools.php:508
3158
  msgid "Run this if you just upgraded BuddyPress Forums from Legacy."
3159
  msgstr ""
3160
 
3161
+ #: includes/admin/topics.php:121
3162
  msgid ""
3163
  "This screen displays the individual topics on your site. You can customize "
3164
  "the display of this screen to suit your workflow."
3165
  msgstr ""
3166
 
3167
+ #: includes/admin/topics.php:131
3168
  msgid ""
3169
  "You can hide/display columns based on your needs and decide how many topics "
3170
  "to list per screen using the Screen Options tab."
3171
  msgstr ""
3172
 
3173
+ #: includes/admin/topics.php:132
3174
  msgid ""
3175
  "You can filter the list of topics by topic status using the text links in "
3176
  "the upper left to show All, Published, Draft, Pending, Trashed, Closed, or "
3177
  "Spam topics. The default view is to show all topics."
3178
  msgstr ""
3179
 
3180
+ #: includes/admin/topics.php:133
3181
  msgid ""
3182
  "You can view topics in a simple title list or with an excerpt. Choose the "
3183
  "view you prefer by clicking on the icons at the top of the list on the "
3184
  "right."
3185
  msgstr ""
3186
 
3187
+ #: includes/admin/topics.php:134
3188
  msgid ""
3189
  "You can refine the list to show only topics in a specific forum or from a "
3190
  "specific month by using the dropdown menus above the topics list. Click the "
3191
  "Filter button after making your selection."
3192
  msgstr ""
3193
 
3194
+ #: includes/admin/topics.php:143
3195
  msgid ""
3196
  "Hovering over a row in the topics list will display action links that allow "
3197
  "you to manage your topic. You can perform the following actions:"
3198
  msgstr ""
3199
 
3200
+ #: includes/admin/topics.php:145
3201
  msgid ""
3202
  "<strong>Edit</strong> takes you to the editing screen for that topic. You "
3203
  "can also reach that screen by clicking on the topic title."
3204
  msgstr ""
3205
 
3206
+ #: includes/admin/topics.php:146
3207
  msgid ""
3208
+ "<strong>Stick</strong> will keep the selected topic &#8217;pinned&#8217; to "
3209
+ "the top the parent forum topic list."
3210
  msgstr ""
3211
 
3212
+ #: includes/admin/topics.php:147
3213
  msgid ""
3214
+ "<strong>Stick <em>(to front)</em></strong> will keep the selected topic "
3215
+ "&#8217;pinned&#8217; to the top of ALL forums and be visable in any forums "
3216
+ "topics list."
 
 
 
3217
  msgstr ""
3218
 
3219
+ #: includes/admin/topics.php:149
3220
  msgid ""
3221
  "<strong>Close</strong> will mark the selected topic as &#8217;closed&#8217; "
3222
+ "and disable the ability to post new replies to it."
3223
  msgstr ""
3224
 
3225
+ #: includes/admin/topics.php:150
3226
  msgid ""
3227
+ "<strong>Spam</strong> removes your topic from this list and places it in "
3228
+ "the spam queue, from which you can permanently delete it."
3229
  msgstr ""
3230
 
3231
+ #: includes/admin/topics.php:151
3232
  msgid ""
3233
+ "<strong>Trash</strong> removes your topic from this list and places it in "
3234
+ "the trash, from which you can permanently delete it."
 
3235
  msgstr ""
3236
 
3237
+ #: includes/admin/topics.php:152
3238
+ msgid "<strong>View</strong> will take you to your live site to view the topic."
3239
+ msgstr ""
3240
+
3241
+ #: includes/admin/topics.php:161
3242
  msgid ""
3243
  "You can also edit, spam, or move multiple topics to the trash at once. "
3244
  "Select the topics you want to act on using the checkboxes, then select the "
3245
  "action you want to take from the Bulk Actions menu and click Apply."
3246
  msgstr ""
3247
 
3248
+ #: includes/admin/topics.php:162
3249
  msgid ""
3250
  "When using Bulk Edit, you can change the metadata (categories, author, "
3251
  "etc.) for all selected topics at once. To remove a topic from the grouping, "
3252
  "just click the x next to its name in the Bulk Edit area that appears."
3253
  msgstr ""
3254
 
3255
+ #: includes/admin/topics.php:180
3256
  msgid ""
3257
  "The title field and the big topic editing Area are fixed in place, but you "
3258
  "can reposition all the other boxes using drag and drop, and can minimize or "
3262
  "screen."
3263
  msgstr ""
3264
 
3265
+ #: includes/admin/topics.php:190
3266
  msgid "Title and Topic Editor"
3267
  msgstr ""
3268
 
3269
+ #: includes/admin/topics.php:192
3270
  msgid ""
3271
  "<strong>Title</strong> - Enter a title for your topic. After you enter a "
3272
  "title, you&#8217;ll see the permalink below, which you can edit."
3273
  msgstr ""
3274
 
3275
+ #: includes/admin/topics.php:193
3276
  msgid ""
3277
  "<strong>Topic Editor</strong> - Enter the text for your topic. There are "
3278
  "two modes of editing: Visual and HTML. Choose the mode by clicking on the "
3287
  "editor."
3288
  msgstr ""
3289
 
3290
+ #: includes/admin/topics.php:196
3291
  msgid ""
3292
  "<strong>Publish</strong> - You can set the terms of publishing your topic "
3293
  "in the Publish box. For Status, Visibility, and Publish (immediately), "
3298
  "future or backdate a topic."
3299
  msgstr ""
3300
 
3301
+ #: includes/admin/topics.php:199
3302
  msgid ""
3303
  "<strong>Featured Image</strong> - This allows you to associate an image "
3304
  "with your topic without inserting it. This is usually useful only if your "
3306
  "page, a custom header, etc."
3307
  msgstr ""
3308
 
3309
+ #: includes/admin/topics.php:204 includes/admin/topics.php:341
3310
+ #: includes/topics/template.php:68
3311
  msgid "Topic Attributes"
3312
  msgstr ""
3313
 
3314
+ #: includes/admin/topics.php:206
3315
  msgid "Select the attributes that your topic should have:"
3316
  msgstr ""
3317
 
3318
+ #: includes/admin/topics.php:208
3319
  msgid ""
3320
  "<strong>Forum</strong> dropdown determines the parent forum that the topic "
3321
  "belongs to. Select the forum or category from the dropdown, or leave the "
3322
  "default \"No forum\" to post the topic without an assigned forum."
3323
  msgstr ""
3324
 
3325
+ #: includes/admin/topics.php:209
3326
  msgid ""
3327
  "<strong>Topic Type</strong> dropdown indicates the sticky status of the "
3328
  "topic. Selecting the super sticky option would stick the topic to the front "
3331
  "anywhere."
3332
  msgstr ""
3333
 
3334
+ #: includes/admin/topics.php:256
3335
  msgid "%s topic updated."
3336
  msgid_plural "%s topics updated."
3337
  msgstr[0] ""
3338
  msgstr[1] ""
3339
 
3340
+ #: includes/admin/topics.php:258
3341
  msgid "1 topic not updated, somebody is editing it."
3342
  msgstr ""
3343
 
3344
+ #: includes/admin/topics.php:259
3345
  msgid "%s topic not updated, somebody is editing it."
3346
  msgid_plural "%s topics not updated, somebody is editing them."
3347
  msgstr[0] ""
3348
  msgstr[1] ""
3349
 
3350
+ #: includes/admin/topics.php:292
3351
  msgid "Error in spamming topic."
3352
  msgstr ""
3353
 
3354
+ #: includes/admin/topics.php:308
3355
  msgid "Sorry, you are not allowed to unspam this topic."
3356
  msgstr ""
3357
 
3358
+ #: includes/admin/topics.php:317
3359
  msgid "Error in unspamming topic."
3360
  msgstr ""
3361
 
3362
+ #: includes/admin/topics.php:577
3363
  msgid "The topic was not found."
3364
  msgstr ""
3365
 
3366
+ #: includes/admin/topics.php:713
3367
  msgid "There was a problem opening the topic \"%1$s\"."
3368
  msgstr ""
3369
 
3370
+ #: includes/admin/topics.php:714
3371
  msgid "Topic \"%1$s\" successfully opened."
3372
  msgstr ""
3373
 
3374
+ #: includes/admin/topics.php:719
3375
  msgid "There was a problem closing the topic \"%1$s\"."
3376
  msgstr ""
3377
 
3378
+ #: includes/admin/topics.php:720
3379
  msgid "Topic \"%1$s\" successfully closed."
3380
  msgstr ""
3381
 
3382
+ #: includes/admin/topics.php:725
3383
  msgid "There was a problem sticking the topic \"%1$s\" to front."
3384
  msgstr ""
3385
 
3386
+ #: includes/admin/topics.php:726
3387
  msgid "Topic \"%1$s\" successfully stuck to front."
3388
  msgstr ""
3389
 
3390
+ #: includes/admin/topics.php:731
3391
  msgid "There was a problem sticking the topic \"%1$s\"."
3392
  msgstr ""
3393
 
3394
+ #: includes/admin/topics.php:732
3395
  msgid "Topic \"%1$s\" successfully stuck."
3396
  msgstr ""
3397
 
3398
+ #: includes/admin/topics.php:737
3399
  msgid "There was a problem unsticking the topic \"%1$s\"."
3400
  msgstr ""
3401
 
3402
+ #: includes/admin/topics.php:738
3403
  msgid "Topic \"%1$s\" successfully unstuck."
3404
  msgstr ""
3405
 
3406
+ #: includes/admin/topics.php:743
3407
  msgid "There was a problem marking the topic \"%1$s\" as spam."
3408
  msgstr ""
3409
 
3410
+ #: includes/admin/topics.php:744
3411
  msgid "Topic \"%1$s\" successfully marked as spam."
3412
  msgstr ""
3413
 
3414
+ #: includes/admin/topics.php:749
3415
  msgid "There was a problem unmarking the topic \"%1$s\" as spam."
3416
  msgstr ""
3417
 
3418
+ #: includes/admin/topics.php:750
3419
  msgid "Topic \"%1$s\" successfully unmarked as spam."
3420
  msgstr ""
3421
 
3422
+ #: includes/admin/topics.php:755
3423
  msgid "There was a problem approving the topic \"%1$s\"."
3424
  msgstr ""
3425
 
3426
+ #: includes/admin/topics.php:756
3427
  msgid "Topic \"%1$s\" successfully approved."
3428
  msgstr ""
3429
 
3430
+ #: includes/admin/topics.php:761
3431
  msgid "There was a problem unapproving the topic \"%1$s\"."
3432
  msgstr ""
3433
 
3434
+ #: includes/admin/topics.php:762
3435
  msgid "Topic \"%1$s\" successfully unapproved."
3436
  msgstr ""
3437
 
3438
+ #: includes/admin/topics.php:857 templates/default/bbpress/loop-topics.php:19
3439
  msgid "Voices"
3440
  msgstr ""
3441
 
3442
+ #: includes/admin/topics.php:935 includes/topics/template.php:2014
3443
  msgid "No Replies"
3444
  msgstr ""
3445
 
3446
+ #: includes/admin/topics.php:985
3447
  msgid "Unapprove this topic"
3448
  msgstr ""
3449
 
3450
+ #: includes/admin/topics.php:990
3451
  msgid "Approve this topic"
3452
  msgstr ""
3453
 
3454
+ #: includes/admin/topics.php:1002
3455
  msgid "Close this topic"
3456
  msgstr ""
3457
 
3458
+ #: includes/admin/topics.php:1004
3459
  msgid "Open this topic"
3460
  msgstr ""
3461
 
3462
+ #: includes/admin/topics.php:1013
3463
  msgid "Unstick this topic"
3464
  msgstr ""
3465
 
3466
+ #: includes/admin/topics.php:1013 includes/topics/template.php:2715
3467
  msgid "Unstick"
3468
  msgstr ""
3469
 
3470
+ #: includes/admin/topics.php:1016
3471
  msgid "Stick this topic to its forum"
3472
  msgstr ""
3473
 
3474
+ #: includes/admin/topics.php:1016 includes/topics/template.php:2714
3475
  msgid "Stick"
3476
  msgstr ""
3477
 
3478
+ #: includes/admin/topics.php:1016
3479
  msgid "Stick this topic to front"
3480
  msgstr ""
3481
 
3482
+ #: includes/admin/topics.php:1016 includes/topics/template.php:2716
3483
  msgid "(to front)"
3484
  msgstr ""
3485
 
3486
+ #: includes/admin/topics.php:1023
3487
+ msgid "Mark this topic as spam"
3488
  msgstr ""
3489
 
3490
+ #: includes/admin/topics.php:1025
3491
+ msgid "Mark the topic as not spam"
3492
  msgstr ""
3493
 
3494
+ #: includes/admin/topics.php:1175 includes/admin/topics.php:1187
3495
  msgid "Topic updated."
3496
  msgstr ""
3497
 
3498
+ #: includes/admin/topics.php:1192
3499
  #. translators: %s: date and time of the revision
3500
  msgid "Topic restored to revision from %s"
3501
  msgstr ""
3502
 
3503
+ #: includes/admin/topics.php:1198
3504
  msgid "Topic created."
3505
  msgstr ""
3506
 
3507
+ #: includes/admin/topics.php:1204
3508
  msgid "Topic saved."
3509
  msgstr ""
3510
 
3511
+ #: includes/admin/topics.php:1209
3512
  msgid "Topic submitted."
3513
  msgstr ""
3514
 
3515
+ #: includes/admin/topics.php:1218
3516
  msgid "Topic scheduled for: %s."
3517
  msgstr ""
3518
 
3519
+ #: includes/admin/topics.php:1229
3520
  msgid "Topic draft updated."
3521
  msgstr ""
3522
 
3523
+ #: includes/admin/users.php:98 includes/admin/users.php:282
3524
  #: includes/users/signups.php:26
3525
  #: templates/default/bbpress/form-user-roles.php:23
3526
  msgid "Forum Role"
3527
  msgstr ""
3528
 
3529
  #: includes/admin/users.php:107 includes/admin/users.php:111
3530
+ #: includes/users/template.php:1541
3531
  msgid "&mdash; No role for these forums &mdash;"
3532
  msgstr ""
3533
 
3539
  msgid "Change"
3540
  msgstr ""
3541
 
3542
+ #: includes/admin/users.php:278
3543
  msgid "Site Role"
3544
  msgstr ""
3545
 
3546
+ #: includes/common/classes.php:493 includes/replies/template.php:2564
3547
  msgid "%1$s - %2$s"
3548
  msgstr ""
3549
 
3550
+ #: includes/common/formatting.php:627
3551
  msgid "sometime"
3552
  msgstr ""
3553
 
3554
+ #: includes/common/formatting.php:628
3555
  msgid "right now"
3556
  msgstr ""
3557
 
3558
+ #: includes/common/formatting.php:629
3559
  msgid "%s ago"
3560
  msgstr ""
3561
 
3562
+ #: includes/common/formatting.php:633
3563
  msgid "%s year"
3564
  msgid_plural "%s years"
3565
  msgstr[0] ""
3566
  msgstr[1] ""
3567
 
3568
+ #: includes/common/formatting.php:634
3569
  msgid "%s month"
3570
  msgid_plural "%s months"
3571
  msgstr[0] ""
3572
  msgstr[1] ""
3573
 
3574
+ #: includes/common/formatting.php:635
3575
  msgid "%s week"
3576
  msgid_plural "%s weeks"
3577
  msgstr[0] ""
3578
  msgstr[1] ""
3579
 
3580
+ #: includes/common/formatting.php:636
3581
  msgid "%s day"
3582
  msgid_plural "%s days"
3583
  msgstr[0] ""
3584
  msgstr[1] ""
3585
 
3586
+ #: includes/common/formatting.php:637
3587
  msgid "%s hour"
3588
  msgid_plural "%s hours"
3589
  msgstr[0] ""
3590
  msgstr[1] ""
3591
 
3592
+ #: includes/common/formatting.php:638
3593
  msgid "%s minute"
3594
  msgid_plural "%s minutes"
3595
  msgstr[0] ""
3596
  msgstr[1] ""
3597
 
3598
+ #: includes/common/formatting.php:639
3599
  msgid "%s second"
3600
  msgid_plural "%s seconds"
3601
  msgstr[0] ""
3602
  msgstr[1] ""
3603
 
3604
+ #: includes/common/functions.php:376 includes/common/functions.php:434
3605
  msgid "Pending: %s"
3606
  msgstr ""
3607
 
3608
+ #: includes/common/functions.php:380 includes/common/functions.php:437
3609
  msgid "Private: %s"
3610
  msgstr ""
3611
 
3612
+ #: includes/common/functions.php:384 includes/common/functions.php:441
3613
  msgid "Spammed: %s"
3614
  msgstr ""
3615
 
3616
+ #: includes/common/functions.php:388 includes/common/functions.php:445
3617
  msgid "Trashed: %s"
3618
  msgstr ""
3619
 
3620
+ #: includes/common/functions.php:529
3621
  msgid "<strong>ERROR</strong>: Invalid author name."
3622
  msgstr ""
3623
 
3624
+ #: includes/common/functions.php:535
3625
  msgid "<strong>ERROR</strong>: Invalid email address."
3626
  msgstr ""
3627
 
3628
+ #: includes/common/functions.php:1039
3629
  msgid ""
3630
  "%1$s wrote:\n"
3631
  "\n"
3640
  "Login and visit the topic to unsubscribe from these emails."
3641
  msgstr ""
3642
 
3643
+ #: includes/common/functions.php:1195
3644
  msgid ""
3645
  "%1$s wrote:\n"
3646
  "\n"
3655
  "Login and visit the topic to unsubscribe from these emails."
3656
  msgstr ""
3657
 
3658
+ #: includes/common/template.php:1562
3659
  msgid "No topics available"
3660
  msgstr ""
3661
 
3662
+ #: includes/common/template.php:1567
3663
  msgid "No forums available"
3664
  msgstr ""
3665
 
3666
+ #: includes/common/template.php:1572
3667
  msgid "None available"
3668
  msgstr ""
3669
 
3670
+ #: includes/common/template.php:2184
3671
  msgid "Home"
3672
  msgstr ""
3673
 
3674
+ #: includes/common/template.php:2254
3675
  msgid "(Edit)"
3676
  msgstr ""
3677
 
3678
+ #: includes/common/template.php:2258 includes/common/template.php:2373
3679
+ #: includes/common/template.php:2618 includes/core/theme-compat.php:794
3680
  #: templates/default/extras/taxonomy-topic-tag-edit.php:17
3681
  #: templates/default/extras/taxonomy-topic-tag.php:17
3682
  msgid "Topic Tag: %s"
3683
  msgstr ""
3684
 
3685
+ #: includes/common/template.php:2279
3686
  msgid "&lsaquo;"
3687
  msgstr ""
3688
 
3689
+ #: includes/common/template.php:2279
3690
  msgid "&rsaquo;"
3691
  msgstr ""
3692
 
3693
+ #: includes/common/template.php:2542
3694
  msgid "Log Out"
3695
  msgstr ""
3696
 
3697
+ #: includes/common/template.php:2582
3698
  msgid "Forum Edit: %s"
3699
  msgstr ""
3700
 
3701
+ #: includes/common/template.php:2587
3702
  msgid "Topic Edit: %s"
3703
  msgstr ""
3704
 
3705
+ #: includes/common/template.php:2592
3706
  msgid "Reply Edit: %s"
3707
  msgstr ""
3708
 
3709
+ #: includes/common/template.php:2597
3710
  msgid "Topic Tag Edit: %s"
3711
  msgstr ""
3712
 
3713
+ #: includes/common/template.php:2604
3714
  msgid "Forum: %s"
3715
  msgstr ""
3716
 
3717
+ #: includes/common/template.php:2609
3718
  msgid "Topic: %s"
3719
  msgstr ""
3720
 
3721
+ #: includes/common/template.php:2631
3722
  msgid "Your Topics"
3723
  msgstr ""
3724
 
3725
+ #: includes/common/template.php:2635
3726
  #. translators: user's display name
3727
  msgid "%s's Topics"
3728
  msgstr ""
3729
 
3730
+ #: includes/common/template.php:2641
3731
  msgid "Your Replies"
3732
  msgstr ""
3733
 
3734
+ #: includes/common/template.php:2645
3735
  #. translators: user's display name
3736
  msgid "%s's Replies"
3737
  msgstr ""
3738
 
3739
+ #: includes/common/template.php:2651
3740
  msgid "Your Favorites"
3741
  msgstr ""
3742
 
3743
+ #: includes/common/template.php:2655
3744
  #: templates/default/bbpress/user-details.php:57
3745
  #. translators: user's display name
3746
  msgid "%s's Favorites"
3747
  msgstr ""
3748
 
3749
+ #: includes/common/template.php:2661
3750
  msgid "Your Subscriptions"
3751
  msgstr ""
3752
 
3753
+ #: includes/common/template.php:2665
3754
  #: templates/default/bbpress/user-details.php:67
3755
  #. translators: user's display name
3756
  msgid "%s's Subscriptions"
3757
  msgstr ""
3758
 
3759
+ #: includes/common/template.php:2671
3760
  msgid "Your Profile"
3761
  msgstr ""
3762
 
3763
+ #: includes/common/template.php:2675
3764
  #: templates/default/bbpress/user-details.php:30
3765
  #. translators: user's display name
3766
  msgid "%s's Profile"
3767
  msgstr ""
3768
 
3769
+ #: includes/common/template.php:2684
3770
  msgid "Edit Your Profile"
3771
  msgstr ""
3772
 
3773
+ #: includes/common/template.php:2689
3774
  #: templates/default/bbpress/user-details.php:74
3775
  msgid "Edit %s's Profile"
3776
  msgstr ""
3777
 
3778
+ #: includes/common/template.php:2697
3779
  msgid "View: %s"
3780
  msgstr ""
3781
 
3783
  msgid "A simple login form with optional links to sign-up and lost password pages."
3784
  msgstr ""
3785
 
3786
+ #: includes/common/widgets.php:38
3787
  msgid "(bbPress) Login Widget"
3788
  msgstr ""
3789
 
3790
+ #: includes/common/widgets.php:81 includes/common/widgets.php:102
3791
  #: templates/default/bbpress/form-user-login.php:17
3792
  #: templates/default/bbpress/form-user-login.php:38
3793
  msgid "Log In"
3794
  msgstr ""
3795
 
3796
+ #: includes/common/widgets.php:84
3797
  #: templates/default/bbpress/form-user-edit.php:107
3798
  #: templates/default/bbpress/form-user-login.php:20
3799
  #: templates/default/bbpress/form-user-register.php:29
3800
  msgid "Username"
3801
  msgstr ""
3802
 
3803
+ #: includes/common/widgets.php:89
3804
  #: templates/default/bbpress/form-user-login.php:25
3805
  #: templates/default/bbpress/form-user-passwords.php:17
3806
  msgid "Password"
3807
  msgstr ""
3808
 
3809
+ #: includes/common/widgets.php:95
3810
+ #: templates/default/bbpress/form-user-login.php:31
3811
+ msgid "Keep me signed in"
3812
  msgstr ""
3813
 
3814
+ #: includes/common/widgets.php:114
3815
  #: templates/default/bbpress/form-user-register.php:42
3816
  msgid "Register"
3817
  msgstr ""
3818
 
3819
+ #: includes/common/widgets.php:120
3820
  #: templates/default/bbpress/form-user-lost-pass.php:17
3821
  msgid "Lost Password"
3822
  msgstr ""
3823
 
3824
+ #: includes/common/widgets.php:175 includes/common/widgets.php:320
3825
+ #: includes/common/widgets.php:437 includes/common/widgets.php:599
3826
+ #: includes/common/widgets.php:871 includes/common/widgets.php:1015
3827
+ #: includes/common/widgets.php:1218
3828
  msgid "Title:"
3829
  msgstr ""
3830
 
3831
+ #: includes/common/widgets.php:180
3832
  msgid "Register URI:"
3833
  msgstr ""
3834
 
3835
+ #: includes/common/widgets.php:185
3836
  msgid "Lost Password URI:"
3837
  msgstr ""
3838
 
3839
+ #: includes/common/widgets.php:227
3840
  msgid "A list of registered optional topic views."
3841
  msgstr ""
3842
 
3843
+ #: includes/common/widgets.php:231
3844
  msgid "(bbPress) Topic Views List"
3845
  msgstr ""
3846
 
3847
+ #: includes/common/widgets.php:361
3848
  msgid "The bbPress forum search form."
3849
  msgstr ""
3850
 
3851
+ #: includes/common/widgets.php:365
3852
  msgid "(bbPress) Forum Search Form"
3853
  msgstr ""
3854
 
3855
+ #: includes/common/widgets.php:454 includes/forums/template.php:60
3856
  msgid "Search Forums"
3857
  msgstr ""
3858
 
3859
+ #: includes/common/widgets.php:478
3860
  msgid "A list of forums with an option to set the parent."
3861
  msgstr ""
3862
 
3863
+ #: includes/common/widgets.php:482
3864
  msgid "(bbPress) Forums List"
3865
  msgstr ""
3866
 
3867
+ #: includes/common/widgets.php:605 includes/common/widgets.php:875
3868
  msgid "Parent Forum ID:"
3869
  msgstr ""
3870
 
3871
+ #: includes/common/widgets.php:611 includes/common/widgets.php:881
3872
  msgid "\"0\" to show only root - \"any\" to show all"
3873
  msgstr ""
3874
 
3875
+ #: includes/common/widgets.php:651
3876
  msgid "A list of recent topics, sorted by: newness, popularity, or recent replies."
3877
  msgstr ""
3878
 
3879
+ #: includes/common/widgets.php:655
3880
  msgid "(bbPress) Recent Topics"
3881
  msgstr ""
3882
 
3883
+ #: includes/common/widgets.php:872
3884
  msgid "Maximum topics to show:"
3885
  msgstr ""
3886
 
3887
+ #: includes/common/widgets.php:884 includes/common/widgets.php:1220
3888
  msgid "Show post date:"
3889
  msgstr ""
3890
 
3891
+ #: includes/common/widgets.php:885
3892
  msgid "Show topic author:"
3893
  msgstr ""
3894
 
3895
+ #: includes/common/widgets.php:888
3896
  msgid "Order By:"
3897
  msgstr ""
3898
 
3899
+ #: includes/common/widgets.php:890
3900
  msgid "Newest Topics"
3901
  msgstr ""
3902
 
3903
+ #: includes/common/widgets.php:891
3904
  #: templates/default/extras/page-forum-statistics.php:34
3905
  msgid "Popular Topics"
3906
  msgstr ""
3907
 
3908
+ #: includes/common/widgets.php:892
3909
  msgid "Topics With Recent Replies"
3910
  msgstr ""
3911
 
3912
+ #: includes/common/widgets.php:908
3913
  msgid "Recent Topics"
3914
  msgstr ""
3915
 
3916
+ #: includes/common/widgets.php:937
3917
  msgid "Some statistics from your forum."
3918
  msgstr ""
3919
 
3920
+ #: includes/common/widgets.php:941
3921
  msgid "(bbPress) Statistics"
3922
  msgstr ""
3923
 
3924
+ #: includes/common/widgets.php:1032
3925
  msgid "Forum Statistics"
3926
  msgstr ""
3927
 
3928
+ #: includes/common/widgets.php:1056
3929
  msgid "A list of the most recent replies."
3930
  msgstr ""
3931
 
3932
+ #: includes/common/widgets.php:1060
3933
  msgid "(bbPress) Recent Replies"
3934
  msgstr ""
3935
 
3936
+ #: includes/common/widgets.php:1219
3937
  msgid "Maximum replies to show:"
3938
  msgstr ""
3939
 
3940
+ #: includes/common/widgets.php:1221
3941
  msgid "Show reply author:"
3942
  msgstr ""
3943
 
3944
+ #: includes/common/widgets.php:1235
3945
  msgid "Recent Replies"
3946
  msgstr ""
3947
 
3949
  msgid "Editable forum roles no longer exist."
3950
  msgstr ""
3951
 
3952
+ #: includes/core/update.php:207
3953
  msgid "General"
3954
  msgstr ""
3955
 
3956
+ #: includes/core/update.php:208
3957
+ msgid "General Discussion"
3958
  msgstr ""
3959
 
3960
+ #: includes/core/update.php:211
3961
  msgid "Hello World!"
3962
  msgstr ""
3963
 
3964
+ #: includes/core/update.php:212
3965
+ msgid "This is the very first topic in these forums."
3966
  msgstr ""
3967
 
3968
+ #: includes/core/update.php:215
3969
+ msgid "And this is the very first reply."
3970
  msgstr ""
3971
 
3972
  #: includes/extend/akismet.php:315
4007
  msgid "Akismet caught this post as spam"
4008
  msgstr ""
4009
 
4010
+ #: includes/extend/akismet.php:499 includes/extend/akismet.php:511
4011
  msgid "Post status was changed to %s"
4012
  msgstr ""
4013
 
4015
  msgid "Akismet cleared this post as not spam"
4016
  msgstr ""
4017
 
4018
+ #: includes/extend/akismet.php:518
4019
  msgid ""
4020
  "Akismet was unable to check this post (response: %s), will automatically "
4021
  "retry again later."
4022
  msgstr ""
4023
 
4024
+ #: includes/extend/akismet.php:720 includes/extend/akismet.php:730
4025
  msgid "Akismet History"
4026
  msgstr ""
4027
 
4028
+ #: includes/extend/akismet.php:774
4029
  msgid "No recorded history. Akismet has not checked this post."
4030
  msgstr ""
4031
 
4037
  msgid "New forum reply"
4038
  msgstr ""
4039
 
4040
+ #: includes/extend/buddypress/activity.php:452
4041
+ #: includes/extend/buddypress/functions.php:779
4042
  msgid "%1$s started the topic %2$s in the forum %3$s"
4043
  msgstr ""
4044
 
4045
+ #: includes/extend/buddypress/activity.php:590
4046
+ #: includes/extend/buddypress/functions.php:780
4047
  msgid "%1$s replied to the topic %2$s in the forum %3$s"
4048
  msgstr ""
4049
 
4050
+ #: includes/extend/buddypress/groups.php:336
4051
+ #: includes/extend/buddypress/groups.php:339
4052
  msgid "Group Forum Settings"
4053
  msgstr ""
4054
 
4055
+ #: includes/extend/buddypress/groups.php:340
4056
+ #: includes/extend/buddypress/groups.php:539
4057
  msgid ""
4058
  "Create a discussion forum to allow members of this group to communicate in "
4059
  "a structured, bulletin-board style fashion."
4060
  msgstr ""
4061
 
4062
+ #: includes/extend/buddypress/groups.php:344
4063
+ #: includes/extend/buddypress/groups.php:542
4064
  msgid "Yes. I want this group to have a forum."
4065
  msgstr ""
4066
 
4067
+ #: includes/extend/buddypress/groups.php:347
4068
  msgid "Saying no will not delete existing forum content."
4069
  msgstr ""
4070
 
4071
+ #: includes/extend/buddypress/groups.php:352
4072
  msgid "Group Forum:"
4073
  msgstr ""
4074
 
4075
+ #: includes/extend/buddypress/groups.php:360
4076
  msgid "Network administrators can reconfigure which forum belongs to this group."
4077
  msgstr ""
4078
 
4079
+ #: includes/extend/buddypress/groups.php:365
4080
  msgid "Save Settings"
4081
  msgstr ""
4082
 
4083
+ #: includes/extend/buddypress/groups.php:400
4084
+ #: includes/extend/buddypress/groups.php:557
4085
+ #: includes/extend/buddypress/notifications.php:196
4086
+ #: includes/forums/functions.php:126 includes/forums/functions.php:393
4087
+ #: includes/replies/functions.php:129 includes/replies/functions.php:512
4088
+ #: includes/replies/functions.php:1225 includes/topics/functions.php:105
4089
+ #: includes/topics/functions.php:468 includes/topics/functions.php:1084
4090
+ #: includes/topics/functions.php:1359 includes/topics/functions.php:1695
4091
+ #: includes/topics/functions.php:1739 includes/topics/functions.php:1800
4092
+ #: includes/users/engagements.php:604 includes/users/engagements.php:841
4093
+ #: includes/users/functions.php:196 includes/users/functions.php:202
4094
+ #: includes/users/functions.php:382
4095
  msgid "<strong>ERROR</strong>: Are you sure you wanted to do that?"
4096
  msgstr ""
4097
 
4098
+ #: includes/extend/buddypress/groups.php:537
4099
  msgid "Group Forum"
4100
  msgstr ""
4101
 
4102
+ #: includes/extend/buddypress/groups.php:886
4103
  msgid "This group does not currently have a forum."
4104
  msgstr ""
4105
 
4106
+ #: includes/extend/buddypress/loader.php:119
4107
  msgid "Search Forums..."
4108
  msgstr ""
4109
 
4110
+ #: includes/extend/buddypress/loader.php:356
4111
  #: templates/default/bbpress/user-subscriptions.php:41
4112
  msgid "Subscribed Topics"
4113
  msgstr ""
4128
  msgid "Topic Replies"
4129
  msgstr ""
4130
 
4131
+ #: includes/extend/buddypress/notifications.php:200
4132
  msgid ""
4133
  "<strong>ERROR</strong>: You do not have permission to mark notifications "
4134
  "for that user."
4135
  msgstr ""
4136
 
4137
+ #: includes/forums/functions.php:140
4138
  msgid "<strong>ERROR</strong>: You do not have permission to create new forums."
4139
  msgstr ""
4140
 
4141
+ #: includes/forums/functions.php:165 includes/forums/functions.php:454
4142
  msgid "<strong>ERROR</strong>: Your forum needs a title."
4143
  msgstr ""
4144
 
4145
+ #: includes/forums/functions.php:170 includes/forums/functions.php:459
4146
+ #: includes/replies/functions.php:279 includes/replies/functions.php:596
4147
+ #: includes/topics/functions.php:163 includes/topics/functions.php:535
4148
+ msgid "<strong>ERROR</strong>: Your title is too long."
4149
+ msgstr ""
4150
+
4151
+ #: includes/forums/functions.php:184 includes/forums/functions.php:473
4152
  msgid "<strong>ERROR</strong>: Your forum description cannot be empty."
4153
  msgstr ""
4154
 
4155
+ #: includes/forums/functions.php:199
4156
  msgid "<strong>ERROR</strong>: Your forum must have a parent."
4157
  msgstr ""
4158
 
4159
+ #: includes/forums/functions.php:206
4160
  msgid ""
4161
  "<strong>ERROR</strong>: This forum is a category. No forums can be created "
4162
  "in this forum."
4163
  msgstr ""
4164
 
4165
+ #: includes/forums/functions.php:211 includes/forums/functions.php:429
4166
  msgid "<strong>ERROR</strong>: This forum has been closed to new forums."
4167
  msgstr ""
4168
 
4169
+ #: includes/forums/functions.php:216 includes/forums/functions.php:434
4170
  msgid ""
4171
  "<strong>ERROR</strong>: This forum is private and you do not have the "
4172
  "capability to read or create new forums in it."
4173
  msgstr ""
4174
 
4175
+ #: includes/forums/functions.php:221 includes/forums/functions.php:439
4176
  msgid ""
4177
  "<strong>ERROR</strong>: This forum is hidden and you do not have the "
4178
  "capability to read or create new forums in it."
4179
  msgstr ""
4180
 
4181
+ #: includes/forums/functions.php:228 includes/replies/functions.php:299
4182
+ #: includes/topics/functions.php:247
4183
  msgid "<strong>ERROR</strong>: Slow down; you move too fast."
4184
  msgstr ""
4185
 
4186
+ #: includes/forums/functions.php:234
4187
  msgid "<strong>ERROR</strong>: This forum already exists."
4188
  msgstr ""
4189
 
4190
+ #: includes/forums/functions.php:240
4191
  msgid "<strong>ERROR</strong>: Your forum cannot be created at this time."
4192
  msgstr ""
4193
 
4194
+ #: includes/forums/functions.php:353 includes/replies/functions.php:469
4195
+ #: includes/topics/functions.php:400
4196
  msgid "<strong>ERROR</strong>: The following problem(s) occurred: %s"
4197
  msgstr ""
4198
 
4199
+ #: includes/forums/functions.php:357
4200
  msgid "<strong>ERROR</strong>: The forum was not created."
4201
  msgstr ""
4202
 
4203
+ #: includes/forums/functions.php:382
4204
  msgid "<strong>ERROR</strong>: Forum ID not found."
4205
  msgstr ""
4206
 
4207
+ #: includes/forums/functions.php:398
4208
  msgid "<strong>ERROR</strong>: The forum you want to edit was not found."
4209
  msgstr ""
4210
 
4211
+ #: includes/forums/functions.php:403
4212
  msgid "<strong>ERROR</strong>: You do not have permission to edit that forum."
4213
  msgstr ""
4214
 
4215
+ #: includes/forums/functions.php:479
4216
  msgid "<strong>ERROR</strong>: Your forum cannot be edited at this time."
4217
  msgstr ""
4218
 
4265
  msgid "Parent Forum:"
4266
  msgstr ""
4267
 
4268
+ #: includes/forums/template.php:70
4269
+ msgid "Insert into forum"
4270
+ msgstr ""
4271
+
4272
+ #: includes/forums/template.php:71
4273
+ msgid "Uploaded to this forum"
4274
+ msgstr ""
4275
+
4276
+ #: includes/forums/template.php:72
4277
+ msgid "Forum Image"
4278
+ msgstr ""
4279
+
4280
+ #: includes/forums/template.php:73
4281
+ msgid "Set forum image"
4282
  msgstr ""
4283
 
4284
+ #: includes/forums/template.php:74
4285
+ msgid "Remove forum image"
4286
+ msgstr ""
4287
+
4288
+ #: includes/forums/template.php:75
4289
+ msgid "Use as forum image"
4290
+ msgstr ""
4291
+
4292
+ #: includes/forums/template.php:76
4293
+ msgid "Filter forum list"
4294
+ msgstr ""
4295
+
4296
+ #: includes/forums/template.php:77
4297
+ msgid "Forum list navigation"
4298
+ msgstr ""
4299
+
4300
+ #: includes/forums/template.php:78
4301
+ msgid "Forum list"
4302
+ msgstr ""
4303
+
4304
+ #: includes/forums/template.php:806 includes/topics/template.php:1807
4305
  #: includes/users/template.php:1273
4306
+ msgid "Subscribe"
4307
+ msgstr ""
4308
+
4309
+ #: includes/forums/template.php:807 includes/topics/template.php:1808
4310
+ #: includes/users/template.php:1274
4311
  msgid "Unsubscribe"
4312
  msgstr ""
4313
 
4314
+ #: includes/forums/template.php:1143 includes/forums/template.php:1944
4315
  msgid "%s topic"
4316
  msgid_plural "%s topics"
4317
  msgstr[0] ""
4318
  msgstr[1] ""
4319
 
4320
+ #: includes/forums/template.php:1158 includes/topics/template.php:2057
4321
  msgid "(+%s hidden)"
4322
  msgid_plural "(+%s hidden)"
4323
  msgstr[0] ""
4324
  msgstr[1] ""
4325
 
4326
+ #: includes/forums/template.php:1933 includes/topics/template.php:2042
4327
  msgid "%s reply"
4328
  msgid_plural "%s replies"
4329
  msgstr[0] ""
4330
  msgstr[1] ""
4331
 
4332
+ #: includes/forums/template.php:1953
4333
  msgid "This category has %1$s, %2$s, and was last updated %3$s by %4$s."
4334
  msgstr ""
4335
 
4336
+ #: includes/forums/template.php:1954
4337
  msgid "This forum has %1$s, %2$s, and was last updated %3$s by %4$s."
4338
  msgstr ""
4339
 
4340
+ #: includes/forums/template.php:1959
4341
  msgid "This category has %1$s, and was last updated %2$s by %3$s."
4342
  msgstr ""
4343
 
4344
+ #: includes/forums/template.php:1960
4345
  msgid "This forum has %1$s, and was last updated %2$s by %3$s."
4346
  msgstr ""
4347
 
4348
+ #: includes/forums/template.php:1966
4349
  msgid "This category has %1$s and %2$s."
4350
  msgstr ""
4351
 
4352
+ #: includes/forums/template.php:1967
4353
  msgid "This forum has %1$s and %2$s."
4354
  msgstr ""
4355
 
4356
+ #: includes/forums/template.php:1972
4357
  msgid "This category has %1$s."
4358
  msgstr ""
4359
 
4360
+ #: includes/forums/template.php:1973
4361
  msgid "This forum has %1$s."
4362
  msgstr ""
4363
 
4364
+ #: includes/forums/template.php:1977
4365
  msgid "This forum is empty."
4366
  msgstr ""
4367
 
4386
  msgstr ""
4387
 
4388
  #: includes/replies/functions.php:202 includes/replies/functions.php:216
4389
+ #: includes/topics/functions.php:187 includes/topics/functions.php:201
4390
+ #: includes/topics/functions.php:483
4391
  msgid "<strong>ERROR</strong>: Forum ID is missing."
4392
  msgstr ""
4393
 
4394
+ #: includes/replies/functions.php:206 includes/topics/functions.php:191
4395
  msgid "<strong>ERROR</strong>: Forum ID must be a number."
4396
  msgstr ""
4397
 
4398
+ #: includes/replies/functions.php:220 includes/topics/functions.php:205
4399
  msgid "<strong>ERROR</strong>: Forum ID cannot be a negative number."
4400
  msgstr ""
4401
 
4402
+ #: includes/replies/functions.php:224 includes/topics/functions.php:209
4403
  msgid "<strong>ERROR</strong>: Forum does not exist."
4404
  msgstr ""
4405
 
4406
+ #: includes/replies/functions.php:238 includes/replies/functions.php:564
4407
  msgid ""
4408
  "<strong>ERROR</strong>: This forum is a category. No replies can be created "
4409
  "in this forum."
4410
  msgstr ""
4411
 
4412
+ #: includes/replies/functions.php:245 includes/replies/functions.php:571
4413
  msgid "<strong>ERROR</strong>: This forum has been closed to new replies."
4414
  msgstr ""
4415
 
4416
+ #: includes/replies/functions.php:250 includes/replies/functions.php:576
4417
  msgid ""
4418
  "<strong>ERROR</strong>: This forum is private and you do not have the "
4419
  "capability to read or create new replies in it."
4420
  msgstr ""
4421
 
4422
+ #: includes/replies/functions.php:254 includes/replies/functions.php:580
4423
  msgid ""
4424
  "<strong>ERROR</strong>: This forum is hidden and you do not have the "
4425
  "capability to read or create new replies in it."
4426
  msgstr ""
4427
 
4428
+ #: includes/replies/functions.php:293 includes/replies/functions.php:610
4429
  msgid "<strong>ERROR</strong>: Your reply cannot be empty."
4430
  msgstr ""
4431
 
4432
+ #: includes/replies/functions.php:305
4433
  msgid ""
4434
  "<strong>ERROR</strong>: Duplicate reply detected; it looks as though "
4435
  "you&#8217;ve already said that."
4436
  msgstr ""
4437
 
4438
+ #: includes/replies/functions.php:311
4439
  msgid "<strong>ERROR</strong>: Your reply cannot be created at this time."
4440
  msgstr ""
4441
 
4442
+ #: includes/replies/functions.php:336
4443
  msgid "<strong>ERROR</strong>: Topic is closed."
4444
  msgstr ""
4445
 
4446
+ #: includes/replies/functions.php:396 includes/replies/functions.php:706
4447
  msgid "<strong>ERROR</strong>: There was a problem adding the tags to the topic."
4448
  msgstr ""
4449
 
4450
+ #: includes/replies/functions.php:473
4451
  msgid "<strong>ERROR</strong>: The reply was not created."
4452
  msgstr ""
4453
 
4454
+ #: includes/replies/functions.php:501
4455
  msgid "<strong>ERROR</strong>: Reply ID not found."
4456
  msgstr ""
4457
 
4458
+ #: includes/replies/functions.php:518
4459
  msgid "<strong>ERROR</strong>: The reply you want to edit was not found."
4460
  msgstr ""
4461
 
4462
+ #: includes/replies/functions.php:529
4463
  msgid "<strong>ERROR</strong>: You do not have permission to edit that reply."
4464
  msgstr ""
4465
 
4466
+ #: includes/replies/functions.php:616
4467
  msgid "<strong>ERROR</strong>: Your reply cannot be edited at this time."
4468
  msgstr ""
4469
 
4470
+ #: includes/replies/functions.php:1201
4471
  msgid "<strong>ERROR</strong>: A reply ID is required"
4472
  msgstr ""
4473
 
4474
+ #: includes/replies/functions.php:1210
4475
  msgid "<strong>ERROR</strong>: The reply you want to move was not found."
4476
  msgstr ""
4477
 
4478
+ #: includes/replies/functions.php:1220
4479
  msgid "<strong>ERROR</strong>: The topic you want to move from was not found."
4480
  msgstr ""
4481
 
4482
+ #: includes/replies/functions.php:1231 includes/topics/functions.php:1095
4483
+ #: includes/topics/functions.php:1365
4484
  msgid "<strong>ERROR</strong>: You do not have permission to edit the source topic."
4485
  msgstr ""
4486
 
4487
+ #: includes/replies/functions.php:1241
4488
  msgid "<strong>ERROR</strong>: You need to choose a valid move option."
4489
  msgstr ""
4490
 
4491
+ #: includes/replies/functions.php:1254 includes/topics/functions.php:1388
4492
  msgid "<strong>ERROR</strong>: A topic ID is required."
4493
  msgstr ""
4494
 
4495
+ #: includes/replies/functions.php:1264
4496
  msgid "<strong>ERROR</strong>: The topic you want to move to was not found."
4497
  msgstr ""
4498
 
4499
+ #: includes/replies/functions.php:1269 includes/topics/functions.php:1115
4500
+ #: includes/topics/functions.php:1403
4501
  msgid ""
4502
  "<strong>ERROR</strong>: You do not have permission to edit the destination "
4503
  "topic."
4504
  msgstr ""
4505
 
4506
+ #: includes/replies/functions.php:1323 includes/topics/functions.php:1441
4507
  msgid ""
4508
  "<strong>ERROR</strong>: There was a problem converting the reply into the "
4509
  "topic. Please try again."
4510
  msgstr ""
4511
 
4512
+ #: includes/replies/functions.php:1328 includes/topics/functions.php:1446
4513
  msgid ""
4514
  "<strong>ERROR</strong>: You do not have permission to create new topics. "
4515
  "The reply could not be converted into a topic."
4516
  msgstr ""
4517
 
4518
+ #: includes/replies/functions.php:1476
4519
  msgid "<strong>ERROR:</strong> This reply could not be found or no longer exists."
4520
  msgstr ""
4521
 
4522
+ #: includes/replies/functions.php:1482 includes/topics/functions.php:1982
4523
  msgid "<strong>ERROR:</strong> You do not have permission to do that."
4524
  msgstr ""
4525
 
4526
+ #: includes/replies/functions.php:1558
4527
  msgid "<strong>ERROR</strong>: There was a problem approving the reply."
4528
  msgstr ""
4529
 
4530
+ #: includes/replies/functions.php:1558
4531
  msgid "<strong>ERROR</strong>: There was a problem unapproving the reply."
4532
  msgstr ""
4533
 
4534
+ #: includes/replies/functions.php:1569
4535
  msgid "<strong>ERROR</strong>: There was a problem unmarking the reply as spam."
4536
  msgstr ""
4537
 
4538
+ #: includes/replies/functions.php:1569
4539
  msgid "<strong>ERROR</strong>: There was a problem marking the reply as spam."
4540
  msgstr ""
4541
 
4542
+ #: includes/replies/functions.php:1584
4543
  msgid "<strong>ERROR</strong>: There was a problem trashing the reply."
4544
  msgstr ""
4545
 
4546
+ #: includes/replies/functions.php:1592
4547
  msgid "<strong>ERROR</strong>: There was a problem untrashing the reply."
4548
  msgstr ""
4549
 
4550
+ #: includes/replies/functions.php:1600
4551
  msgid "<strong>ERROR</strong>: There was a problem deleting the reply."
4552
  msgstr ""
4553
 
4554
+ #: includes/replies/functions.php:2076
4555
  msgid "All Posts"
4556
  msgstr ""
4557
 
4558
+ #: includes/replies/functions.php:2122 includes/topics/functions.php:3723
4559
  msgid "Replies: %s"
4560
  msgstr ""
4561
 
4603
  msgid "Replies list navigation"
4604
  msgstr ""
4605
 
4606
+ #: includes/replies/template.php:67
4607
+ msgid "Parent Topic:"
4608
+ msgstr ""
4609
+
4610
+ #: includes/replies/template.php:69
4611
+ msgid "Forum Replies"
4612
+ msgstr ""
4613
+
4614
+ #: includes/replies/template.php:71
4615
+ msgid "Insert into reply"
4616
+ msgstr ""
4617
+
4618
+ #: includes/replies/template.php:72
4619
+ msgid "Uploaded to this reply"
4620
+ msgstr ""
4621
+
4622
+ #: includes/replies/template.php:73
4623
+ msgid "Reply Image"
4624
+ msgstr ""
4625
+
4626
+ #: includes/replies/template.php:74
4627
+ msgid "Set reply image"
4628
+ msgstr ""
4629
+
4630
+ #: includes/replies/template.php:75
4631
+ msgid "Remove reply image"
4632
+ msgstr ""
4633
+
4634
+ #: includes/replies/template.php:76
4635
+ msgid "Use as reply image"
4636
+ msgstr ""
4637
+
4638
+ #: includes/replies/template.php:77
4639
+ msgid "Filter reply list"
4640
+ msgstr ""
4641
+
4642
+ #: includes/replies/template.php:78
4643
+ msgid "Reply list navigation"
4644
+ msgstr ""
4645
+
4646
+ #: includes/replies/template.php:79
4647
+ msgid "Reply list"
4648
+ msgstr ""
4649
+
4650
+ #: includes/replies/template.php:527
4651
  #: templates/default/bbpress/form-reply.php:30
4652
  msgid "Reply To: %s"
4653
  msgstr ""
4654
 
4655
+ #: includes/replies/template.php:739
4656
  msgid "This reply was modified %1$s by %2$s. Reason: %3$s"
4657
  msgstr ""
4658
 
4659
+ #: includes/replies/template.php:741
4660
  msgid "This reply was modified %1$s by %2$s."
4661
  msgstr ""
4662
 
4663
+ #: includes/replies/template.php:1199 includes/topics/template.php:1458
4664
+ #: includes/users/template.php:1999
4665
  msgid "View %s's profile"
4666
  msgstr ""
4667
 
4668
+ #: includes/replies/template.php:1200 includes/topics/template.php:1459
4669
+ #: includes/users/template.php:2000
4670
  msgid "Visit %s's website"
4671
  msgstr ""
4672
 
4673
+ #: includes/replies/template.php:1652
4674
  #: templates/default/bbpress/form-user-passwords.php:31
4675
  msgid "Cancel"
4676
  msgstr ""
4677
 
4678
+ #: includes/replies/template.php:1962 includes/topics/template.php:2543
4679
  #: templates/default/bbpress/form-topic-tag.php:100
4680
  #: templates/default/bbpress/form-topic-tag.php:117
4681
  msgid "Delete"
4682
  msgstr ""
4683
 
4684
+ #: includes/replies/template.php:1987 includes/topics/template.php:2564
4685
  msgid "Are you sure you want to delete that permanently?"
4686
  msgstr ""
4687
 
4688
+ #: includes/replies/template.php:2084
4689
  msgid "Move"
4690
  msgstr ""
4691
 
4692
+ #: includes/replies/template.php:2085
4693
  msgid "Move this reply"
4694
  msgstr ""
4695
 
4696
+ #: includes/replies/template.php:2143
4697
  msgid "Split"
4698
  msgstr ""
4699
 
4700
+ #: includes/replies/template.php:2144
4701
  msgid "Split the topic from this reply"
4702
  msgstr ""
4703
 
4704
+ #: includes/replies/template.php:2378
4705
  msgid "Viewing %1$s reply thread"
4706
  msgid_plural "Viewing %1$s reply threads"
4707
  msgstr[0] ""
4708
  msgstr[1] ""
4709
 
4710
+ #: includes/replies/template.php:2385
4711
  msgid "Viewing %1$s reply"
4712
  msgid_plural "Viewing %1$s replies"
4713
  msgstr[0] ""
4714
  msgstr[1] ""
4715
 
4716
+ #: includes/replies/template.php:2389
4717
  msgid "Viewing %2$s replies (of %4$s total)"
4718
  msgid_plural "Viewing %1$s replies - %2$s through %3$s (of %4$s total)"
4719
  msgstr[0] ""
4720
  msgstr[1] ""
4721
 
4722
+ #: includes/replies/template.php:2397
4723
  msgid "Viewing %1$s post"
4724
  msgid_plural "Viewing %1$s posts"
4725
  msgstr[0] ""
4726
  msgstr[1] ""
4727
 
4728
+ #: includes/replies/template.php:2401
4729
  msgid "Viewing %2$s post (of %4$s total)"
4730
  msgid_plural "Viewing %1$s posts - %2$s through %3$s (of %4$s total)"
4731
  msgstr[0] ""
4735
  msgid "Search Results for '%s'"
4736
  msgstr ""
4737
 
4738
+ #: includes/search/template.php:394
4739
  msgid "Viewing %1$s result"
4740
  msgid_plural "Viewing %1$s results"
4741
  msgstr[0] ""
4742
  msgstr[1] ""
4743
 
4744
+ #: includes/search/template.php:398
4745
  msgid "Viewing %2$s results (of %4$s total)"
4746
  msgid_plural "Viewing %1$s results - %2$s through %3$s (of %4$s total)"
4747
  msgstr[0] ""
4751
  msgid "<strong>ERROR</strong>: You do not have permission to create new topics."
4752
  msgstr ""
4753
 
4754
+ #: includes/topics/functions.php:158 includes/topics/functions.php:530
4755
  msgid "<strong>ERROR</strong>: Your topic needs a title."
4756
  msgstr ""
4757
 
4758
+ #: includes/topics/functions.php:177 includes/topics/functions.php:549
4759
  msgid "<strong>ERROR</strong>: Your topic cannot be empty."
4760
  msgstr ""
4761
 
4762
+ #: includes/topics/functions.php:223
4763
  msgid ""
4764
  "<strong>ERROR</strong>: This forum is a category. No topics can be created "
4765
  "in this forum."
4766
  msgstr ""
4767
 
4768
+ #: includes/topics/functions.php:230 includes/topics/functions.php:505
4769
  msgid "<strong>ERROR</strong>: This forum has been closed to new topics."
4770
  msgstr ""
4771
 
4772
+ #: includes/topics/functions.php:235 includes/topics/functions.php:510
4773
  msgid ""
4774
  "<strong>ERROR</strong>: This forum is private and you do not have the "
4775
  "capability to read or create new topics in it."
4776
  msgstr ""
4777
 
4778
+ #: includes/topics/functions.php:239 includes/topics/functions.php:514
4779
  msgid ""
4780
  "<strong>ERROR</strong>: This forum is hidden and you do not have the "
4781
  "capability to read or create new topics in it."
4782
  msgstr ""
4783
 
4784
+ #: includes/topics/functions.php:253
4785
  msgid ""
4786
  "<strong>ERROR</strong>: Duplicate topic detected; it looks as though "
4787
  "you&#8217;ve already said that."
4788
  msgstr ""
4789
 
4790
+ #: includes/topics/functions.php:259
4791
  msgid "<strong>ERROR</strong>: Your topic cannot be created at this time."
4792
  msgstr ""
4793
 
4794
+ #: includes/topics/functions.php:404
4795
  msgid "<strong>ERROR</strong>: The topic was not created."
4796
  msgstr ""
4797
 
4798
+ #: includes/topics/functions.php:430 includes/topics/functions.php:1077
4799
  msgid "<strong>ERROR</strong>: Topic ID not found."
4800
  msgstr ""
4801
 
4802
+ #: includes/topics/functions.php:441
4803
  msgid "<strong>ERROR</strong>: The topic you want to edit was not found."
4804
  msgstr ""
4805
 
4806
+ #: includes/topics/functions.php:452
4807
  msgid "<strong>ERROR</strong>: You do not have permission to edit that topic."
4808
  msgstr ""
4809
 
4810
+ #: includes/topics/functions.php:498
4811
  msgid ""
4812
  "<strong>ERROR</strong>: This forum is a category. No topics can be created "
4813
  "in it."
4814
  msgstr ""
4815
 
4816
+ #: includes/topics/functions.php:555
4817
  msgid "<strong>ERROR</strong>: Your topic cannot be edited at this time."
4818
  msgstr ""
4819
 
4820
+ #: includes/topics/functions.php:1089
4821
  msgid "<strong>ERROR</strong>: The topic you want to merge was not found."
4822
  msgstr ""
4823
 
4824
+ #: includes/topics/functions.php:1103
4825
  msgid "<strong>ERROR</strong>: Destination topic ID not found."
4826
  msgstr ""
4827
 
4828
+ #: includes/topics/functions.php:1110
4829
  msgid "<strong>ERROR</strong>: The topic you want to merge to was not found."
4830
  msgstr ""
4831
 
4832
+ #: includes/topics/functions.php:1335
4833
  msgid "<strong>ERROR</strong>: A reply ID is required."
4834
  msgstr ""
4835
 
4836
+ #: includes/topics/functions.php:1344
4837
  msgid "<strong>ERROR</strong>: The reply you want to split from was not found."
4838
  msgstr ""
4839
 
4840
+ #: includes/topics/functions.php:1354
4841
  msgid "<strong>ERROR</strong>: The topic you want to split was not found."
4842
  msgstr ""
4843
 
4844
+ #: includes/topics/functions.php:1375
4845
  msgid "<strong>ERROR</strong>: You need to choose a valid split option."
4846
  msgstr ""
4847
 
4848
+ #: includes/topics/functions.php:1398
4849
  msgid "<strong>ERROR</strong>: The topic you want to split to was not found."
4850
  msgstr ""
4851
 
4852
+ #: includes/topics/functions.php:1683
4853
  msgid ""
4854
  "<strong>ERROR</strong>: The following problem(s) have been found while "
4855
  "getting the tag: %s"
4856
  msgstr ""
4857
 
4858
+ #: includes/topics/functions.php:1701 includes/topics/functions.php:1745
4859
  msgid "<strong>ERROR</strong>: You do not have permission to edit the topic tags."
4860
  msgstr ""
4861
 
4862
+ #: includes/topics/functions.php:1707 includes/topics/functions.php:1751
4863
  msgid "<strong>ERROR</strong>: You need to enter a tag name."
4864
  msgstr ""
4865
 
4866
+ #: includes/topics/functions.php:1722
4867
  msgid ""
4868
  "<strong>ERROR</strong>: The following problem(s) have been found while "
4869
  "updating the tag: %s"
4870
  msgstr ""
4871
 
4872
+ #: includes/topics/functions.php:1762 includes/topics/functions.php:1783
4873
  msgid ""
4874
  "<strong>ERROR</strong>: The following problem(s) have been found while "
4875
  "merging the tags: %s"
4876
  msgstr ""
4877
 
4878
+ #: includes/topics/functions.php:1771
4879
  msgid "<strong>ERROR</strong>: The tags which are being merged can not be the same."
4880
  msgstr ""
4881
 
4882
+ #: includes/topics/functions.php:1806
4883
  msgid "<strong>ERROR</strong>: You do not have permission to delete the topic tags."
4884
  msgstr ""
4885
 
4886
+ #: includes/topics/functions.php:1815
4887
  msgid ""
4888
  "<strong>ERROR</strong>: The following problem(s) have been found while "
4889
  "deleting the tag: %s"
4890
  msgstr ""
4891
 
4892
+ #: includes/topics/functions.php:1976
4893
  msgid "<strong>ERROR:</strong> This topic could not be found or no longer exists."
4894
  msgstr ""
4895
 
4896
+ #: includes/topics/functions.php:2066
4897
  msgid "<strong>ERROR</strong>: There was a problem approving the topic."
4898
  msgstr ""
4899
 
4900
+ #: includes/topics/functions.php:2067
4901
  msgid "<strong>ERROR</strong>: There was a problem unapproving the topic."
4902
  msgstr ""
4903
 
4904
+ #: includes/topics/functions.php:2084
4905
  msgid "<strong>ERROR</strong>: There was a problem closing the topic."
4906
  msgstr ""
4907
 
4908
+ #: includes/topics/functions.php:2085
4909
  msgid "<strong>ERROR</strong>: There was a problem opening the topic."
4910
  msgstr ""
4911
 
4912
+ #: includes/topics/functions.php:2103
4913
  msgid "<strong>ERROR</strong>: There was a problem unsticking the topic."
4914
  msgstr ""
4915
 
4916
+ #: includes/topics/functions.php:2104
4917
  msgid "<strong>ERROR</strong>: There was a problem sticking the topic."
4918
  msgstr ""
4919
 
4920
+ #: includes/topics/functions.php:2122
4921
  msgid "<strong>ERROR</strong>: There was a problem unmarking the topic as spam."
4922
  msgstr ""
4923
 
4924
+ #: includes/topics/functions.php:2123
4925
  msgid "<strong>ERROR</strong>: There was a problem marking the topic as spam."
4926
  msgstr ""
4927
 
4928
+ #: includes/topics/functions.php:2136
4929
  msgid "<strong>ERROR</strong>: There was a problem trashing the topic."
4930
  msgstr ""
4931
 
4932
+ #: includes/topics/functions.php:2147
4933
  msgid "<strong>ERROR</strong>: There was a problem untrashing the topic."
4934
  msgstr ""
4935
 
4936
+ #: includes/topics/functions.php:2156
4937
  msgid "<strong>ERROR</strong>: There was a problem deleting the topic."
4938
  msgstr ""
4939
 
4981
  msgid "Topics list navigation"
4982
  msgstr ""
4983
 
4984
+ #: includes/topics/template.php:67
4985
+ msgid "Forum Topics"
4986
+ msgstr ""
4987
+
4988
+ #: includes/topics/template.php:69
4989
+ msgid "Insert into topic"
4990
+ msgstr ""
4991
+
4992
+ #: includes/topics/template.php:70
4993
+ msgid "Uploaded to this topic"
4994
+ msgstr ""
4995
+
4996
+ #: includes/topics/template.php:71
4997
+ msgid "Topic Image"
4998
+ msgstr ""
4999
+
5000
+ #: includes/topics/template.php:72
5001
+ msgid "Set topic image"
5002
+ msgstr ""
5003
+
5004
+ #: includes/topics/template.php:73
5005
+ msgid "Remove topic image"
5006
+ msgstr ""
5007
+
5008
+ #: includes/topics/template.php:74
5009
+ msgid "Use as topic image"
5010
+ msgstr ""
5011
+
5012
+ #: includes/topics/template.php:75
5013
+ msgid "Filter topic list"
5014
+ msgstr ""
5015
+
5016
+ #: includes/topics/template.php:76
5017
+ msgid "Topic list navigation"
5018
+ msgstr ""
5019
+
5020
+ #: includes/topics/template.php:77
5021
+ msgid "Topic list"
5022
+ msgstr ""
5023
+
5024
+ #: includes/topics/template.php:924
5025
  msgid "This topic was modified %1$s by %2$s. Reason: %3$s"
5026
  msgstr ""
5027
 
5028
+ #: includes/topics/template.php:926
5029
  msgid "This topic was modified %1$s by %2$s."
5030
  msgstr ""
5031
 
5032
+ #: includes/topics/template.php:1855 includes/users/template.php:1075
5033
  msgid "Favorite"
5034
  msgstr ""
5035
 
5036
+ #: includes/topics/template.php:1856 includes/users/template.php:1076
5037
  msgid "Unfavorite"
5038
  msgstr ""
5039
 
5040
+ #: includes/topics/template.php:2221
5041
  msgid "Tagged:"
5042
  msgstr ""
5043
 
5044
+ #: includes/topics/template.php:2782
5045
  #: templates/default/bbpress/form-topic-tag.php:69
5046
  #: templates/default/bbpress/form-topic-tag.php:85
5047
  msgid "Merge"
5048
  msgstr ""
5049
 
5050
+ #: includes/topics/template.php:3014
5051
  msgid "Viewing %1$s topic"
5052
  msgid_plural "Viewing %1$s topics"
5053
  msgstr[0] ""
5054
  msgstr[1] ""
5055
 
5056
+ #: includes/topics/template.php:3018
5057
  msgid "Viewing topic %2$s (of %4$s total)"
5058
  msgid_plural "Viewing %1$s topics - %2$s through %3$s (of %4$s total)"
5059
  msgstr[0] ""
5060
  msgstr[1] ""
5061
 
5062
+ #: includes/topics/template.php:3075
5063
  msgid "This topic is marked as spam."
5064
  msgstr ""
5065
 
5066
+ #: includes/topics/template.php:3080
5067
  msgid "This topic is in the trash."
5068
  msgstr ""
5069
 
5070
+ #: includes/topics/template.php:3330
5071
  msgid "%s voice"
5072
  msgid_plural "%s voices"
5073
  msgstr[0] ""
5074
  msgstr[1] ""
5075
 
5076
+ #: includes/topics/template.php:3336
5077
  msgid "This topic has %1$s, %2$s, and was last updated %3$s by %4$s."
5078
  msgstr ""
5079
 
5080
+ #: includes/topics/template.php:3340
5081
  msgid "This topic has %1$s and %2$s."
5082
  msgstr ""
5083
 
5084
+ #: includes/topics/template.php:3344
5085
  msgid "This topic has no replies."
5086
  msgstr ""
5087
 
5088
+ #: includes/topics/template.php:3394
5089
  msgid "Search Tags"
5090
  msgstr ""
5091
 
5092
+ #: includes/topics/template.php:3395
5093
  msgid "Popular Tags"
5094
  msgstr ""
5095
 
5096
+ #: includes/topics/template.php:3396
5097
  msgid "All Tags"
5098
  msgstr ""
5099
 
5100
+ #: includes/topics/template.php:3397
5101
+ msgid "Parent Tag"
5102
+ msgstr ""
5103
+
5104
+ #: includes/topics/template.php:3398
5105
+ msgid "Parent Tag:"
5106
+ msgstr ""
5107
+
5108
+ #: includes/topics/template.php:3399
5109
  msgid "Edit Tag"
5110
  msgstr ""
5111
 
5112
+ #: includes/topics/template.php:3400
5113
+ msgid "View Topic Tag"
5114
+ msgstr ""
5115
+
5116
+ #: includes/topics/template.php:3401
5117
  msgid "Update Tag"
5118
  msgstr ""
5119
 
5120
+ #: includes/topics/template.php:3402
5121
  msgid "Add New Tag"
5122
  msgstr ""
5123
 
5124
+ #: includes/topics/template.php:3403
5125
  msgid "New Tag Name"
5126
  msgstr ""
5127
 
5128
+ #: includes/topics/template.php:3404
5129
+ msgid "Separate topic tags with commas"
5130
  msgstr ""
5131
 
5132
+ #: includes/topics/template.php:3405
5133
+ msgid "Add or remove tags"
5134
  msgstr ""
5135
 
5136
+ #: includes/topics/template.php:3406
5137
+ msgid "Choose from the most used tags"
5138
+ msgstr ""
5139
+
5140
+ #: includes/topics/template.php:3407
5141
+ msgid "No topic tags found."
5142
+ msgstr ""
5143
+
5144
+ #: includes/topics/template.php:3408
5145
+ msgid "No topic tags"
5146
  msgstr ""
5147
 
5148
+ #: includes/topics/template.php:3409
5149
  msgid "Topic tags list navigation"
5150
  msgstr ""
5151
 
5152
+ #: includes/topics/template.php:3410
5153
+ msgid "Topic tags list"
5154
+ msgstr ""
5155
+
5156
+ #: includes/topics/template.php:3411
5157
+ msgid "Most used topic tags"
5158
  msgstr ""
5159
 
5160
+ #: includes/topics/template.php:3412
5161
+ msgid "&larr; Back to Tags"
5162
+ msgstr ""
5163
+
5164
+ #: includes/topics/template.php:4027
5165
  msgid "Nobody"
5166
  msgstr ""
5167
 
5168
+ #: includes/topics/template.php:4031
5169
  msgid "%1$s is currently editing this topic."
5170
  msgstr ""
5171
 
5172
+ #: includes/users/engagements.php:600
5173
  msgid ""
5174
  "<strong>ERROR</strong>: No topic was found. Which topic are you "
5175
  "marking/unmarking as favorite?"
5176
  msgstr ""
5177
 
5178
+ #: includes/users/engagements.php:608
5179
  msgid ""
5180
  "<strong>ERROR</strong>: You do not have permission to edit favorites for "
5181
  "that user!."
5182
  msgstr ""
5183
 
5184
+ #: includes/users/engagements.php:649
5185
  msgid ""
5186
  "<strong>ERROR</strong>: There was a problem removing that topic from "
5187
  "favorites."
5188
  msgstr ""
5189
 
5190
+ #: includes/users/engagements.php:651
5191
  msgid "<strong>ERROR</strong>: There was a problem favoriting that topic."
5192
  msgstr ""
5193
 
5194
+ #: includes/users/engagements.php:837
5195
  msgid ""
5196
  "<strong>ERROR</strong>: Not found. What are you subscribing/unsubscribing "
5197
  "to?"
5198
  msgstr ""
5199
 
5200
+ #: includes/users/engagements.php:845
5201
  msgid ""
5202
  "<strong>ERROR</strong>: You do not have permission to edit subscriptions of "
5203
  "that user."
5204
  msgstr ""
5205
 
5206
+ #: includes/users/engagements.php:888
5207
  msgid "<strong>ERROR</strong>: There was a problem unsubscribing."
5208
  msgstr ""
5209
 
5210
+ #: includes/users/engagements.php:890
5211
  msgid "<strong>ERROR</strong>: There was a problem subscribing."
5212
  msgstr ""
5213
 
5214
+ #: includes/users/functions.php:208 includes/users/functions.php:220
5215
  msgid "<strong>ERROR</strong>: That is not a valid email address."
5216
  msgstr ""
5217
 
5218
+ #: includes/users/functions.php:226 includes/users/functions.php:345
5219
  msgid "<strong>ERROR</strong>: That email address is already in use."
5220
  msgstr ""
5221
 
5222
+ #: includes/users/functions.php:408
5223
  msgid "<strong>ERROR</strong>: An error occurred while updating your email address."
5224
  msgstr ""
5225
 
5226
+ #: includes/users/functions.php:420
5227
  msgid ""
5228
  "%1$s\n"
5229
  "\n"
5242
  "%5$s"
5243
  msgstr ""
5244
 
5245
+ #: includes/users/functions.php:455
5246
  msgid "[%s] New Email Address"
5247
  msgstr ""
5248
 
5249
+ #: includes/users/template.php:677
5250
  msgid "Guest"
5251
  msgstr ""
5252
 
5253
+ #: includes/users/template.php:681
5254
  msgid "Inactive"
5255
  msgstr ""
5256
 
5257
+ #: includes/users/template.php:691
5258
  msgid "Member"
5259
  msgstr ""
5260
 
5261
+ #: includes/users/template.php:732
5262
  msgid "Admin"
5263
  msgstr ""
5264
 
5265
+ #: includes/users/template.php:1369
5266
  msgid "User updated."
5267
  msgstr ""
5268
 
5269
+ #: includes/users/template.php:1413
5270
  msgid "There is a pending email address change to %1$s. %2$s"
5271
  msgstr ""
5272
 
5273
+ #: includes/users/template.php:1430
5274
  msgid "You have super admin privileges."
5275
  msgstr ""
5276
 
5277
+ #: includes/users/template.php:1430
5278
  msgid "This user has super admin privileges."
5279
  msgstr ""
5280
 
5281
+ #: includes/users/template.php:1504
5282
  msgid "&mdash; No role for this site &mdash;"
5283
  msgstr ""
5284
 
5285
+ #: includes/users/template.php:1824
5286
  msgid "You are now logged out."
5287
  msgstr ""
5288
 
5289
+ #: includes/users/template.php:1828
5290
  msgid "New user registration is currently not allowed."
5291
  msgstr ""
5292
 
5293
+ #: includes/users/template.php:1837
5294
  msgid "Check your e-mail for the confirmation link."
5295
  msgstr ""
5296
 
5297
+ #: includes/users/template.php:1842
5298
  msgid "Check your e-mail for your new password."
5299
  msgstr ""
5300
 
5301
+ #: includes/users/template.php:1847
5302
  msgid "Registration complete. Please check your e-mail."
5303
  msgstr ""
5304
 
5305
+ #: includes/users/template.php:2362
5306
  msgid "Moderators:"
5307
  msgstr ""
5308
 
5808
  msgid "Update User"
5809
  msgstr ""
5810
 
 
 
 
 
5811
  #: templates/default/bbpress/form-user-lost-pass.php:21
5812
  msgid "Username or Email"
5813
  msgstr ""
6031
  msgid "The bbPress Contributors"
6032
  msgstr ""
6033
 
6034
+ #: bbpress.php:600
6035
  msgctxt "post"
6036
  msgid "Closed"
6037
  msgstr ""
6038
 
6039
+ #: bbpress.php:601
6040
  msgctxt "post"
6041
  msgid "Closed <span class=\"count\">(%s)</span>"
6042
  msgid_plural "Closed <span class=\"count\">(%s)</span>"
6043
  msgstr[0] ""
6044
  msgstr[1] ""
6045
 
6046
+ #: bbpress.php:613
6047
  msgctxt "post"
6048
  msgid "Spam"
6049
  msgstr ""
6050
 
6051
+ #: bbpress.php:614
6052
  msgctxt "post"
6053
  msgid "Spam <span class=\"count\">(%s)</span>"
6054
  msgid_plural "Spam <span class=\"count\">(%s)</span>"
6055
  msgstr[0] ""
6056
  msgstr[1] ""
6057
 
6058
+ #: bbpress.php:627
6059
  msgctxt "post"
6060
  msgid "Orphan"
6061
  msgstr ""
6062
 
6063
+ #: bbpress.php:628
6064
  msgctxt "post"
6065
  msgid "Orphan <span class=\"count\">(%s)</span>"
6066
  msgid_plural "Orphans <span class=\"count\">(%s)</span>"
6067
  msgstr[0] ""
6068
  msgstr[1] ""
6069
 
6070
+ #: bbpress.php:641
6071
  msgctxt "post"
6072
  msgid "Hidden"
6073
  msgstr ""
6074
 
6075
+ #: bbpress.php:642
6076
  msgctxt "post"
6077
  msgid "Hidden <span class=\"count\">(%s)</span>"
6078
  msgid_plural "Hidden <span class=\"count\">(%s)</span>"
6079
  msgstr[0] ""
6080
  msgstr[1] ""
6081
 
6082
+ #: includes/admin/classes/class-bbp-admin.php:786
6083
  msgctxt "admin color scheme"
6084
  msgid "Mint"
6085
  msgstr ""
6086
 
6087
+ #: includes/admin/classes/class-bbp-admin.php:795
6088
  msgctxt "admin color scheme"
6089
  msgid "Evergreen"
6090
  msgstr ""
6091
 
6092
+ #: includes/admin/forums.php:631
6093
  msgctxt "Close a Forum"
6094
  msgid "Close"
6095
  msgstr ""
6096
 
6097
+ #: includes/admin/forums.php:633
6098
  msgctxt "Open a Forum"
6099
  msgid "Open"
6100
  msgstr ""
6101
 
6102
+ #: includes/admin/replies.php:809
6103
  msgctxt "Unapprove reply"
6104
  msgid "Unapprove"
6105
  msgstr ""
6106
 
6107
+ #: includes/admin/replies.php:811
6108
  msgctxt "Approve reply"
6109
  msgid "Approve"
6110
  msgstr ""
6114
  msgid "Reply"
6115
  msgstr ""
6116
 
6117
+ #: includes/admin/topics.php:985
6118
  msgctxt "Unapprove Topic"
6119
  msgid "Unapprove"
6120
  msgstr ""
6121
 
6122
+ #: includes/admin/topics.php:990
6123
  msgctxt "Approve Topic"
6124
  msgid "Approve"
6125
  msgstr ""
6126
 
6127
+ #: includes/admin/topics.php:1002
6128
  msgctxt "Close a Topic"
6129
  msgid "Close"
6130
  msgstr ""
6131
 
6132
+ #: includes/admin/topics.php:1004
6133
  msgctxt "Open a Topic"
6134
  msgid "Open"
6135
  msgstr ""
6136
 
6137
+ #: includes/common/formatting.php:693
6138
  msgctxt "Separator in time since"
6139
  msgid ","
6140
  msgstr ""
6169
  msgid "Blocked"
6170
  msgstr ""
6171
 
6172
+ #: includes/common/widgets.php:801
6173
  msgctxt "widgets"
6174
  msgid "by %1$s"
6175
  msgstr ""
6176
 
6177
+ #: includes/common/widgets.php:1146
6178
  #. translators: 1: reply author, 2: reply link, 3: reply timestamp
6179
  msgctxt "widgets"
6180
  msgid "%1$s on %2$s %3$s"
6181
  msgstr ""
6182
 
6183
+ #: includes/common/widgets.php:1156
 
 
 
 
 
 
6184
  #. translators: 1: reply author, 2: reply link
6185
  msgctxt "widgets"
6186
  msgid "%1$s on %2$s"
6187
  msgstr ""
6188
 
6189
+ #: includes/extend/buddypress/groups.php:497
 
 
 
 
 
 
6190
  msgctxt "group admin edit screen"
6191
  msgid "Discussion Forum"
6192
  msgstr ""
6193
 
6194
+ #: includes/forums/functions.php:1834
6195
  msgctxt "Open the forum"
6196
  msgid "Open"
6197
  msgstr ""
6198
 
6199
+ #: includes/forums/functions.php:1835
6200
  msgctxt "Close the forum"
6201
  msgid "Closed"
6202
  msgstr ""
6203
 
6204
+ #: includes/forums/functions.php:1852
6205
  msgctxt "Forum accepts new topics"
6206
  msgid "Forum"
6207
  msgstr ""
6208
 
6209
+ #: includes/forums/functions.php:1853
6210
  msgctxt "Forum is a category"
6211
  msgid "Category"
6212
  msgstr ""
6213
 
6214
+ #: includes/forums/functions.php:1870
6215
  msgctxt "Make forum public"
6216
  msgid "Public"
6217
  msgstr ""
6218
 
6219
+ #: includes/forums/functions.php:1871
6220
  msgctxt "Make forum private"
6221
  msgid "Private"
6222
  msgstr ""
6223
 
6224
+ #: includes/forums/functions.php:1872
6225
  msgctxt "Make forum hidden"
6226
  msgid "Hidden"
6227
  msgstr ""
6228
 
6229
+ #: includes/replies/functions.php:1632
6230
  msgctxt "Publish the reply"
6231
  msgid "Publish"
6232
  msgstr ""
6233
 
6234
+ #: includes/replies/functions.php:1633
6235
  msgctxt "Spam the reply"
6236
  msgid "Spam"
6237
  msgstr ""
6238
 
6239
+ #: includes/replies/functions.php:1634
6240
  msgctxt "Trash the reply"
6241
  msgid "Trash"
6242
  msgstr ""
6243
 
6244
+ #: includes/replies/functions.php:1635
6245
  msgctxt "Mark reply as pending"
6246
  msgid "Pending"
6247
  msgstr ""
6248
 
6249
+ #: includes/replies/template.php:649 includes/topics/template.php:764
6250
  msgctxt "date at time"
6251
  msgid "%1$s at %2$s"
6252
  msgstr ""
6253
 
6254
+ #: includes/replies/template.php:1579 includes/topics/template.php:2879
6255
  msgctxt "verb"
6256
  msgid "Reply"
6257
  msgstr ""
6258
 
6259
+ #: includes/replies/template.php:2200
6260
  msgctxt "Pending Status"
6261
  msgid "Approve"
6262
  msgstr ""
6263
 
6264
+ #: includes/replies/template.php:2201
6265
  msgctxt "Pending Status"
6266
  msgid "Unapprove"
6267
  msgstr ""
6268
 
6269
+ #: includes/replies/template.php:2563
6270
  msgctxt "Default reply to dropdown text"
6271
  msgid "None"
6272
  msgstr ""
6273
 
6274
+ #: includes/topics/functions.php:1850 includes/topics/template.php:2607
6275
  msgctxt "Open the topic"
6276
  msgid "Open"
6277
  msgstr ""
6278
 
6279
+ #: includes/topics/functions.php:1851
6280
  msgctxt "Close the topic"
6281
  msgid "Closed"
6282
  msgstr ""
6283
 
6284
+ #: includes/topics/template.php:2606
6285
  msgctxt "Close the topic"
6286
  msgid "Close"
6287
  msgstr ""
6288
 
6289
+ #: includes/topics/functions.php:1852
6290
  msgctxt "Spam the topic"
6291
  msgid "Spam"
6292
  msgstr ""
6293
 
6294
+ #: includes/topics/functions.php:1853
6295
  msgctxt "Trash the topic"
6296
  msgid "Trash"
6297
  msgstr ""
6298
 
6299
+ #: includes/topics/functions.php:1854
6300
  msgctxt "Unapprove the topic"
6301
  msgid "Pending"
6302
  msgstr ""
6303
 
6304
+ #: includes/topics/template.php:2661
6305
  msgctxt "Unapprove the topic"
6306
  msgid "Unapprove"
6307
  msgstr ""
6308
 
6309
+ #: includes/topics/functions.php:1871
6310
  msgctxt "Unstick a topic"
6311
  msgid "Normal"
6312
  msgstr ""
6313
 
6314
+ #: includes/topics/functions.php:1872
6315
  msgctxt "Make topic sticky"
6316
  msgid "Sticky"
6317
  msgstr ""
6318
 
6319
+ #: includes/topics/functions.php:1873
6320
  msgctxt "Make topic super sticky"
6321
  msgid "Super Sticky"
6322
  msgstr ""
6323
 
6324
+ #: includes/topics/template.php:2660
6325
  msgctxt "Approve the topic"
6326
  msgid "Approve"
6327
  msgstr ""
6328
 
6329
+ #: includes/users/template.php:1408
6330
  msgctxt "Dismiss pending user email address change"
6331
  msgid "Cancel"
6332
  msgstr ""
includes/admin/actions.php CHANGED
@@ -38,22 +38,21 @@ defined( 'ABSPATH' ) || exit;
38
  *
39
  * v--WordPress Actions v--bbPress Sub-actions
40
  */
 
 
 
41
  add_action( 'admin_menu', 'bbp_admin_menu' );
42
  add_action( 'admin_init', 'bbp_admin_init' );
43
  add_action( 'admin_head', 'bbp_admin_head' );
44
  add_action( 'admin_notices', 'bbp_admin_notices' );
45
  add_action( 'menu_order', 'bbp_admin_menu_order' );
46
- add_action( 'custom_menu_order', 'bbp_admin_custom_menu_order' );
47
- add_action( 'current_screen', 'bbp_current_screen' );
48
- add_action( 'wpmu_new_blog', 'bbp_new_site', 10, 6 );
49
- add_action( 'tool_box', 'bbp_admin_tool_box' );
50
 
51
  // Hook on to admin_init
52
  add_action( 'bbp_admin_init', 'bbp_setup_updater', 999 );
53
  add_action( 'bbp_admin_init', 'bbp_register_importers' );
54
  add_action( 'bbp_admin_init', 'bbp_register_admin_style' );
55
  add_action( 'bbp_admin_init', 'bbp_register_admin_settings' );
56
- add_action( 'bbp_admin_init', 'bbp_do_activation_redirect', 1 );
57
 
58
  // Hook on to current_screen
59
  add_action( 'bbp_current_screen', 'bbp_admin_forums' );
@@ -67,15 +66,18 @@ add_action( 'bbp_init', 'bbp_setup_admin' );
67
  add_action( 'bbp_admin_menu', 'bbp_admin_separator' );
68
 
69
  // Activation
70
- add_action( 'bbp_activation', 'bbp_delete_rewrite_rules' );
71
- add_action( 'bbp_activation', 'bbp_make_current_user_keymaster' );
 
 
 
72
 
73
  // Deactivation
74
  add_action( 'bbp_deactivation', 'bbp_remove_caps' );
75
  add_action( 'bbp_deactivation', 'bbp_delete_rewrite_rules' );
76
 
77
  // New Site
78
- add_action( 'bbp_new_site', 'bbp_create_initial_content', 8 );
79
 
80
  // Load the default repair tools
81
  add_action( 'load-tools_page_bbp-repair', 'bbp_register_default_repair_tools' );
@@ -142,14 +144,14 @@ function bbp_new_site( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
142
  return;
143
  }
144
 
145
- // Switch to the new blog
146
- switch_to_blog( $blog_id );
147
 
148
  // Do the bbPress activation routine
149
  do_action( 'bbp_new_site', $blog_id, $user_id, $domain, $path, $site_id, $meta );
150
 
151
- // restore original blog
152
- restore_current_blog();
153
  }
154
 
155
  /**
@@ -207,6 +209,29 @@ function bbp_filter_column_headers( $columns = array() ) {
207
  return $columns;
208
  }
209
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  /** Sub-Actions ***************************************************************/
211
 
212
  /**
38
  *
39
  * v--WordPress Actions v--bbPress Sub-actions
40
  */
41
+ add_action( 'wpmu_new_blog', 'bbp_new_site', 10, 6 );
42
+ add_action( 'current_screen', 'bbp_current_screen' );
43
+ add_action( 'tool_box', 'bbp_admin_tool_box' );
44
  add_action( 'admin_menu', 'bbp_admin_menu' );
45
  add_action( 'admin_init', 'bbp_admin_init' );
46
  add_action( 'admin_head', 'bbp_admin_head' );
47
  add_action( 'admin_notices', 'bbp_admin_notices' );
48
  add_action( 'menu_order', 'bbp_admin_menu_order' );
49
+ add_filter( 'custom_menu_order', 'bbp_admin_custom_menu_order' );
 
 
 
50
 
51
  // Hook on to admin_init
52
  add_action( 'bbp_admin_init', 'bbp_setup_updater', 999 );
53
  add_action( 'bbp_admin_init', 'bbp_register_importers' );
54
  add_action( 'bbp_admin_init', 'bbp_register_admin_style' );
55
  add_action( 'bbp_admin_init', 'bbp_register_admin_settings' );
 
56
 
57
  // Hook on to current_screen
58
  add_action( 'bbp_current_screen', 'bbp_admin_forums' );
66
  add_action( 'bbp_admin_menu', 'bbp_admin_separator' );
67
 
68
  // Activation
69
+ add_action( 'bbp_activation', 'bbp_setup_new_site' );
70
+ add_action( 'bbp_activation', 'bbp_add_activation_redirect' );
71
+ add_action( 'bbp_activation', 'bbp_delete_rewrite_rules' );
72
+ add_action( 'bbp_activation', 'bbp_make_current_user_keymaster' );
73
+ add_action( 'load-plugins.php', 'bbp_do_activation_redirect' );
74
 
75
  // Deactivation
76
  add_action( 'bbp_deactivation', 'bbp_remove_caps' );
77
  add_action( 'bbp_deactivation', 'bbp_delete_rewrite_rules' );
78
 
79
  // New Site
80
+ add_action( 'bbp_new_site', 'bbp_setup_new_site', 8 );
81
 
82
  // Load the default repair tools
83
  add_action( 'load-tools_page_bbp-repair', 'bbp_register_default_repair_tools' );
144
  return;
145
  }
146
 
147
+ // Switch to the new site
148
+ bbp_switch_to_site( $blog_id );
149
 
150
  // Do the bbPress activation routine
151
  do_action( 'bbp_new_site', $blog_id, $user_id, $domain, $path, $site_id, $meta );
152
 
153
+ // Restore original site
154
+ bbp_restore_current_site();
155
  }
156
 
157
  /**
209
  return $columns;
210
  }
211
 
212
+ /**
213
+ * Filter sample permalinks so that certain languages display properly.
214
+ *
215
+ * @since 2.0.0 bbPress (r3336)
216
+ *
217
+ * @param string $post_link Custom post type permalink
218
+ * @param object $_post Post data object
219
+ * @param bool $leavename Optional, defaults to false. Whether to keep post name or page name.
220
+ * @param bool $sample Optional, defaults to false. Is it a sample permalink.
221
+ *
222
+ * @return string The custom post type permalink
223
+ */
224
+ function bbp_filter_sample_permalink( $post_link, $_post, $leavename = false, $sample = false ) {
225
+
226
+ // Bail if not on an admin page and not getting a sample permalink
227
+ if ( ! empty( $sample ) && is_admin() && bbp_is_custom_post_type() ) {
228
+ return urldecode( $post_link );
229
+ }
230
+
231
+ // Return post link
232
+ return $post_link;
233
+ }
234
+
235
  /** Sub-Actions ***************************************************************/
236
 
237
  /**
includes/admin/assets/css/admin-rtl.css CHANGED
@@ -10,9 +10,7 @@
10
  /* Version Badge */
11
 
12
  .bbp-badge {
13
- -webkit-transform-origin: top right;
14
  transform-origin: top right;
15
- -webkit-animation: swoop 16s infinite linear;
16
  animation: swoop 16s infinite linear;
17
  }
18
 
@@ -66,34 +64,6 @@
66
  color: #555;
67
  }
68
 
69
- @-webkit-keyframes buzz {
70
-
71
- 0% {
72
- left: -2px;
73
- top: -1px;
74
- }
75
-
76
- 25% {
77
- left: 1px;
78
- top: 2px;
79
- }
80
-
81
- 50% {
82
- left: -3px;
83
- top: -1px;
84
- }
85
-
86
- 75% {
87
- left: 2px;
88
- top: 1px;
89
- }
90
-
91
- 0% {
92
- left: -2px;
93
- top: -1px;
94
- }
95
- }
96
-
97
  @keyframes buzz {
98
 
99
  0% {
@@ -122,28 +92,13 @@
122
  }
123
  }
124
 
125
- @-webkit-keyframes swoop {
126
-
127
- 0% {
128
- -webkit-transform: rotate(-95deg);
129
- transform: rotate(-95deg);
130
- }
131
-
132
- 100% {
133
- -webkit-transform: rotate(-455deg);
134
- transform: rotate(-455deg);
135
- }
136
- }
137
-
138
  @keyframes swoop {
139
 
140
  0% {
141
- -webkit-transform: rotate(-95deg);
142
  transform: rotate(-95deg);
143
  }
144
 
145
  100% {
146
- -webkit-transform: rotate(-455deg);
147
  transform: rotate(-455deg);
148
  }
149
  }
@@ -385,6 +340,7 @@ body.post-type-reply strong.label {
385
  width: 10% !important;
386
  }
387
 
 
388
  .column-bbp_forum_created,
389
  .column-bbp_topic_created,
390
  .column-bbp_reply_created {
@@ -412,35 +368,63 @@ body.post-type-reply strong.label {
412
  border-color: #ccc #ccc #fff #fff;
413
  }
414
 
415
- #the-list .status-closed {
 
 
416
  background-color: #f5f5f5;
417
  }
418
 
419
- #the-list .status-closed:nth-child(odd) {
 
 
420
  background-color: #f0f0f0;
421
  }
422
 
423
- #the-list .status-spam {
 
 
 
424
  background-color: #fee;
425
  }
426
 
427
- #the-list .status-spam:nth-child(odd) {
 
 
 
428
  background-color: #fdd;
429
  }
430
 
431
- #the-list .status-pending {
 
 
432
  background-color: #fff2e8;
433
  }
434
 
435
- #the-list .status-pending:nth-child(odd) {
 
 
436
  background-color: #fff7f1;
437
  }
438
 
439
- #the-list .status-closed td,
440
- #the-list .status-spam td {
 
 
 
 
 
441
  color: #999;
442
  }
443
 
 
 
 
 
 
 
 
 
 
444
  /* User Relationships */
445
 
446
  #bbp_topic_engagements_metabox .avatar,
@@ -451,12 +435,35 @@ body.post-type-reply strong.label {
451
 
452
  /* Converter */
453
 
 
 
 
 
 
 
 
 
 
 
 
 
454
  #bbp-converter-monitor h2 {
455
  position: relative;
456
  }
457
 
458
  #bbp-converter-monitor .inside {
459
  margin-bottom: 0;
 
 
 
 
 
 
 
 
 
 
 
460
  }
461
 
462
  div.bbp-converter-log,
@@ -556,7 +563,7 @@ div.bbp-converter-log .mini-step {
556
 
557
  button.bbp-db-pass-toggle {
558
  border: none;
559
- background: #fff;
560
  position: absolute;
561
  left: 3px;
562
  top: 3px;
@@ -587,6 +594,13 @@ button.bbp-db-pass-toggle.password:after {
587
  width: 100%;
588
  }
589
 
 
 
 
 
 
 
 
590
  button.bbp-db-pass-toggle {
591
  height: 35px;
592
  width: 35px;
10
  /* Version Badge */
11
 
12
  .bbp-badge {
 
13
  transform-origin: top right;
 
14
  animation: swoop 16s infinite linear;
15
  }
16
 
64
  color: #555;
65
  }
66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  @keyframes buzz {
68
 
69
  0% {
92
  }
93
  }
94
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  @keyframes swoop {
96
 
97
  0% {
 
98
  transform: rotate(-95deg);
99
  }
100
 
101
  100% {
 
102
  transform: rotate(-455deg);
103
  }
104
  }
340
  width: 10% !important;
341
  }
342
 
343
+ .column-bbp_user_role,
344
  .column-bbp_forum_created,
345
  .column-bbp_topic_created,
346
  .column-bbp_reply_created {
368
  border-color: #ccc #ccc #fff #fff;
369
  }
370
 
371
+ body.post-type-forum #the-list .status-closed,
372
+ body.post-type-topic #the-list .status-closed,
373
+ body.post-type-reply #the-list .status-closed {
374
  background-color: #f5f5f5;
375
  }
376
 
377
+ body.post-type-forum #the-list .status-closed:nth-child(odd),
378
+ body.post-type-topic #the-list .status-closed:nth-child(odd),
379
+ body.post-type-reply #the-list .status-closed:nth-child(odd) {
380
  background-color: #f0f0f0;
381
  }
382
 
383
+ body.post-type-forum #the-list .status-spam,
384
+ body.post-type-topic #the-list .status-spam,
385
+ body.post-type-reply #the-list .status-spam,
386
+ #bbp-reply-list .status-trash {
387
  background-color: #fee;
388
  }
389
 
390
+ body.post-type-forum #the-list .status-spam:nth-child(odd),
391
+ body.post-type-topic #the-list .status-spam:nth-child(odd),
392
+ body.post-type-reply #the-list .status-spam:nth-child(odd),
393
+ #bbp-reply-list .status-trash:nth-child(odd) {
394
  background-color: #fdd;
395
  }
396
 
397
+ body.post-type-forum #the-list .status-pending,
398
+ body.post-type-topic #the-list .status-pending,
399
+ body.post-type-reply #the-list .status-pending {
400
  background-color: #fff2e8;
401
  }
402
 
403
+ body.post-type-forum #the-list .status-pending:nth-child(odd),
404
+ body.post-type-topic #the-list .status-pending:nth-child(odd),
405
+ body.post-type-reply #the-list .status-pending:nth-child(odd) {
406
  background-color: #fff7f1;
407
  }
408
 
409
+ body.post-type-forum #the-list .status-closed td,
410
+ body.post-type-topic #the-list .status-closed td,
411
+ body.post-type-reply #the-list .status-closed td,
412
+ body.post-type-forum #the-list .status-spam td,
413
+ body.post-type-topic #the-list .status-spam td,
414
+ body.post-type-reply #the-list .status-spam td,
415
+ #bbp-reply-list .status-trash td {
416
  color: #999;
417
  }
418
 
419
+ body.post-type-forum #the-list .row-actions .unspam a,
420
+ body.post-type-topic #the-list .row-actions .unspam a,
421
+ body.post-type-reply #the-list .row-actions .unspam a,
422
+ body.post-type-forum #the-list .row-actions .approved a,
423
+ body.post-type-topic #the-list .row-actions .approved a,
424
+ body.post-type-reply #the-list .row-actions .approved a {
425
+ color: #006505;
426
+ }
427
+
428
  /* User Relationships */
429
 
430
  #bbp_topic_engagements_metabox .avatar,
435
 
436
  /* Converter */
437
 
438
+ .bbp-converter-settings-wrap {
439
+ float: right;
440
+ width: 55%;
441
+ }
442
+
443
+ #poststuff.bbp-converter-monitor-wrap {
444
+ float: left;
445
+ width: 43%;
446
+ margin-right: 2%;
447
+ min-width: 200px;
448
+ }
449
+
450
  #bbp-converter-monitor h2 {
451
  position: relative;
452
  }
453
 
454
  #bbp-converter-monitor .inside {
455
  margin-bottom: 0;
456
+ border-bottom: 1px solid #e5e5e5;
457
+ }
458
+
459
+ #bbp-converter-monitor div.actions {
460
+ padding: 10px;
461
+ background: #fafafa;
462
+ clear: both;
463
+ }
464
+
465
+ #bbp-converter-spinner {
466
+ margin: 4px 0;
467
  }
468
 
469
  div.bbp-converter-log,
563
 
564
  button.bbp-db-pass-toggle {
565
  border: none;
566
+ background: transparent;
567
  position: absolute;
568
  left: 3px;
569
  top: 3px;
594
  width: 100%;
595
  }
596
 
597
+ #poststuff.bbp-converter-monitor-wrap,
598
+ .bbp-converter-settings-wrap {
599
+ float: none;
600
+ width: 100%;
601
+ margin: 20px 0;
602
+ }
603
+
604
  button.bbp-db-pass-toggle {
605
  height: 35px;
606
  width: 35px;
includes/admin/assets/css/admin-rtl.min.css CHANGED
@@ -1 +1 @@
1
- #poststuff #bbp_forum_attributes select#parent_id,#poststuff #bbp_reply_attributes select#bbp_forum_id,#poststuff #bbp_reply_attributes select#bbp_reply_to,#poststuff #bbp_topic_attributes select#parent_id{max-width:170px}.bbp-badge{-webkit-transform-origin:top right;transform-origin:top right;-webkit-animation:swoop 16s infinite linear;animation:swoop 16s infinite linear}.bbp-bee{font:400 80px/1 dashicons!important;color:#000;position:absolute;height:60px;width:60px}.bbp-hive{font:400 150px/1 dashicons!important;color:#ccc;position:absolute;height:150px;width:150px;top:0;left:0;display:block}.bbp-bee:before{content:"\f451"}.bbp-hive:before{content:"\f449"}.notice-bbpress{border-right:4px solid #78cd95;padding-right:36px;background-color:#ebffeb;position:relative}.notice-bbpress .bbpress-logo-icon{position:absolute;height:auto;width:auto;padding:7px 9px;top:50%;right:0;transform:translateY(-50%);font:400 24px/1 dashicons!important}.notice-bbpress .bbpress-logo-icon:before{content:"\f477";color:#555}@-webkit-keyframes buzz{0%{left:-2px;top:-1px}25%{left:1px;top:2px}50%{left:-3px;top:-1px}75%{left:2px;top:1px}0%{left:-2px;top:-1px}}@keyframes buzz{0%{left:-2px;top:-1px}25%{left:1px;top:2px}50%{left:-3px;top:-1px}75%{left:2px;top:1px}0%{left:-2px;top:-1px}}@-webkit-keyframes swoop{0%{-webkit-transform:rotate(-95deg);transform:rotate(-95deg)}100%{-webkit-transform:rotate(-455deg);transform:rotate(-455deg)}}@keyframes swoop{0%{-webkit-transform:rotate(-95deg);transform:rotate(-95deg)}100%{-webkit-transform:rotate(-455deg);transform:rotate(-455deg)}}.about-wrap .bbp-badge{position:absolute;left:50px;top:50px;height:25px;width:25px}body.rtl .about-wrap .bbp-badge{left:auto;right:50px}#adminmenu #menu-posts-forum .wp-menu-image:before,#dashboard_right_now a.bbp-glance-forums:before,th .bbp_forums_column:before{content:"\f449"}#adminmenu #menu-posts-topic .wp-menu-image:before,#dashboard_right_now a.bbp-glance-topics:before,th .bbp_topics_column:before{content:"\f450"}#adminmenu #menu-posts-reply .wp-menu-image:before,#dashboard_right_now a.bbp-glance-replies:before,th .bbp_replies_column:before{content:"\f451"}#dashboard_right_now a.bbp-glance-topic-tags:before{content:"\f323"}#dashboard_right_now a.bbp-glance-users:before{content:"\f110"}th .bbp_forums_column,th .bbp_replies_column,th .bbp_topics_column{height:16px;width:16px}th .bbp_forums_column:before,th .bbp_replies_column:before,th .bbp_topics_column:before{font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;right:-4px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}#bbp-dashboard-right-now .table,#bbp-dashboard-right-now .versions,#bbp-dashboard-right-now p.sub{margin:-12px}#bbp-dashboard-right-now .inside{font-size:12px;padding-top:20px;margin-bottom:0}#bbp-dashboard-right-now p.sub{padding:5px 0 15px;color:#8f8f8f;font-size:14px;position:absolute;top:-17px;right:15px}body.rtl #bbp-dashboard-right-now p.sub{left:15px;right:0}#bbp-dashboard-right-now .table{margin:0;padding:0;position:relative}#bbp-dashboard-right-now .table_content{float:right;border-top:#ececec 1px solid;width:45%}body.rtl #bbp-dashboard-right-now .table_content{float:left}#bbp-dashboard-right-now .table_discussion{float:left;border-top:#ececec 1px solid;width:45%}body.rtl #bbp-dashboard-right-now .table_discussion{float:right}#bbp-dashboard-right-now table td{padding:3px 0;white-space:nowrap}#bbp-dashboard-right-now table tr.first td{border-top:none}#bbp-dashboard-right-now td.b{padding-left:6px;text-align:left;font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;font-size:14px;width:1%}body.rtl #bbp-dashboard-right-now td.b{padding-right:6px;padding-left:0}#bbp-dashboard-right-now td.b a{font-size:18px}#bbp-dashboard-right-now td.b a:hover{color:#d54e21}#bbp-dashboard-right-now .t{font-size:12px;padding-left:12px;padding-top:6px;color:#777}body.rtl #bbp-dashboard-right-now .t{padding-right:12px;padding-left:0}#bbp-dashboard-right-now .t a{white-space:nowrap}#bbp-dashboard-right-now .spam{color:red}#bbp-dashboard-right-now .waiting{color:#e66f00}#bbp-dashboard-right-now .approved{color:#0f0}#bbp-dashboard-right-now .versions{padding:6px 10px 12px;clear:both}#bbp-dashboard-right-now .versions .b{font-weight:700}#bbp-dashboard-right-now a.button{float:left;clear:left;position:relative;top:-5px}body.rtl #bbp-dashboard-right-now a.button{float:right;clear:right}body.post-type-forum #minor-publishing,body.post-type-forum #save-post{display:none}body.post-type-forum strong.label,body.post-type-reply strong.label,body.post-type-topic strong.label{display:inline-block;width:60px}.column-bbp_forum_reply_count,.column-bbp_forum_topic_count,.column-bbp_topic_reply_count,.column-bbp_topic_voice_count{width:8%!important}.column-author,.column-bbp_forum_mods,.column-bbp_reply_author,.column-bbp_topic_author{width:10%!important}.column-bbp_reply_forum,.column-bbp_reply_topic,.column-bbp_topic_forum{width:10%!important}.column-bbp_forum_freshness,.column-bbp_topic_freshness{width:10%!important}.column-bbp_forum_created,.column-bbp_reply_created,.column-bbp_topic_created{width:15%!important}.column-bbp_forum_topic_author,.column-bbp_topic_reply_author{width:25%!important}.column-bbp_forum_topic_author .avatar,.column-bbp_topic_reply_author .avatar{float:right;margin-left:10px}#bbp_moderators{width:100%}#bbp_forum_attributes hr{border-style:solid;border-width:1px;border-color:#ccc #ccc #fff #fff}#the-list .status-closed{background-color:#f5f5f5}#the-list .status-closed:nth-child(odd){background-color:#f0f0f0}#the-list .status-spam{background-color:#fee}#the-list .status-spam:nth-child(odd){background-color:#fdd}#the-list .status-pending{background-color:#fff2e8}#the-list .status-pending:nth-child(odd){background-color:#fff7f1}#the-list .status-closed td,#the-list .status-spam td{color:#999}#bbp_topic_engagements_metabox .avatar,#bbp_topic_favorites_metabox .avatar,#bbp_topic_subscriptions_metabox .avatar{margin:3px}#bbp-converter-monitor h2{position:relative}#bbp-converter-monitor .inside{margin-bottom:0}div.bbp-converter-log,div.bbp-converter-warning{padding:5px 5px 5px 0}div.bbp-converter-log.started{height:300px;overflow:auto}div.bbp-converter-log p{margin:0;padding:2px}div.bbp-converter-log p:only-child{float:none;margin-bottom:0}div.bbp-converter-log div{padding:10px;margin:5px;background:#f4f4f4;border:1px solid #ddd}div.bbp-converter-log div code{margin-top:5px;display:block}div.bbp-converter-log .step{text-align:left;font-weight:600}div.bbp-converter-log .output{margin:0 5px}div.bbp-converter-log .mini-step{padding:3px 5px;vertical-align:middle;font-size:8px;font-weight:600;border-radius:6px;background-color:#aaa;color:#fff}#bbp-converter-monitor .bbp-progress-bar{position:absolute;right:0;height:1px;width:0;background-color:#00b9eb;transition-property:width;transition-timing-function:ease-out;transition-duration:1s}#bbp-converter-monitor #bbp-converter-step-percentage{bottom:1px}#bbp-converter-monitor #bbp-converter-total-percentage{bottom:0}#bbp-converter-stop{display:none}#bbp-converter-status{font-weight:400;font-size:12px;color:#aaa;display:block;margin-top:2px}.bbp-converter-db-password-wrapper{display:inline-block;position:relative}.bbp-converter-db-pass::-webkit-credentials-auto-fill-button{display:none;visibility:hidden;pointer-events:none;position:absolute;left:0}button.bbp-db-pass-toggle{border:none;background:#fff;position:absolute;left:3px;top:3px;padding:0;margin:0;cursor:pointer;color:#aaa;height:25px;width:25px;font:400 20px/1 dashicons!important}button.bbp-db-pass-toggle:hover{color:#888}button.bbp-db-pass-toggle.text:after{content:"\f530"}button.bbp-db-pass-toggle.password:after{content:"\f177"}@media screen and (max-width:782px){.bbp-converter-db-password-wrapper{width:100%}button.bbp-db-pass-toggle{height:35px;width:35px;font:400 20px/1 dashicons!important}}td.bbp-tool-title strong{display:block}
1
+ #poststuff #bbp_forum_attributes select#parent_id,#poststuff #bbp_reply_attributes select#bbp_forum_id,#poststuff #bbp_reply_attributes select#bbp_reply_to,#poststuff #bbp_topic_attributes select#parent_id{max-width:170px}.bbp-badge{transform-origin:top right;animation:swoop 16s infinite linear}.bbp-bee{font:400 80px/1 dashicons!important;color:#000;position:absolute;height:60px;width:60px}.bbp-hive{font:400 150px/1 dashicons!important;color:#ccc;position:absolute;height:150px;width:150px;top:0;left:0;display:block}.bbp-bee:before{content:"\f451"}.bbp-hive:before{content:"\f449"}.notice-bbpress{border-right:4px solid #78cd95;padding-right:36px;background-color:#ebffeb;position:relative}.notice-bbpress .bbpress-logo-icon{position:absolute;height:auto;width:auto;padding:7px 9px;top:50%;right:0;transform:translateY(-50%);font:400 24px/1 dashicons!important}.notice-bbpress .bbpress-logo-icon:before{content:"\f477";color:#555}@keyframes buzz{0%{left:-2px;top:-1px}25%{left:1px;top:2px}50%{left:-3px;top:-1px}75%{left:2px;top:1px}0%{left:-2px;top:-1px}}@keyframes swoop{0%{transform:rotate(-95deg)}100%{transform:rotate(-455deg)}}.about-wrap .bbp-badge{position:absolute;left:50px;top:50px;height:25px;width:25px}body.rtl .about-wrap .bbp-badge{left:auto;right:50px}#adminmenu #menu-posts-forum .wp-menu-image:before,#dashboard_right_now a.bbp-glance-forums:before,th .bbp_forums_column:before{content:"\f449"}#adminmenu #menu-posts-topic .wp-menu-image:before,#dashboard_right_now a.bbp-glance-topics:before,th .bbp_topics_column:before{content:"\f450"}#adminmenu #menu-posts-reply .wp-menu-image:before,#dashboard_right_now a.bbp-glance-replies:before,th .bbp_replies_column:before{content:"\f451"}#dashboard_right_now a.bbp-glance-topic-tags:before{content:"\f323"}#dashboard_right_now a.bbp-glance-users:before{content:"\f110"}th .bbp_forums_column,th .bbp_replies_column,th .bbp_topics_column{height:16px;width:16px}th .bbp_forums_column:before,th .bbp_replies_column:before,th .bbp_topics_column:before{font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;right:-4px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}#bbp-dashboard-right-now .table,#bbp-dashboard-right-now .versions,#bbp-dashboard-right-now p.sub{margin:-12px}#bbp-dashboard-right-now .inside{font-size:12px;padding-top:20px;margin-bottom:0}#bbp-dashboard-right-now p.sub{padding:5px 0 15px;color:#8f8f8f;font-size:14px;position:absolute;top:-17px;right:15px}body.rtl #bbp-dashboard-right-now p.sub{left:15px;right:0}#bbp-dashboard-right-now .table{margin:0;padding:0;position:relative}#bbp-dashboard-right-now .table_content{float:right;border-top:#ececec 1px solid;width:45%}body.rtl #bbp-dashboard-right-now .table_content{float:left}#bbp-dashboard-right-now .table_discussion{float:left;border-top:#ececec 1px solid;width:45%}body.rtl #bbp-dashboard-right-now .table_discussion{float:right}#bbp-dashboard-right-now table td{padding:3px 0;white-space:nowrap}#bbp-dashboard-right-now table tr.first td{border-top:none}#bbp-dashboard-right-now td.b{padding-left:6px;text-align:left;font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;font-size:14px;width:1%}body.rtl #bbp-dashboard-right-now td.b{padding-right:6px;padding-left:0}#bbp-dashboard-right-now td.b a{font-size:18px}#bbp-dashboard-right-now td.b a:hover{color:#d54e21}#bbp-dashboard-right-now .t{font-size:12px;padding-left:12px;padding-top:6px;color:#777}body.rtl #bbp-dashboard-right-now .t{padding-right:12px;padding-left:0}#bbp-dashboard-right-now .t a{white-space:nowrap}#bbp-dashboard-right-now .spam{color:red}#bbp-dashboard-right-now .waiting{color:#e66f00}#bbp-dashboard-right-now .approved{color:#0f0}#bbp-dashboard-right-now .versions{padding:6px 10px 12px;clear:both}#bbp-dashboard-right-now .versions .b{font-weight:700}#bbp-dashboard-right-now a.button{float:left;clear:left;position:relative;top:-5px}body.rtl #bbp-dashboard-right-now a.button{float:right;clear:right}body.post-type-forum #minor-publishing,body.post-type-forum #save-post{display:none}body.post-type-forum strong.label,body.post-type-reply strong.label,body.post-type-topic strong.label{display:inline-block;width:60px}.column-bbp_forum_reply_count,.column-bbp_forum_topic_count,.column-bbp_topic_reply_count,.column-bbp_topic_voice_count{width:8%!important}.column-author,.column-bbp_forum_mods,.column-bbp_reply_author,.column-bbp_topic_author{width:10%!important}.column-bbp_reply_forum,.column-bbp_reply_topic,.column-bbp_topic_forum{width:10%!important}.column-bbp_forum_freshness,.column-bbp_topic_freshness{width:10%!important}.column-bbp_forum_created,.column-bbp_reply_created,.column-bbp_topic_created,.column-bbp_user_role{width:15%!important}.column-bbp_forum_topic_author,.column-bbp_topic_reply_author{width:25%!important}.column-bbp_forum_topic_author .avatar,.column-bbp_topic_reply_author .avatar{float:right;margin-left:10px}#bbp_moderators{width:100%}#bbp_forum_attributes hr{border-style:solid;border-width:1px;border-color:#ccc #ccc #fff #fff}body.post-type-forum #the-list .status-closed,body.post-type-reply #the-list .status-closed,body.post-type-topic #the-list .status-closed{background-color:#f5f5f5}body.post-type-forum #the-list .status-closed:nth-child(odd),body.post-type-reply #the-list .status-closed:nth-child(odd),body.post-type-topic #the-list .status-closed:nth-child(odd){background-color:#f0f0f0}#bbp-reply-list .status-trash,body.post-type-forum #the-list .status-spam,body.post-type-reply #the-list .status-spam,body.post-type-topic #the-list .status-spam{background-color:#fee}#bbp-reply-list .status-trash:nth-child(odd),body.post-type-forum #the-list .status-spam:nth-child(odd),body.post-type-reply #the-list .status-spam:nth-child(odd),body.post-type-topic #the-list .status-spam:nth-child(odd){background-color:#fdd}body.post-type-forum #the-list .status-pending,body.post-type-reply #the-list .status-pending,body.post-type-topic #the-list .status-pending{background-color:#fff2e8}body.post-type-forum #the-list .status-pending:nth-child(odd),body.post-type-reply #the-list .status-pending:nth-child(odd),body.post-type-topic #the-list .status-pending:nth-child(odd){background-color:#fff7f1}#bbp-reply-list .status-trash td,body.post-type-forum #the-list .status-closed td,body.post-type-forum #the-list .status-spam td,body.post-type-reply #the-list .status-closed td,body.post-type-reply #the-list .status-spam td,body.post-type-topic #the-list .status-closed td,body.post-type-topic #the-list .status-spam td{color:#999}body.post-type-forum #the-list .row-actions .approved a,body.post-type-forum #the-list .row-actions .unspam a,body.post-type-reply #the-list .row-actions .approved a,body.post-type-reply #the-list .row-actions .unspam a,body.post-type-topic #the-list .row-actions .approved a,body.post-type-topic #the-list .row-actions .unspam a{color:#006505}#bbp_topic_engagements_metabox .avatar,#bbp_topic_favorites_metabox .avatar,#bbp_topic_subscriptions_metabox .avatar{margin:3px}.bbp-converter-settings-wrap{float:right;width:55%}#poststuff.bbp-converter-monitor-wrap{float:left;width:43%;margin-right:2%;min-width:200px}#bbp-converter-monitor h2{position:relative}#bbp-converter-monitor .inside{margin-bottom:0;border-bottom:1px solid #e5e5e5}#bbp-converter-monitor div.actions{padding:10px;background:#fafafa;clear:both}#bbp-converter-spinner{margin:4px 0}div.bbp-converter-log,div.bbp-converter-warning{padding:5px 5px 5px 0}div.bbp-converter-log.started{height:300px;overflow:auto}div.bbp-converter-log p{margin:0;padding:2px}div.bbp-converter-log p:only-child{float:none;margin-bottom:0}div.bbp-converter-log div{padding:10px;margin:5px;background:#f4f4f4;border:1px solid #ddd}div.bbp-converter-log div code{margin-top:5px;display:block}div.bbp-converter-log .step{text-align:left;font-weight:600}div.bbp-converter-log .output{margin:0 5px}div.bbp-converter-log .mini-step{padding:3px 5px;vertical-align:middle;font-size:8px;font-weight:600;border-radius:6px;background-color:#aaa;color:#fff}#bbp-converter-monitor .bbp-progress-bar{position:absolute;right:0;height:1px;width:0;background-color:#00b9eb;transition-property:width;transition-timing-function:ease-out;transition-duration:1s}#bbp-converter-monitor #bbp-converter-step-percentage{bottom:1px}#bbp-converter-monitor #bbp-converter-total-percentage{bottom:0}#bbp-converter-stop{display:none}#bbp-converter-status{font-weight:400;font-size:12px;color:#aaa;display:block;margin-top:2px}.bbp-converter-db-password-wrapper{display:inline-block;position:relative}.bbp-converter-db-pass::-webkit-credentials-auto-fill-button{display:none;visibility:hidden;pointer-events:none;position:absolute;left:0}button.bbp-db-pass-toggle{border:none;background:0 0;position:absolute;left:3px;top:3px;padding:0;margin:0;cursor:pointer;color:#aaa;height:25px;width:25px;font:400 20px/1 dashicons!important}button.bbp-db-pass-toggle:hover{color:#888}button.bbp-db-pass-toggle.text:after{content:"\f530"}button.bbp-db-pass-toggle.password:after{content:"\f177"}@media screen and (max-width:782px){.bbp-converter-db-password-wrapper{width:100%}#poststuff.bbp-converter-monitor-wrap,.bbp-converter-settings-wrap{float:none;width:100%;margin:20px 0}button.bbp-db-pass-toggle{height:35px;width:35px;font:400 20px/1 dashicons!important}}td.bbp-tool-title strong{display:block}
includes/admin/assets/css/admin.css CHANGED
@@ -10,9 +10,7 @@
10
  /* Version Badge */
11
 
12
  .bbp-badge {
13
- -webkit-transform-origin: top left;
14
  transform-origin: top left;
15
- -webkit-animation: swoop 16s infinite linear;
16
  animation: swoop 16s infinite linear;
17
  }
18
 
@@ -66,34 +64,6 @@
66
  color: #555;
67
  }
68
 
69
- @-webkit-keyframes buzz {
70
-
71
- 0% {
72
- right: -2px;
73
- top: -1px;
74
- }
75
-
76
- 25% {
77
- right: 1px;
78
- top: 2px;
79
- }
80
-
81
- 50% {
82
- right: -3px;
83
- top: -1px;
84
- }
85
-
86
- 75% {
87
- right: 2px;
88
- top: 1px;
89
- }
90
-
91
- 0% {
92
- right: -2px;
93
- top: -1px;
94
- }
95
- }
96
-
97
  @keyframes buzz {
98
 
99
  0% {
@@ -122,28 +92,13 @@
122
  }
123
  }
124
 
125
- @-webkit-keyframes swoop {
126
-
127
- 0% {
128
- -webkit-transform: rotate(95deg);
129
- transform: rotate(95deg);
130
- }
131
-
132
- 100% {
133
- -webkit-transform: rotate(455deg);
134
- transform: rotate(455deg);
135
- }
136
- }
137
-
138
  @keyframes swoop {
139
 
140
  0% {
141
- -webkit-transform: rotate(95deg);
142
  transform: rotate(95deg);
143
  }
144
 
145
  100% {
146
- -webkit-transform: rotate(455deg);
147
  transform: rotate(455deg);
148
  }
149
  }
@@ -385,6 +340,7 @@ body.post-type-reply strong.label {
385
  width: 10% !important;
386
  }
387
 
 
388
  .column-bbp_forum_created,
389
  .column-bbp_topic_created,
390
  .column-bbp_reply_created {
@@ -412,35 +368,63 @@ body.post-type-reply strong.label {
412
  border-color: #ccc #fff #fff #ccc;
413
  }
414
 
415
- #the-list .status-closed {
 
 
416
  background-color: #f5f5f5;
417
  }
418
 
419
- #the-list .status-closed:nth-child(odd) {
 
 
420
  background-color: #f0f0f0;
421
  }
422
 
423
- #the-list .status-spam {
 
 
 
424
  background-color: #fee;
425
  }
426
 
427
- #the-list .status-spam:nth-child(odd) {
 
 
 
428
  background-color: #fdd;
429
  }
430
 
431
- #the-list .status-pending {
 
 
432
  background-color: #fff2e8;
433
  }
434
 
435
- #the-list .status-pending:nth-child(odd) {
 
 
436
  background-color: #fff7f1;
437
  }
438
 
439
- #the-list .status-closed td,
440
- #the-list .status-spam td {
 
 
 
 
 
441
  color: #999;
442
  }
443
 
 
 
 
 
 
 
 
 
 
444
  /* User Relationships */
445
 
446
  #bbp_topic_engagements_metabox .avatar,
@@ -451,12 +435,35 @@ body.post-type-reply strong.label {
451
 
452
  /* Converter */
453
 
 
 
 
 
 
 
 
 
 
 
 
 
454
  #bbp-converter-monitor h2 {
455
  position: relative;
456
  }
457
 
458
  #bbp-converter-monitor .inside {
459
  margin-bottom: 0;
 
 
 
 
 
 
 
 
 
 
 
460
  }
461
 
462
  div.bbp-converter-log,
@@ -556,7 +563,7 @@ div.bbp-converter-log .mini-step {
556
 
557
  button.bbp-db-pass-toggle {
558
  border: none;
559
- background: #fff;
560
  position: absolute;
561
  right: 3px;
562
  top: 3px;
@@ -587,6 +594,13 @@ button.bbp-db-pass-toggle.password:after {
587
  width: 100%;
588
  }
589
 
 
 
 
 
 
 
 
590
  button.bbp-db-pass-toggle {
591
  height: 35px;
592
  width: 35px;
10
  /* Version Badge */
11
 
12
  .bbp-badge {
 
13
  transform-origin: top left;
 
14
  animation: swoop 16s infinite linear;
15
  }
16
 
64
  color: #555;
65
  }
66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  @keyframes buzz {
68
 
69
  0% {
92
  }
93
  }
94
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  @keyframes swoop {
96
 
97
  0% {
 
98
  transform: rotate(95deg);
99
  }
100
 
101
  100% {
 
102
  transform: rotate(455deg);
103
  }
104
  }
340
  width: 10% !important;
341
  }
342
 
343
+ .column-bbp_user_role,
344
  .column-bbp_forum_created,
345
  .column-bbp_topic_created,
346
  .column-bbp_reply_created {
368
  border-color: #ccc #fff #fff #ccc;
369
  }
370
 
371
+ body.post-type-forum #the-list .status-closed,
372
+ body.post-type-topic #the-list .status-closed,
373
+ body.post-type-reply #the-list .status-closed {
374
  background-color: #f5f5f5;
375
  }
376
 
377
+ body.post-type-forum #the-list .status-closed:nth-child(odd),
378
+ body.post-type-topic #the-list .status-closed:nth-child(odd),
379
+ body.post-type-reply #the-list .status-closed:nth-child(odd) {
380
  background-color: #f0f0f0;
381
  }
382
 
383
+ body.post-type-forum #the-list .status-spam,
384
+ body.post-type-topic #the-list .status-spam,
385
+ body.post-type-reply #the-list .status-spam,
386
+ #bbp-reply-list .status-trash {
387
  background-color: #fee;
388
  }
389
 
390
+ body.post-type-forum #the-list .status-spam:nth-child(odd),
391
+ body.post-type-topic #the-list .status-spam:nth-child(odd),
392
+ body.post-type-reply #the-list .status-spam:nth-child(odd),
393
+ #bbp-reply-list .status-trash:nth-child(odd) {
394
  background-color: #fdd;
395
  }
396
 
397
+ body.post-type-forum #the-list .status-pending,
398
+ body.post-type-topic #the-list .status-pending,
399
+ body.post-type-reply #the-list .status-pending {
400
  background-color: #fff2e8;
401
  }
402
 
403
+ body.post-type-forum #the-list .status-pending:nth-child(odd),
404
+ body.post-type-topic #the-list .status-pending:nth-child(odd),
405
+ body.post-type-reply #the-list .status-pending:nth-child(odd) {
406
  background-color: #fff7f1;
407
  }
408
 
409
+ body.post-type-forum #the-list .status-closed td,
410
+ body.post-type-topic #the-list .status-closed td,
411
+ body.post-type-reply #the-list .status-closed td,
412
+ body.post-type-forum #the-list .status-spam td,
413
+ body.post-type-topic #the-list .status-spam td,
414
+ body.post-type-reply #the-list .status-spam td,
415
+ #bbp-reply-list .status-trash td {
416
  color: #999;
417
  }
418
 
419
+ body.post-type-forum #the-list .row-actions .unspam a,
420
+ body.post-type-topic #the-list .row-actions .unspam a,
421
+ body.post-type-reply #the-list .row-actions .unspam a,
422
+ body.post-type-forum #the-list .row-actions .approved a,
423
+ body.post-type-topic #the-list .row-actions .approved a,
424
+ body.post-type-reply #the-list .row-actions .approved a {
425
+ color: #006505;
426
+ }
427
+
428
  /* User Relationships */
429
 
430
  #bbp_topic_engagements_metabox .avatar,
435
 
436
  /* Converter */
437
 
438
+ .bbp-converter-settings-wrap {
439
+ float: left;
440
+ width: 55%;
441
+ }
442
+
443
+ #poststuff.bbp-converter-monitor-wrap {
444
+ float: right;
445
+ width: 43%;
446
+ margin-left: 2%;
447
+ min-width: 200px;
448
+ }
449
+
450
  #bbp-converter-monitor h2 {
451
  position: relative;
452
  }
453
 
454
  #bbp-converter-monitor .inside {
455
  margin-bottom: 0;
456
+ border-bottom: 1px solid #e5e5e5;
457
+ }
458
+
459
+ #bbp-converter-monitor div.actions {
460
+ padding: 10px;
461
+ background: #fafafa;
462
+ clear: both;
463
+ }
464
+
465
+ #bbp-converter-spinner {
466
+ margin: 4px 0;
467
  }
468
 
469
  div.bbp-converter-log,
563
 
564
  button.bbp-db-pass-toggle {
565
  border: none;
566
+ background: transparent;
567
  position: absolute;
568
  right: 3px;
569
  top: 3px;
594
  width: 100%;
595
  }
596
 
597
+ #poststuff.bbp-converter-monitor-wrap,
598
+ .bbp-converter-settings-wrap {
599
+ float: none;
600
+ width: 100%;
601
+ margin: 20px 0;
602
+ }
603
+
604
  button.bbp-db-pass-toggle {
605
  height: 35px;
606
  width: 35px;
includes/admin/assets/css/admin.min.css CHANGED
@@ -1 +1 @@
1
- #poststuff #bbp_forum_attributes select#parent_id,#poststuff #bbp_reply_attributes select#bbp_forum_id,#poststuff #bbp_reply_attributes select#bbp_reply_to,#poststuff #bbp_topic_attributes select#parent_id{max-width:170px}.bbp-badge{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation:swoop 16s infinite linear;animation:swoop 16s infinite linear}.bbp-bee{font:400 80px/1 dashicons!important;color:#000;position:absolute;height:60px;width:60px}.bbp-hive{font:400 150px/1 dashicons!important;color:#ccc;position:absolute;height:150px;width:150px;top:0;right:0;display:block}.bbp-bee:before{content:"\f451"}.bbp-hive:before{content:"\f449"}.notice-bbpress{border-left:4px solid #78cd95;padding-left:36px;background-color:#ebffeb;position:relative}.notice-bbpress .bbpress-logo-icon{position:absolute;height:auto;width:auto;padding:7px 9px;top:50%;left:0;transform:translateY(-50%);font:400 24px/1 dashicons!important}.notice-bbpress .bbpress-logo-icon:before{content:"\f477";color:#555}@-webkit-keyframes buzz{0%{right:-2px;top:-1px}25%{right:1px;top:2px}50%{right:-3px;top:-1px}75%{right:2px;top:1px}0%{right:-2px;top:-1px}}@keyframes buzz{0%{right:-2px;top:-1px}25%{right:1px;top:2px}50%{right:-3px;top:-1px}75%{right:2px;top:1px}0%{right:-2px;top:-1px}}@-webkit-keyframes swoop{0%{-webkit-transform:rotate(95deg);transform:rotate(95deg)}100%{-webkit-transform:rotate(455deg);transform:rotate(455deg)}}@keyframes swoop{0%{-webkit-transform:rotate(95deg);transform:rotate(95deg)}100%{-webkit-transform:rotate(455deg);transform:rotate(455deg)}}.about-wrap .bbp-badge{position:absolute;right:50px;top:50px;height:25px;width:25px}body.rtl .about-wrap .bbp-badge{right:auto;left:50px}#adminmenu #menu-posts-forum .wp-menu-image:before,#dashboard_right_now a.bbp-glance-forums:before,th .bbp_forums_column:before{content:"\f449"}#adminmenu #menu-posts-topic .wp-menu-image:before,#dashboard_right_now a.bbp-glance-topics:before,th .bbp_topics_column:before{content:"\f450"}#adminmenu #menu-posts-reply .wp-menu-image:before,#dashboard_right_now a.bbp-glance-replies:before,th .bbp_replies_column:before{content:"\f451"}#dashboard_right_now a.bbp-glance-topic-tags:before{content:"\f323"}#dashboard_right_now a.bbp-glance-users:before{content:"\f110"}th .bbp_forums_column,th .bbp_replies_column,th .bbp_topics_column{height:16px;width:16px}th .bbp_forums_column:before,th .bbp_replies_column:before,th .bbp_topics_column:before{font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;left:-4px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}#bbp-dashboard-right-now .table,#bbp-dashboard-right-now .versions,#bbp-dashboard-right-now p.sub{margin:-12px}#bbp-dashboard-right-now .inside{font-size:12px;padding-top:20px;margin-bottom:0}#bbp-dashboard-right-now p.sub{padding:5px 0 15px;color:#8f8f8f;font-size:14px;position:absolute;top:-17px;left:15px}body.rtl #bbp-dashboard-right-now p.sub{right:15px;left:0}#bbp-dashboard-right-now .table{margin:0;padding:0;position:relative}#bbp-dashboard-right-now .table_content{float:left;border-top:#ececec 1px solid;width:45%}body.rtl #bbp-dashboard-right-now .table_content{float:right}#bbp-dashboard-right-now .table_discussion{float:right;border-top:#ececec 1px solid;width:45%}body.rtl #bbp-dashboard-right-now .table_discussion{float:left}#bbp-dashboard-right-now table td{padding:3px 0;white-space:nowrap}#bbp-dashboard-right-now table tr.first td{border-top:none}#bbp-dashboard-right-now td.b{padding-right:6px;text-align:right;font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;font-size:14px;width:1%}body.rtl #bbp-dashboard-right-now td.b{padding-left:6px;padding-right:0}#bbp-dashboard-right-now td.b a{font-size:18px}#bbp-dashboard-right-now td.b a:hover{color:#d54e21}#bbp-dashboard-right-now .t{font-size:12px;padding-right:12px;padding-top:6px;color:#777}body.rtl #bbp-dashboard-right-now .t{padding-left:12px;padding-right:0}#bbp-dashboard-right-now .t a{white-space:nowrap}#bbp-dashboard-right-now .spam{color:red}#bbp-dashboard-right-now .waiting{color:#e66f00}#bbp-dashboard-right-now .approved{color:#0f0}#bbp-dashboard-right-now .versions{padding:6px 10px 12px;clear:both}#bbp-dashboard-right-now .versions .b{font-weight:700}#bbp-dashboard-right-now a.button{float:right;clear:right;position:relative;top:-5px}body.rtl #bbp-dashboard-right-now a.button{float:left;clear:left}body.post-type-forum #minor-publishing,body.post-type-forum #save-post{display:none}body.post-type-forum strong.label,body.post-type-reply strong.label,body.post-type-topic strong.label{display:inline-block;width:60px}.column-bbp_forum_reply_count,.column-bbp_forum_topic_count,.column-bbp_topic_reply_count,.column-bbp_topic_voice_count{width:8%!important}.column-author,.column-bbp_forum_mods,.column-bbp_reply_author,.column-bbp_topic_author{width:10%!important}.column-bbp_reply_forum,.column-bbp_reply_topic,.column-bbp_topic_forum{width:10%!important}.column-bbp_forum_freshness,.column-bbp_topic_freshness{width:10%!important}.column-bbp_forum_created,.column-bbp_reply_created,.column-bbp_topic_created{width:15%!important}.column-bbp_forum_topic_author,.column-bbp_topic_reply_author{width:25%!important}.column-bbp_forum_topic_author .avatar,.column-bbp_topic_reply_author .avatar{float:left;margin-right:10px}#bbp_moderators{width:100%}#bbp_forum_attributes hr{border-style:solid;border-width:1px;border-color:#ccc #fff #fff #ccc}#the-list .status-closed{background-color:#f5f5f5}#the-list .status-closed:nth-child(odd){background-color:#f0f0f0}#the-list .status-spam{background-color:#fee}#the-list .status-spam:nth-child(odd){background-color:#fdd}#the-list .status-pending{background-color:#fff2e8}#the-list .status-pending:nth-child(odd){background-color:#fff7f1}#the-list .status-closed td,#the-list .status-spam td{color:#999}#bbp_topic_engagements_metabox .avatar,#bbp_topic_favorites_metabox .avatar,#bbp_topic_subscriptions_metabox .avatar{margin:3px}#bbp-converter-monitor h2{position:relative}#bbp-converter-monitor .inside{margin-bottom:0}div.bbp-converter-log,div.bbp-converter-warning{padding:5px 0 5px 5px}div.bbp-converter-log.started{height:300px;overflow:auto}div.bbp-converter-log p{margin:0;padding:2px}div.bbp-converter-log p:only-child{float:none;margin-bottom:0}div.bbp-converter-log div{padding:10px;margin:5px;background:#f4f4f4;border:1px solid #ddd}div.bbp-converter-log div code{margin-top:5px;display:block}div.bbp-converter-log .step{text-align:right;font-weight:600}div.bbp-converter-log .output{margin:0 5px}div.bbp-converter-log .mini-step{padding:3px 5px;vertical-align:middle;font-size:8px;font-weight:600;border-radius:6px;background-color:#aaa;color:#fff}#bbp-converter-monitor .bbp-progress-bar{position:absolute;left:0;height:1px;width:0;background-color:#00b9eb;transition-property:width;transition-timing-function:ease-out;transition-duration:1s}#bbp-converter-monitor #bbp-converter-step-percentage{bottom:1px}#bbp-converter-monitor #bbp-converter-total-percentage{bottom:0}#bbp-converter-stop{display:none}#bbp-converter-status{font-weight:400;font-size:12px;color:#aaa;display:block;margin-top:2px}.bbp-converter-db-password-wrapper{display:inline-block;position:relative}.bbp-converter-db-pass::-webkit-credentials-auto-fill-button{display:none;visibility:hidden;pointer-events:none;position:absolute;right:0}button.bbp-db-pass-toggle{border:none;background:#fff;position:absolute;right:3px;top:3px;padding:0;margin:0;cursor:pointer;color:#aaa;height:25px;width:25px;font:400 20px/1 dashicons!important}button.bbp-db-pass-toggle:hover{color:#888}button.bbp-db-pass-toggle.text:after{content:"\f530"}button.bbp-db-pass-toggle.password:after{content:"\f177"}@media screen and (max-width:782px){.bbp-converter-db-password-wrapper{width:100%}button.bbp-db-pass-toggle{height:35px;width:35px;font:400 20px/1 dashicons!important}}td.bbp-tool-title strong{display:block}
1
+ #poststuff #bbp_forum_attributes select#parent_id,#poststuff #bbp_reply_attributes select#bbp_forum_id,#poststuff #bbp_reply_attributes select#bbp_reply_to,#poststuff #bbp_topic_attributes select#parent_id{max-width:170px}.bbp-badge{transform-origin:top left;animation:swoop 16s infinite linear}.bbp-bee{font:400 80px/1 dashicons!important;color:#000;position:absolute;height:60px;width:60px}.bbp-hive{font:400 150px/1 dashicons!important;color:#ccc;position:absolute;height:150px;width:150px;top:0;right:0;display:block}.bbp-bee:before{content:"\f451"}.bbp-hive:before{content:"\f449"}.notice-bbpress{border-left:4px solid #78cd95;padding-left:36px;background-color:#ebffeb;position:relative}.notice-bbpress .bbpress-logo-icon{position:absolute;height:auto;width:auto;padding:7px 9px;top:50%;left:0;transform:translateY(-50%);font:400 24px/1 dashicons!important}.notice-bbpress .bbpress-logo-icon:before{content:"\f477";color:#555}@keyframes buzz{0%{right:-2px;top:-1px}25%{right:1px;top:2px}50%{right:-3px;top:-1px}75%{right:2px;top:1px}0%{right:-2px;top:-1px}}@keyframes swoop{0%{transform:rotate(95deg)}100%{transform:rotate(455deg)}}.about-wrap .bbp-badge{position:absolute;right:50px;top:50px;height:25px;width:25px}body.rtl .about-wrap .bbp-badge{right:auto;left:50px}#adminmenu #menu-posts-forum .wp-menu-image:before,#dashboard_right_now a.bbp-glance-forums:before,th .bbp_forums_column:before{content:"\f449"}#adminmenu #menu-posts-topic .wp-menu-image:before,#dashboard_right_now a.bbp-glance-topics:before,th .bbp_topics_column:before{content:"\f450"}#adminmenu #menu-posts-reply .wp-menu-image:before,#dashboard_right_now a.bbp-glance-replies:before,th .bbp_replies_column:before{content:"\f451"}#dashboard_right_now a.bbp-glance-topic-tags:before{content:"\f323"}#dashboard_right_now a.bbp-glance-users:before{content:"\f110"}th .bbp_forums_column,th .bbp_replies_column,th .bbp_topics_column{height:16px;width:16px}th .bbp_forums_column:before,th .bbp_replies_column:before,th .bbp_topics_column:before{font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;left:-4px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}#bbp-dashboard-right-now .table,#bbp-dashboard-right-now .versions,#bbp-dashboard-right-now p.sub{margin:-12px}#bbp-dashboard-right-now .inside{font-size:12px;padding-top:20px;margin-bottom:0}#bbp-dashboard-right-now p.sub{padding:5px 0 15px;color:#8f8f8f;font-size:14px;position:absolute;top:-17px;left:15px}body.rtl #bbp-dashboard-right-now p.sub{right:15px;left:0}#bbp-dashboard-right-now .table{margin:0;padding:0;position:relative}#bbp-dashboard-right-now .table_content{float:left;border-top:#ececec 1px solid;width:45%}body.rtl #bbp-dashboard-right-now .table_content{float:right}#bbp-dashboard-right-now .table_discussion{float:right;border-top:#ececec 1px solid;width:45%}body.rtl #bbp-dashboard-right-now .table_discussion{float:left}#bbp-dashboard-right-now table td{padding:3px 0;white-space:nowrap}#bbp-dashboard-right-now table tr.first td{border-top:none}#bbp-dashboard-right-now td.b{padding-right:6px;text-align:right;font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;font-size:14px;width:1%}body.rtl #bbp-dashboard-right-now td.b{padding-left:6px;padding-right:0}#bbp-dashboard-right-now td.b a{font-size:18px}#bbp-dashboard-right-now td.b a:hover{color:#d54e21}#bbp-dashboard-right-now .t{font-size:12px;padding-right:12px;padding-top:6px;color:#777}body.rtl #bbp-dashboard-right-now .t{padding-left:12px;padding-right:0}#bbp-dashboard-right-now .t a{white-space:nowrap}#bbp-dashboard-right-now .spam{color:red}#bbp-dashboard-right-now .waiting{color:#e66f00}#bbp-dashboard-right-now .approved{color:#0f0}#bbp-dashboard-right-now .versions{padding:6px 10px 12px;clear:both}#bbp-dashboard-right-now .versions .b{font-weight:700}#bbp-dashboard-right-now a.button{float:right;clear:right;position:relative;top:-5px}body.rtl #bbp-dashboard-right-now a.button{float:left;clear:left}body.post-type-forum #minor-publishing,body.post-type-forum #save-post{display:none}body.post-type-forum strong.label,body.post-type-reply strong.label,body.post-type-topic strong.label{display:inline-block;width:60px}.column-bbp_forum_reply_count,.column-bbp_forum_topic_count,.column-bbp_topic_reply_count,.column-bbp_topic_voice_count{width:8%!important}.column-author,.column-bbp_forum_mods,.column-bbp_reply_author,.column-bbp_topic_author{width:10%!important}.column-bbp_reply_forum,.column-bbp_reply_topic,.column-bbp_topic_forum{width:10%!important}.column-bbp_forum_freshness,.column-bbp_topic_freshness{width:10%!important}.column-bbp_forum_created,.column-bbp_reply_created,.column-bbp_topic_created,.column-bbp_user_role{width:15%!important}.column-bbp_forum_topic_author,.column-bbp_topic_reply_author{width:25%!important}.column-bbp_forum_topic_author .avatar,.column-bbp_topic_reply_author .avatar{float:left;margin-right:10px}#bbp_moderators{width:100%}#bbp_forum_attributes hr{border-style:solid;border-width:1px;border-color:#ccc #fff #fff #ccc}body.post-type-forum #the-list .status-closed,body.post-type-reply #the-list .status-closed,body.post-type-topic #the-list .status-closed{background-color:#f5f5f5}body.post-type-forum #the-list .status-closed:nth-child(odd),body.post-type-reply #the-list .status-closed:nth-child(odd),body.post-type-topic #the-list .status-closed:nth-child(odd){background-color:#f0f0f0}#bbp-reply-list .status-trash,body.post-type-forum #the-list .status-spam,body.post-type-reply #the-list .status-spam,body.post-type-topic #the-list .status-spam{background-color:#fee}#bbp-reply-list .status-trash:nth-child(odd),body.post-type-forum #the-list .status-spam:nth-child(odd),body.post-type-reply #the-list .status-spam:nth-child(odd),body.post-type-topic #the-list .status-spam:nth-child(odd){background-color:#fdd}body.post-type-forum #the-list .status-pending,body.post-type-reply #the-list .status-pending,body.post-type-topic #the-list .status-pending{background-color:#fff2e8}body.post-type-forum #the-list .status-pending:nth-child(odd),body.post-type-reply #the-list .status-pending:nth-child(odd),body.post-type-topic #the-list .status-pending:nth-child(odd){background-color:#fff7f1}#bbp-reply-list .status-trash td,body.post-type-forum #the-list .status-closed td,body.post-type-forum #the-list .status-spam td,body.post-type-reply #the-list .status-closed td,body.post-type-reply #the-list .status-spam td,body.post-type-topic #the-list .status-closed td,body.post-type-topic #the-list .status-spam td{color:#999}body.post-type-forum #the-list .row-actions .approved a,body.post-type-forum #the-list .row-actions .unspam a,body.post-type-reply #the-list .row-actions .approved a,body.post-type-reply #the-list .row-actions .unspam a,body.post-type-topic #the-list .row-actions .approved a,body.post-type-topic #the-list .row-actions .unspam a{color:#006505}#bbp_topic_engagements_metabox .avatar,#bbp_topic_favorites_metabox .avatar,#bbp_topic_subscriptions_metabox .avatar{margin:3px}.bbp-converter-settings-wrap{float:left;width:55%}#poststuff.bbp-converter-monitor-wrap{float:right;width:43%;margin-left:2%;min-width:200px}#bbp-converter-monitor h2{position:relative}#bbp-converter-monitor .inside{margin-bottom:0;border-bottom:1px solid #e5e5e5}#bbp-converter-monitor div.actions{padding:10px;background:#fafafa;clear:both}#bbp-converter-spinner{margin:4px 0}div.bbp-converter-log,div.bbp-converter-warning{padding:5px 0 5px 5px}div.bbp-converter-log.started{height:300px;overflow:auto}div.bbp-converter-log p{margin:0;padding:2px}div.bbp-converter-log p:only-child{float:none;margin-bottom:0}div.bbp-converter-log div{padding:10px;margin:5px;background:#f4f4f4;border:1px solid #ddd}div.bbp-converter-log div code{margin-top:5px;display:block}div.bbp-converter-log .step{text-align:right;font-weight:600}div.bbp-converter-log .output{margin:0 5px}div.bbp-converter-log .mini-step{padding:3px 5px;vertical-align:middle;font-size:8px;font-weight:600;border-radius:6px;background-color:#aaa;color:#fff}#bbp-converter-monitor .bbp-progress-bar{position:absolute;left:0;height:1px;width:0;background-color:#00b9eb;transition-property:width;transition-timing-function:ease-out;transition-duration:1s}#bbp-converter-monitor #bbp-converter-step-percentage{bottom:1px}#bbp-converter-monitor #bbp-converter-total-percentage{bottom:0}#bbp-converter-stop{display:none}#bbp-converter-status{font-weight:400;font-size:12px;color:#aaa;display:block;margin-top:2px}.bbp-converter-db-password-wrapper{display:inline-block;position:relative}.bbp-converter-db-pass::-webkit-credentials-auto-fill-button{display:none;visibility:hidden;pointer-events:none;position:absolute;right:0}button.bbp-db-pass-toggle{border:none;background:0 0;position:absolute;right:3px;top:3px;padding:0;margin:0;cursor:pointer;color:#aaa;height:25px;width:25px;font:400 20px/1 dashicons!important}button.bbp-db-pass-toggle:hover{color:#888}button.bbp-db-pass-toggle.text:after{content:"\f530"}button.bbp-db-pass-toggle.password:after{content:"\f177"}@media screen and (max-width:782px){.bbp-converter-db-password-wrapper{width:100%}#poststuff.bbp-converter-monitor-wrap,.bbp-converter-settings-wrap{float:none;width:100%;margin:20px 0}button.bbp-db-pass-toggle{height:35px;width:35px;font:400 20px/1 dashicons!important}}td.bbp-tool-title strong{display:block}
includes/admin/assets/js/converter.js CHANGED
@@ -9,11 +9,13 @@ jQuery( document ).ready( function ( $ ) {
9
  start = $( '#bbp-converter-start' ),
10
  restart = $( '#_bbp_converter_restart' ),
11
  status = $( '#bbp-converter-status' ),
 
12
  settings = $( '#bbp-converter-settings' ),
13
  password = $( '#_bbp_converter_db_pass' ),
14
  toggle = $( '.bbp-db-pass-toggle' ),
15
  step_p = $( '#bbp-converter-step-percentage' ),
16
- total_p = $( '#bbp-converter-total-percentage' );
 
17
 
18
  /**
19
  * Show/hide db password button toggle
@@ -217,8 +219,12 @@ jQuery( document ).ready( function ( $ ) {
217
  );
218
 
219
  message.addClass( 'started' );
 
220
  start.hide();
221
  stop.show();
 
 
 
222
 
223
  bbp_converter_post();
224
  }
@@ -256,6 +262,9 @@ jQuery( document ).ready( function ( $ ) {
256
 
257
  start.show();
258
  stop.hide();
 
 
 
259
  }
260
 
261
  /**
9
  start = $( '#bbp-converter-start' ),
10
  restart = $( '#_bbp_converter_restart' ),
11
  status = $( '#bbp-converter-status' ),
12
+ spinner = $( '#bbp-converter-spinner' ),
13
  settings = $( '#bbp-converter-settings' ),
14
  password = $( '#_bbp_converter_db_pass' ),
15
  toggle = $( '.bbp-db-pass-toggle' ),
16
  step_p = $( '#bbp-converter-step-percentage' ),
17
+ total_p = $( '#bbp-converter-total-percentage' ),
18
+ fields = settings.find( 'table:first-of-type input, table:first-of-type select' );
19
 
20
  /**
21
  * Show/hide db password button toggle
219
  );
220
 
221
  message.addClass( 'started' );
222
+
223
  start.hide();
224
  stop.show();
225
+ console.log( fields );
226
+ spinner.css( 'visibility', 'visible' );
227
+ fields.prop( 'readonly', true );
228
 
229
  bbp_converter_post();
230
  }
262
 
263
  start.show();
264
  stop.hide();
265
+
266
+ spinner.css( 'visibility', 'hidden' );
267
+ fields.prop( 'readonly', false );
268
  }
269
 
270
  /**
includes/admin/assets/js/converter.min.js CHANGED
@@ -1,3 +1,3 @@
1
  /*! This file is automatically generated. */
2
 
3
- jQuery(document).ready(function(t){"use strict";function e(){_()}function r(){c(BBP_Converter.strings.button_continue,BBP_Converter.strings.import_stopped_user)}function n(){var e={};return t.each(b.serializeArray(),function(t,r){e[r.name]=r.value}),e._bbp_converter_restart&&g.removeAttr("checked"),e._bbp_converter_delay_time&&(BBP_Converter.state.delay=1e3*parseInt(e._bbp_converter_delay_time,10)),e.action="bbp_converter_process",e._ajax_nonce=BBP_Converter.ajax_nonce,e}function s(){t.post(ajaxurl,n(),function(t){try{var e=t.data;!0===t.success?a(e):c()}catch(t){c()}},"json")}function a(t){BBP_Converter.state.running&&(B(t.progress),v(t.step_percent,t.total_percent),u(t),o(),t.current_step===t.final_step&&c(BBP_Converter.strings.button_start,BBP_Converter.strings.import_complete))}function o(){clearTimeout(BBP_Converter.state.running),BBP_Converter.state.running&&(BBP_Converter.state.running=setTimeout(function(){s()},parseInt(BBP_Converter.state.delay,10)))}function _(){clearTimeout(BBP_Converter.state.running),clearInterval(BBP_Converter.state.status),BBP_Converter.state.running=!0;var t=BBP_Converter.strings.start_continue;!1===BBP_Converter.state.started&&(t=BBP_Converter.strings.start_start,BBP_Converter.state.started=!0),i(BBP_Converter.strings.button_continue,t,BBP_Converter.strings.status_starting),p.addClass("started"),C.hide(),l.show(),s()}function c(t,e){clearTimeout(BBP_Converter.state.running),clearInterval(BBP_Converter.state.status),BBP_Converter.state.running=!1,BBP_Converter.state.status=!1,t||(t=BBP_Converter.strings.button_continue),e||(e=BBP_Converter.strings.status_stopped),i(t,e,BBP_Converter.strings.status_stopped),C.show(),l.hide()}function i(t,e,r){C.val(t),B(e),P.text(r)}function u(t){var e=parseInt(BBP_Converter.state.delay,10)/1e3;P.text(BBP_Converter.strings.status_counting.replace("%s",e)),clearInterval(BBP_Converter.state.status),BBP_Converter.state.status=setInterval(function(){e--,P.text(BBP_Converter.strings.status_counting.replace("%s",e)),e<=0&&(clearInterval(BBP_Converter.state.status),parseInt(t.current_step,10)<parseInt(t.final_step,10)?P.text(BBP_Converter.strings.status_up_next.replace("%s",t.current_step)):P.text(BBP_Converter.strings.status_complete))},1e3)}function B(t){t="<p>"+t+"</p>",p.prepend(t)}function v(t,e){m.width(t+"%"),x.width(e+"%")}var p=t("#bbp-converter-message"),l=t("#bbp-converter-stop"),C=t("#bbp-converter-start"),g=t("#_bbp_converter_restart"),P=t("#bbp-converter-status"),b=t("#bbp-converter-settings"),d=t("#_bbp_converter_db_pass"),f=t(".bbp-db-pass-toggle"),m=t("#bbp-converter-step-percentage"),x=t("#bbp-converter-total-percentage");f.on("click",function(t){var e="password"===d.attr("type")?"text":"password";d.attr("type",e),f.toggleClass("password").toggleClass("text"),t.preventDefault()}),C.on("click",function(t){e(),t.preventDefault()}),t(l).on("click",function(t){r(),t.preventDefault()})});
1
  /*! This file is automatically generated. */
2
 
3
+ jQuery(document).ready(function(t){"use strict";function e(){i()}function r(){c(BBP_Converter.strings.button_continue,BBP_Converter.strings.import_stopped_user)}function n(){var e={};return t.each(d.serializeArray(),function(t,r){e[r.name]=r.value}),e._bbp_converter_restart&&g.removeAttr("checked"),e._bbp_converter_delay_time&&(BBP_Converter.state.delay=1e3*parseInt(e._bbp_converter_delay_time,10)),e.action="bbp_converter_process",e._ajax_nonce=BBP_Converter.ajax_nonce,e}function s(){t.post(ajaxurl,n(),function(t){try{var e=t.data;!0===t.success?o(e):c()}catch(t){c()}},"json")}function o(t){BBP_Converter.state.running&&(p(t.progress),B(t.step_percent,t.total_percent),u(t),a(),t.current_step===t.final_step&&c(BBP_Converter.strings.button_start,BBP_Converter.strings.import_complete))}function a(){clearTimeout(BBP_Converter.state.running),BBP_Converter.state.running&&(BBP_Converter.state.running=setTimeout(function(){s()},parseInt(BBP_Converter.state.delay,10)))}function i(){clearTimeout(BBP_Converter.state.running),clearInterval(BBP_Converter.state.status),BBP_Converter.state.running=!0;var t=BBP_Converter.strings.start_continue;!1===BBP_Converter.state.started&&(t=BBP_Converter.strings.start_start,BBP_Converter.state.started=!0),_(BBP_Converter.strings.button_continue,t,BBP_Converter.strings.status_starting),v.addClass("started"),b.hide(),l.show(),console.log(h),P.css("visibility","visible"),h.prop("readonly",!0),s()}function c(t,e){clearTimeout(BBP_Converter.state.running),clearInterval(BBP_Converter.state.status),BBP_Converter.state.running=!1,BBP_Converter.state.status=!1,t||(t=BBP_Converter.strings.button_continue),e||(e=BBP_Converter.strings.status_stopped),_(t,e,BBP_Converter.strings.status_stopped),b.show(),l.hide(),P.css("visibility","hidden"),h.prop("readonly",!1)}function _(t,e,r){b.val(t),p(e),C.text(r)}function u(t){var e=parseInt(BBP_Converter.state.delay,10)/1e3;C.text(BBP_Converter.strings.status_counting.replace("%s",e)),clearInterval(BBP_Converter.state.status),BBP_Converter.state.status=setInterval(function(){e--,C.text(BBP_Converter.strings.status_counting.replace("%s",e)),e<=0&&(clearInterval(BBP_Converter.state.status),parseInt(t.current_step,10)<parseInt(t.final_step,10)?C.text(BBP_Converter.strings.status_up_next.replace("%s",t.current_step)):C.text(BBP_Converter.strings.status_complete))},1e3)}function p(t){t="<p>"+t+"</p>",v.prepend(t)}function B(t,e){m.width(t+"%"),x.width(e+"%")}var v=t("#bbp-converter-message"),l=t("#bbp-converter-stop"),b=t("#bbp-converter-start"),g=t("#_bbp_converter_restart"),C=t("#bbp-converter-status"),P=t("#bbp-converter-spinner"),d=t("#bbp-converter-settings"),f=t("#_bbp_converter_db_pass"),y=t(".bbp-db-pass-toggle"),m=t("#bbp-converter-step-percentage"),x=t("#bbp-converter-total-percentage"),h=d.find("table:first-of-type input, table:first-of-type select");y.on("click",function(t){var e="password"===f.attr("type")?"text":"password";f.attr("type",e),y.toggleClass("password").toggleClass("text"),t.preventDefault()}),b.on("click",function(t){e(),t.preventDefault()}),t(l).on("click",function(t){r(),t.preventDefault()})});
includes/admin/classes/class-bbp-admin.php CHANGED
@@ -75,6 +75,13 @@ class BBP_Admin {
75
  */
76
  public $tools = array();
77
 
 
 
 
 
 
 
 
78
  /** Functions *************************************************************/
79
 
80
  /**
@@ -149,17 +156,19 @@ class BBP_Admin {
149
 
150
  /** General Actions ***************************************************/
151
 
152
- add_action( 'bbp_admin_init', array( $this, 'setup_notices' ) );
153
- add_action( 'bbp_admin_init', array( $this, 'hide_notices' ) );
154
  add_action( 'bbp_admin_menu', array( $this, 'admin_menus' ) ); // Add menu item to settings menu
155
- add_action( 'bbp_admin_head', array( $this, 'admin_head' ) ); // Add some general styling to the admin area
156
- add_action( 'bbp_admin_notices', array( $this, 'activation_notice' ) ); // Add notice if not using a bbPress theme
157
  add_action( 'bbp_register_admin_style', array( $this, 'register_admin_style' ) ); // Add green admin style
158
  add_action( 'bbp_register_admin_settings', array( $this, 'register_admin_settings' ) ); // Add settings
159
- add_action( 'bbp_activation', array( $this, 'new_install' ) ); // Add menu item to settings menu
160
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_styles' ) ); // Add enqueued CSS
161
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); // Add enqueued JS
162
 
 
 
 
 
 
 
163
  /** Ajax **************************************************************/
164
 
165
  // No _nopriv_ equivalent - users must be logged in
@@ -195,6 +204,11 @@ class BBP_Admin {
195
  */
196
  public function setup_notices() {
197
 
 
 
 
 
 
198
  // Database upgrade skipped?
199
  $skipped = get_option( '_bbp_db_upgrade_skipped', 0 );
200
 
@@ -214,7 +228,7 @@ class BBP_Admin {
214
  );
215
 
216
  // Add tools feedback
217
- bbp_admin_tools_feedback( $message, 'notice-bbpress', false );
218
  }
219
  }
220
 
@@ -230,6 +244,11 @@ class BBP_Admin {
230
  return;
231
  }
232
 
 
 
 
 
 
233
  // Check the admin referer
234
  check_admin_referer( 'bbp-hide-notice' );
235
 
@@ -243,6 +262,112 @@ class BBP_Admin {
243
  }
244
  }
245
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246
  /**
247
  * Add the admin menus
248
  *
@@ -357,21 +482,6 @@ class BBP_Admin {
357
  );
358
  }
359
 
360
- /**
361
- * If this is a new installation, create some initial forum content.
362
- *
363
- * @since 2.1.0 bbPress (r3767)
364
- *
365
- * @return type
366
- */
367
- public static function new_install() {
368
- if ( ! bbp_is_install() ) {
369
- return;
370
- }
371
-
372
- bbp_create_initial_content();
373
- }
374
-
375
  /**
376
  * Register the settings
377
  *
@@ -467,13 +577,13 @@ class BBP_Admin {
467
  case 'bbp_settings_user_slugs' : // Settings - User slugs
468
  case 'bbp_settings_per_page' : // Settings - Per page
469
  case 'bbp_settings_per_rss_page' : // Settings - Per RSS page
470
- $caps = array( bbpress()->admin->minimum_capability );
471
  break;
472
 
473
  // Extend - BuddyPress
474
  case 'bbp_settings_buddypress' :
475
  if ( ( is_plugin_active( 'buddypress/bp-loader.php' ) && defined( 'BP_VERSION' ) && bp_is_root_blog() ) && is_super_admin() ) {
476
- $caps = array( bbpress()->admin->minimum_capability );
477
  } else {
478
  $caps = array( 'do_not_allow' );
479
  }
@@ -483,7 +593,7 @@ class BBP_Admin {
483
  // Extend - Akismet
484
  case 'bbp_settings_akismet' :
485
  if ( ( is_plugin_active( 'akismet/akismet.php' ) && defined( 'AKISMET_VERSION' ) ) && is_super_admin() ) {
486
- $caps = array( bbpress()->admin->minimum_capability );
487
  } else {
488
  $caps = array( 'do_not_allow' );
489
  }
@@ -529,17 +639,6 @@ class BBP_Admin {
529
  }
530
  }
531
 
532
- /**
533
- * Admin area activation notice
534
- *
535
- * Shows a nag message in admin area about the theme not supporting bbPress
536
- *
537
- * @since 2.0.0 bbPress (r2743)
538
- */
539
- public function activation_notice() {
540
- // @todo - something fun
541
- }
542
-
543
  /**
544
  * Add Settings link to plugins area
545
  *
@@ -1135,8 +1234,8 @@ class BBP_Admin {
1135
  wp_die( sprintf( esc_html__( 'Warning! Problem updating %1$s. Your server may not be able to connect to sites running on it. Error message: %2$s', 'bbpress' ), $site_url, '<em>' . $response->get_error_message() . '</em>' ) );
1136
  }
1137
 
1138
- // Switch to the new blog
1139
- switch_to_blog( $details[ 'blog_id' ] );
1140
 
1141
  $basename = bbpress()->basename;
1142
 
@@ -1145,8 +1244,8 @@ class BBP_Admin {
1145
  bbp_version_updater();
1146
  }
1147
 
1148
- // restore original blog
1149
- restore_current_blog();
1150
 
1151
  // Do some actions to allow plugins to do things too
1152
  do_action( 'after_bbpress_upgrade', $response );
75
  */
76
  public $tools = array();
77
 
78
+ /** Notices ***************************************************************/
79
+
80
+ /**
81
+ * @var array Array of notices to output to the current user
82
+ */
83
+ public $notices = array();
84
+
85
  /** Functions *************************************************************/
86
 
87
  /**
156
 
157
  /** General Actions ***************************************************/
158
 
 
 
159
  add_action( 'bbp_admin_menu', array( $this, 'admin_menus' ) ); // Add menu item to settings menu
160
+ add_action( 'bbp_admin_head', array( $this, 'admin_head' ) ); // Add general styling to the admin area
 
161
  add_action( 'bbp_register_admin_style', array( $this, 'register_admin_style' ) ); // Add green admin style
162
  add_action( 'bbp_register_admin_settings', array( $this, 'register_admin_settings' ) ); // Add settings
 
163
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_styles' ) ); // Add enqueued CSS
164
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); // Add enqueued JS
165
 
166
+ /** Notices ***********************************************************/
167
+
168
+ add_action( 'bbp_admin_init', array( $this, 'setup_notices' ) );
169
+ add_action( 'bbp_admin_init', array( $this, 'hide_notices' ) );
170
+ add_action( 'bbp_admin_notices', array( $this, 'output_notices' ) );
171
+
172
  /** Ajax **************************************************************/
173
 
174
  // No _nopriv_ equivalent - users must be logged in
204
  */
205
  public function setup_notices() {
206
 
207
+ // Avoid malformed notices variable
208
+ if ( ! is_array( $this->notices ) ) {
209
+ $this->notices = array();
210
+ }
211
+
212
  // Database upgrade skipped?
213
  $skipped = get_option( '_bbp_db_upgrade_skipped', 0 );
214
 
228
  );
229
 
230
  // Add tools feedback
231
+ $this->add_notice( $message, 'notice-bbpress', false );
232
  }
233
  }
234
 
244
  return;
245
  }
246
 
247
+ // Bail if user cannot visit upgrade page (cannot clear notice either!)
248
+ if ( ! current_user_can( 'bbp_tools_upgrade_page' ) ) {
249
+ return;
250
+ }
251
+
252
  // Check the admin referer
253
  check_admin_referer( 'bbp-hide-notice' );
254
 
262
  }
263
  }
264
 
265
+ /**
266
+ * Output all admin area notices
267
+ *
268
+ * @since 2.6.0 bbPress (r6771)
269
+ */
270
+ public function output_notices() {
271
+
272
+ // Bail if no notices
273
+ if ( empty( $this->notices ) || ! is_array( $this->notices ) ) {
274
+ return;
275
+ }
276
+
277
+ // Start an output buffer
278
+ ob_start();
279
+
280
+ // Loop through notices, and add them to buffer
281
+ foreach ( $this->notices as $notice ) {
282
+ echo $notice;
283
+ }
284
+
285
+ // Output the current buffer
286
+ echo ob_get_clean();
287
+ }
288
+
289
+ /**
290
+ * Add a notice to the notices array
291
+ *
292
+ * @since 2.6.0 bbPress (r6771)
293
+ *
294
+ * @param string|WP_Error $message A message to be displayed or {@link WP_Error}
295
+ * @param string $class Optional. A class to be added to the message div
296
+ * @param bool $is_dismissible Optional. True to dismiss, false to persist
297
+ *
298
+ * @return void
299
+ */
300
+ public function add_notice( $message, $class = false, $is_dismissible = true ) {
301
+
302
+ // One message as string
303
+ if ( is_string( $message ) ) {
304
+ $message = '<p>' . $this->esc_notice( $message ) . '</p>';
305
+ $default_class ='updated';
306
+
307
+ // Messages as objects
308
+ } elseif ( is_wp_error( $message ) ) {
309
+ $errors = $message->get_error_messages();
310
+
311
+ switch ( count( $errors ) ) {
312
+ case 0:
313
+ return false;
314
+
315
+ case 1:
316
+ $message = '<p>' . $this->esc_notice( $errors[0] ) . '</p>';
317
+ break;
318
+
319
+ default:
320
+ $escaped = array_map( array( $this, 'esc_notice' ), $errors );
321
+ $message = '<ul>' . "\n\t" . '<li>' . implode( '</li>' . "\n\t" . '<li>', $escaped ) . '</li>' . "\n" . '</ul>';
322
+ break;
323
+ }
324
+
325
+ $default_class = 'is-error';
326
+
327
+ // Message is an unknown format, so bail
328
+ } else {
329
+ return false;
330
+ }
331
+
332
+ // CSS Classes
333
+ $classes = ! empty( $class )
334
+ ? array( $class )
335
+ : array( $default_class );
336
+
337
+ // Add dismissible class
338
+ if ( ! empty( $is_dismissible ) ) {
339
+ array_push( $classes, 'is-dismissible' );
340
+ }
341
+
342
+ // Assemble the message
343
+ $message = '<div id="message" class="notice ' . implode( ' ', array_map( 'sanitize_html_class', $classes ) ) . '">' . $message . '</div>';
344
+ $message = str_replace( "'", "\'", $message );
345
+
346
+ // Avoid malformed notices variable
347
+ if ( ! is_array( $this->notices ) ) {
348
+ $this->notices = array();
349
+ }
350
+
351
+ // Add notice to notices array
352
+ $this->notices[] = $message;
353
+ }
354
+
355
+ /**
356
+ * Escape message string output
357
+ *
358
+ * @since 2.6.0 bbPress (r6775)
359
+ *
360
+ * @param string $message
361
+ *
362
+ * @return string
363
+ */
364
+ private function esc_notice( $message = '' ) {
365
+ $tags = wp_kses_allowed_html();
366
+ $text = wp_kses( $message, $tags );
367
+
368
+ return $text;
369
+ }
370
+
371
  /**
372
  * Add the admin menus
373
  *
482
  );
483
  }
484
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
485
  /**
486
  * Register the settings
487
  *
577
  case 'bbp_settings_user_slugs' : // Settings - User slugs
578
  case 'bbp_settings_per_page' : // Settings - Per page
579
  case 'bbp_settings_per_rss_page' : // Settings - Per RSS page
580
+ $caps = array( bbp_admin()->minimum_capability );
581
  break;
582
 
583
  // Extend - BuddyPress
584
  case 'bbp_settings_buddypress' :
585
  if ( ( is_plugin_active( 'buddypress/bp-loader.php' ) && defined( 'BP_VERSION' ) && bp_is_root_blog() ) && is_super_admin() ) {
586
+ $caps = array( bbp_admin()->minimum_capability );
587
  } else {
588
  $caps = array( 'do_not_allow' );
589
  }
593
  // Extend - Akismet
594
  case 'bbp_settings_akismet' :
595
  if ( ( is_plugin_active( 'akismet/akismet.php' ) && defined( 'AKISMET_VERSION' ) ) && is_super_admin() ) {
596
+ $caps = array( bbp_admin()->minimum_capability );
597
  } else {
598
  $caps = array( 'do_not_allow' );
599
  }
639
  }
640
  }
641
 
 
 
 
 
 
 
 
 
 
 
 
642
  /**
643
  * Add Settings link to plugins area
644
  *
1234
  wp_die( sprintf( esc_html__( 'Warning! Problem updating %1$s. Your server may not be able to connect to sites running on it. Error message: %2$s', 'bbpress' ), $site_url, '<em>' . $response->get_error_message() . '</em>' ) );
1235
  }
1236
 
1237
+ // Switch to the new site
1238
+ bbp_switch_to_site( $details[ 'blog_id' ] );
1239
 
1240
  $basename = bbpress()->basename;
1241
 
1244
  bbp_version_updater();
1245
  }
1246
 
1247
+ // Restore original site
1248
+ bbp_restore_current_site();
1249
 
1250
  // Do some actions to allow plugins to do things too
1251
  do_action( 'after_bbpress_upgrade', $response );
includes/admin/classes/class-bbp-converter-base.php CHANGED
@@ -43,27 +43,27 @@ abstract class BBP_Converter_Base {
43
  /**
44
  * @var array() Map of topic to forum. It is for optimization.
45
  */
46
- private $map_topicid_to_forumid = array();
47
 
48
  /**
49
  * @var array() Map of from old forum ids to new forum ids. It is for optimization.
50
  */
51
- private $map_forumid = array();
52
 
53
  /**
54
  * @var array() Map of from old topic ids to new topic ids. It is for optimization.
55
  */
56
- private $map_topicid = array();
57
 
58
  /**
59
  * @var array() Map of from old reply_to ids to new reply_to ids. It is for optimization.
60
  */
61
- private $map_reply_to = array();
62
 
63
  /**
64
  * @var array() Map of from old user ids to new user ids. It is for optimization.
65
  */
66
- private $map_userid = array();
67
 
68
  /**
69
  * @var str This is the charset for your wp database.
@@ -138,7 +138,7 @@ abstract class BBP_Converter_Base {
138
 
139
  // Maybe add port to server
140
  if ( ! empty( $db_port ) && ! empty( $db_host ) && ! strstr( $db_host, ':' ) ) {
141
- $db_host = $db_host . ':' . $db_port;
142
  }
143
 
144
  /** Get database connections ******************************************/
@@ -146,11 +146,8 @@ abstract class BBP_Converter_Base {
146
  // Setup WordPress Database
147
  $this->wpdb = bbp_db();
148
 
149
- // Control WPDB db_connect() bailing
150
- define( 'WP_SETUP_CONFIG', true );
151
-
152
  // Setup old forum Database
153
- $this->opdb = new wpdb( $db_user, $db_pass, $db_name, $db_host );
154
 
155
  // Connection failed
156
  if ( ! $this->opdb->db_connect( false ) ) {
@@ -498,29 +495,34 @@ abstract class BBP_Converter_Base {
498
 
499
  /** New user **************************************/
500
 
501
- case 'user':
502
  if ( username_exists( $insert_post['user_login'] ) ) {
503
- $insert_post['user_login'] = 'imported_' . $insert_post['user_login'];
504
  }
505
 
506
  if ( email_exists( $insert_post['user_email'] ) ) {
507
- $insert_post['user_email'] = 'imported_' . $insert_post['user_email'];
508
  }
509
 
510
  if ( empty( $insert_post['user_pass'] ) ) {
511
  $insert_post['user_pass'] = '';
512
  }
513
 
 
 
514
  $post_id = wp_insert_user( $insert_post );
515
 
516
  if ( is_numeric( $post_id ) ) {
517
-
518
  foreach ( $insert_postmeta as $key => $value ) {
519
-
520
  add_user_meta( $post_id, $key, $value, true );
521
 
522
  if ( '_id' == substr( $key, -3 ) && ( true === $this->sync_table ) ) {
523
- $this->wpdb->insert( $this->sync_table_name, array( 'value_type' => 'user', 'value_id' => $post_id, 'meta_key' => $key, 'meta_value' => $value ) );
 
 
 
 
 
524
  }
525
  }
526
  }
@@ -528,7 +530,7 @@ abstract class BBP_Converter_Base {
528
 
529
  /** New Topic-Tag *********************************/
530
 
531
- case 'tags':
532
  $post_id = wp_set_object_terms( $insert_postmeta['objectid'], $insert_postmeta['name'], 'topic-tag', true );
533
  $term = get_term_by( 'name', $insert_postmeta['name'], 'topic-tag');
534
  if ( false !== $term ) {
@@ -541,7 +543,7 @@ abstract class BBP_Converter_Base {
541
 
542
  /** Forum Subscriptions ***************************/
543
 
544
- case 'forum_subscriptions':
545
  $user_id = $insert_post['user_id'];
546
  $items = wp_list_pluck( $insert_postmeta, '_bbp_forum_subscriptions' );
547
  if ( is_numeric( $user_id ) && ! empty( $items ) ) {
@@ -562,7 +564,7 @@ abstract class BBP_Converter_Base {
562
 
563
  /** Subscriptions *********************************/
564
 
565
- case 'topic_subscriptions':
566
  $user_id = $insert_post['user_id'];
567
  $items = wp_list_pluck( $insert_postmeta, '_bbp_subscriptions' );
568
  if ( is_numeric( $user_id ) && ! empty( $items ) ) {
@@ -583,7 +585,7 @@ abstract class BBP_Converter_Base {
583
 
584
  /** Favorites *************************************/
585
 
586
- case 'favorites':
587
  $user_id = $insert_post['user_id'];
588
  $items = wp_list_pluck( $insert_postmeta, '_bbp_favorites' );
589
  if ( is_numeric( $user_id ) && ! empty( $items ) ) {
@@ -604,13 +606,11 @@ abstract class BBP_Converter_Base {
604
 
605
  /** Forum, Topic, Reply ***************************/
606
 
607
- default:
608
  $post_id = wp_insert_post( $insert_post, true );
609
 
610
  if ( is_numeric( $post_id ) ) {
611
-
612
  foreach ( $insert_postmeta as $key => $value ) {
613
-
614
  add_post_meta( $post_id, $key, $value, true );
615
 
616
  /**
@@ -631,7 +631,12 @@ abstract class BBP_Converter_Base {
631
  * _bbp_old_reply_to_id // The old reply to ID
632
  */
633
  if ( '_id' === substr( $key, -3 ) && ( true === $this->sync_table ) ) {
634
- $this->wpdb->insert( $this->sync_table_name, array( 'value_type' => 'post', 'value_id' => $post_id, 'meta_key' => $key, 'meta_value' => $value ) );
 
 
 
 
 
635
  }
636
 
637
  /**
@@ -662,7 +667,7 @@ abstract class BBP_Converter_Base {
662
  public function convert_forum_parents( $start = 1 ) {
663
  $has_update = false;
664
  $query = ! empty( $this->sync_table )
665
- ? $this->wpdb->prepare( "SELECT value_id, meta_value FROM {$this->sync_table_name} WHERE meta_key = %s AND meta_value > 0 LIMIT {$start}, {$this->max_rows}", '_bbp_old_forum_parent_id' )
666
  : $this->wpdb->prepare( "SELECT post_id AS value_id, meta_value FROM {$this->wpdb->postmeta} WHERE meta_key = %s AND meta_value > 0 LIMIT {$start}, {$this->max_rows}", '_bbp_old_forum_parent_id' );
667
 
668
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
@@ -682,7 +687,7 @@ abstract class BBP_Converter_Base {
682
  public function convert_topic_stickies( $start = 1 ) {
683
  $has_update = false;
684
  $query = ! empty( $this->sync_table )
685
- ? $this->wpdb->prepare( "SELECT value_id, meta_value FROM {$this->sync_table_name} WHERE meta_key = %s AND meta_value = %s LIMIT {$start}, {$this->max_rows}", '_bbp_old_sticky_status_id', 'sticky' )
686
  : $this->wpdb->prepare( "SELECT post_id AS value_id, meta_value FROM {$this->wpdb->postmeta} WHERE meta_key = %s AND meta_value = %s LIMIT {$start}, {$this->max_rows}", '_bbp_old_sticky_status_id', 'sticky' );
687
 
688
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
@@ -701,7 +706,7 @@ abstract class BBP_Converter_Base {
701
  public function convert_topic_super_stickies( $start = 1 ) {
702
  $has_update = false;
703
  $query = ! empty( $this->sync_table )
704
- ? $this->wpdb->prepare( "SELECT value_id, meta_value FROM {$this->sync_table_name} WHERE meta_key = %s AND meta_value = %s LIMIT {$start}, {$this->max_rows}", '_bbp_old_sticky_status_id', 'super-sticky' )
705
  : $this->wpdb->prepare( "SELECT post_id AS value_id, meta_value FROM {$this->wpdb->postmeta} WHERE meta_key = %s AND meta_value = %s LIMIT {$start}, {$this->max_rows}", '_bbp_old_sticky_status_id', 'super-sticky' );
706
 
707
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
@@ -721,7 +726,7 @@ abstract class BBP_Converter_Base {
721
  public function convert_topic_closed_topics( $start = 1 ) {
722
  $has_update = false;
723
  $query = ! empty( $this->sync_table )
724
- ? $this->wpdb->prepare( "SELECT value_id, meta_value FROM {$this->sync_table_name} WHERE meta_key = %s AND meta_value = %s LIMIT {$start}, {$this->max_rows}", '_bbp_old_closed_status_id', 'closed' )
725
  : $this->wpdb->prepare( "SELECT post_id AS value_id, meta_value FROM {$this->wpdb->postmeta} WHERE meta_key = %s AND meta_value = %s LIMIT {$start}, {$this->max_rows}", '_bbp_old_closed_status_id', 'closed' );
726
 
727
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
@@ -740,7 +745,7 @@ abstract class BBP_Converter_Base {
740
  public function convert_reply_to_parents( $start = 1 ) {
741
  $has_update = false;
742
  $query = ! empty( $this->sync_table )
743
- ? $this->wpdb->prepare( "SELECT value_id, meta_value FROM {$this->sync_table_name} WHERE meta_key = %s AND meta_value > 0 LIMIT {$start}, {$this->max_rows}", '_bbp_old_reply_to_id' )
744
  : $this->wpdb->prepare( "SELECT post_id AS value_id, meta_value FROM {$this->wpdb->postmeta} WHERE meta_key = %s AND meta_value > 0 LIMIT {$start}, {$this->max_rows}", '_bbp_old_reply_to_id' );
745
 
746
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
@@ -763,20 +768,20 @@ abstract class BBP_Converter_Base {
763
 
764
  if ( ! empty( $this->sync_table ) ) {
765
  $query = $this->wpdb->prepare( "SELECT sync_table1.value_id AS topic_id, sync_table1.meta_value AS topic_is_anonymous, sync_table2.meta_value AS topic_author
766
- FROM {$this->sync_table_name} AS sync_table1
767
- INNER JOIN {$this->sync_table_name} AS sync_table2
768
- ON ( sync_table1.value_id = sync_table2.value_id )
769
- WHERE sync_table1.meta_value = %s
770
- AND sync_table2.meta_key = %s
771
- LIMIT {$start}, {$this->max_rows}", 'true', '_bbp_old_topic_author_name_id' );
772
  } else {
773
  $query = $this->wpdb->prepare( "SELECT wp_postmeta1.post_id AS topic_id, wp_postmeta1.meta_value AS topic_is_anonymous, wp_postmeta2.meta_value AS topic_author
774
- FROM {$this->wpdb->postmeta} AS wp_postmeta1
775
- INNER JOIN {$this->wpdb->postmeta} AS wp_postmeta2
776
- ON ( wp_postmeta1.post_id = wp_postmeta2.post_id )
777
- WHERE wp_postmeta1.meta_value = %s
778
- AND wp_postmeta2.meta_key = %s
779
- LIMIT {$start}, {$this->max_rows}", 'true', '_bbp_old_topic_author_name_id' );
780
  }
781
 
782
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
@@ -802,20 +807,20 @@ abstract class BBP_Converter_Base {
802
 
803
  if ( ! empty( $this->sync_table ) ) {
804
  $query = $this->wpdb->prepare( "SELECT sync_table1.value_id AS reply_id, sync_table1.meta_value AS reply_is_anonymous, sync_table2.meta_value AS reply_author
805
- FROM {$this->sync_table_name} AS sync_table1
806
- INNER JOIN {$this->sync_table_name} AS sync_table2
807
- ON ( sync_table1.value_id = sync_table2.value_id )
808
- WHERE sync_table1.meta_value = %s
809
- AND sync_table2.meta_key = %s
810
- LIMIT {$start}, {$this->max_rows}", 'true', '_bbp_old_reply_author_name_id' );
811
  } else {
812
  $query = $this->wpdb->prepare( "SELECT wp_postmeta1.post_id AS reply_id, wp_postmeta1.meta_value AS reply_is_anonymous, wp_postmeta2.meta_value AS reply_author
813
- FROM {$this->wpdb->postmeta} AS wp_postmeta1
814
- INNER JOIN {$this->wpdb->postmeta} AS wp_postmeta2
815
- ON ( wp_postmeta1.post_id = wp_postmeta2.post_id )
816
- WHERE wp_postmeta1.meta_value = %s
817
- AND wp_postmeta2.meta_key = %s
818
- LIMIT {$start}, {$this->max_rows}", 'true', '_bbp_old_reply_author_name_id' );
819
  }
820
 
821
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
@@ -832,17 +837,20 @@ abstract class BBP_Converter_Base {
832
 
833
  /**
834
  * This method deletes data from the wp database.
 
 
835
  */
836
- public function clean( $start = 1 ) {
837
 
838
  // Defaults
839
  $has_delete = false;
840
 
841
  /** Delete topics/forums/posts ****************************************/
842
 
843
- $query = ! empty( $this->sync_table )
844
- ? $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 = %s GROUP BY value_id ORDER BY value_id DESC LIMIT {$this->max_rows}", 'post' )
845
- : $this->wpdb->prepare( "SELECT post_id AS value_id FROM {$this->wpdb->postmeta} WHERE meta_key LIKE %s GROUP BY post_id ORDER BY post_id DESC LIMIT {$this->max_rows}", $this->wpdb->esc_like( '_bbp_' ) . '%' );
 
846
 
847
  $posts = $this->get_results( $query, ARRAY_A );
848
 
@@ -924,22 +932,31 @@ abstract class BBP_Converter_Base {
924
  *
925
  * @param string The table name to grab fields from
926
  */
927
- private function get_fields( $tablename ) {
928
- $rval = array();
929
- $field_array = $this->get_results( 'DESCRIBE ' . $tablename, ARRAY_A );
930
 
 
 
 
 
 
 
931
  foreach ( $field_array as $field ) {
932
- $rval[] = $field['Field'];
 
 
933
  }
934
 
 
935
  if ( $tablename === $this->wpdb->users ) {
936
- $rval[] = 'role';
937
- $rval[] = 'yim';
938
- $rval[] = 'aim';
939
- $rval[] = 'jabber';
940
  }
941
 
942
- return $rval;
943
  }
944
 
945
  /** Database Wrappers *****************************************************/
@@ -1181,7 +1198,7 @@ abstract class BBP_Converter_Base {
1181
  }
1182
 
1183
  protected function callback_html( $field ) {
1184
- require_once bbpress()->admin->admin_dir . 'parser.php';
1185
 
1186
  // Setup the BBCode parser
1187
  $bbcode = BBCode::getInstance();
43
  /**
44
  * @var array() Map of topic to forum. It is for optimization.
45
  */
46
+ protected $map_topicid_to_forumid = array();
47
 
48
  /**
49
  * @var array() Map of from old forum ids to new forum ids. It is for optimization.
50
  */
51
+ protected $map_forumid = array();
52
 
53
  /**
54
  * @var array() Map of from old topic ids to new topic ids. It is for optimization.
55
  */
56
+ protected $map_topicid = array();
57
 
58
  /**
59
  * @var array() Map of from old reply_to ids to new reply_to ids. It is for optimization.
60
  */
61
+ protected $map_reply_to = array();
62
 
63
  /**
64
  * @var array() Map of from old user ids to new user ids. It is for optimization.
65
  */
66
+ protected $map_userid = array();
67
 
68
  /**
69
  * @var str This is the charset for your wp database.
138
 
139
  // Maybe add port to server
140
  if ( ! empty( $db_port ) && ! empty( $db_host ) && ! strstr( $db_host, ':' ) ) {
141
+ $db_host = "{$db_host}:{$db_port}";
142
  }
143
 
144
  /** Get database connections ******************************************/
146
  // Setup WordPress Database
147
  $this->wpdb = bbp_db();
148
 
 
 
 
149
  // Setup old forum Database
150
+ $this->opdb = new BBP_Converter_DB( $db_user, $db_pass, $db_name, $db_host );
151
 
152
  // Connection failed
153
  if ( ! $this->opdb->db_connect( false ) ) {
495
 
496
  /** New user **************************************/
497
 
498
+ case 'user' :
499
  if ( username_exists( $insert_post['user_login'] ) ) {
500
+ $insert_post['user_login'] = "imported_{$insert_post['user_login']}";
501
  }
502
 
503
  if ( email_exists( $insert_post['user_email'] ) ) {
504
+ $insert_post['user_email'] = "imported_{$insert_post['user_email']}";
505
  }
506
 
507
  if ( empty( $insert_post['user_pass'] ) ) {
508
  $insert_post['user_pass'] = '';
509
  }
510
 
511
+ // Internally re-calls _exists() checks above.
512
+ // Also checks for existing nicename.
513
  $post_id = wp_insert_user( $insert_post );
514
 
515
  if ( is_numeric( $post_id ) ) {
 
516
  foreach ( $insert_postmeta as $key => $value ) {
 
517
  add_user_meta( $post_id, $key, $value, true );
518
 
519
  if ( '_id' == substr( $key, -3 ) && ( true === $this->sync_table ) ) {
520
+ $this->wpdb->insert( $this->sync_table_name, array(
521
+ 'value_type' => 'user',
522
+ 'value_id' => $post_id,
523
+ 'meta_key' => $key,
524
+ 'meta_value' => $value
525
+ ) );
526
  }
527
  }
528
  }
530
 
531
  /** New Topic-Tag *********************************/
532
 
533
+ case 'tags' :
534
  $post_id = wp_set_object_terms( $insert_postmeta['objectid'], $insert_postmeta['name'], 'topic-tag', true );
535
  $term = get_term_by( 'name', $insert_postmeta['name'], 'topic-tag');
536
  if ( false !== $term ) {
543
 
544
  /** Forum Subscriptions ***************************/
545
 
546
+ case 'forum_subscriptions' :
547
  $user_id = $insert_post['user_id'];
548
  $items = wp_list_pluck( $insert_postmeta, '_bbp_forum_subscriptions' );
549
  if ( is_numeric( $user_id ) && ! empty( $items ) ) {
564
 
565
  /** Subscriptions *********************************/
566
 
567
+ case 'topic_subscriptions' :
568
  $user_id = $insert_post['user_id'];
569
  $items = wp_list_pluck( $insert_postmeta, '_bbp_subscriptions' );
570
  if ( is_numeric( $user_id ) && ! empty( $items ) ) {
585
 
586
  /** Favorites *************************************/
587
 
588
+ case 'favorites' :
589
  $user_id = $insert_post['user_id'];
590
  $items = wp_list_pluck( $insert_postmeta, '_bbp_favorites' );
591
  if ( is_numeric( $user_id ) && ! empty( $items ) ) {
606
 
607
  /** Forum, Topic, Reply ***************************/
608
 
609
+ default :
610
  $post_id = wp_insert_post( $insert_post, true );
611
 
612
  if ( is_numeric( $post_id ) ) {
 
613
  foreach ( $insert_postmeta as $key => $value ) {
 
614
  add_post_meta( $post_id, $key, $value, true );
615
 
616
  /**
631
  * _bbp_old_reply_to_id // The old reply to ID
632
  */
633
  if ( '_id' === substr( $key, -3 ) && ( true === $this->sync_table ) ) {
634
+ $this->wpdb->insert( $this->sync_table_name, array(
635
+ 'value_type' => 'post',
636
+ 'value_id' => $post_id,
637
+ 'meta_key' => $key,
638
+ 'meta_value' => $value
639
+ ) );
640
  }
641
 
642
  /**
667
  public function convert_forum_parents( $start = 1 ) {
668
  $has_update = false;
669
  $query = ! empty( $this->sync_table )
670
+ ? $this->wpdb->prepare( "SELECT value_id, meta_value FROM {$this->sync_table_name} WHERE meta_key = %s AND meta_value > 0 LIMIT {$start}, {$this->max_rows}", '_bbp_old_forum_parent_id' )
671
  : $this->wpdb->prepare( "SELECT post_id AS value_id, meta_value FROM {$this->wpdb->postmeta} WHERE meta_key = %s AND meta_value > 0 LIMIT {$start}, {$this->max_rows}", '_bbp_old_forum_parent_id' );
672
 
673
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
687
  public function convert_topic_stickies( $start = 1 ) {
688
  $has_update = false;
689
  $query = ! empty( $this->sync_table )
690
+ ? $this->wpdb->prepare( "SELECT value_id, meta_value FROM {$this->sync_table_name} WHERE meta_key = %s AND meta_value = %s LIMIT {$start}, {$this->max_rows}", '_bbp_old_sticky_status_id', 'sticky' )
691
  : $this->wpdb->prepare( "SELECT post_id AS value_id, meta_value FROM {$this->wpdb->postmeta} WHERE meta_key = %s AND meta_value = %s LIMIT {$start}, {$this->max_rows}", '_bbp_old_sticky_status_id', 'sticky' );
692
 
693
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
706
  public function convert_topic_super_stickies( $start = 1 ) {
707
  $has_update = false;
708
  $query = ! empty( $this->sync_table )
709
+ ? $this->wpdb->prepare( "SELECT value_id, meta_value FROM {$this->sync_table_name} WHERE meta_key = %s AND meta_value = %s LIMIT {$start}, {$this->max_rows}", '_bbp_old_sticky_status_id', 'super-sticky' )
710
  : $this->wpdb->prepare( "SELECT post_id AS value_id, meta_value FROM {$this->wpdb->postmeta} WHERE meta_key = %s AND meta_value = %s LIMIT {$start}, {$this->max_rows}", '_bbp_old_sticky_status_id', 'super-sticky' );
711
 
712
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
726
  public function convert_topic_closed_topics( $start = 1 ) {
727
  $has_update = false;
728
  $query = ! empty( $this->sync_table )
729
+ ? $this->wpdb->prepare( "SELECT value_id, meta_value FROM {$this->sync_table_name} WHERE meta_key = %s AND meta_value = %s LIMIT {$start}, {$this->max_rows}", '_bbp_old_closed_status_id', 'closed' )
730
  : $this->wpdb->prepare( "SELECT post_id AS value_id, meta_value FROM {$this->wpdb->postmeta} WHERE meta_key = %s AND meta_value = %s LIMIT {$start}, {$this->max_rows}", '_bbp_old_closed_status_id', 'closed' );
731
 
732
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
745
  public function convert_reply_to_parents( $start = 1 ) {
746
  $has_update = false;
747
  $query = ! empty( $this->sync_table )
748
+ ? $this->wpdb->prepare( "SELECT value_id, meta_value FROM {$this->sync_table_name} WHERE meta_key = %s AND meta_value > 0 LIMIT {$start}, {$this->max_rows}", '_bbp_old_reply_to_id' )
749
  : $this->wpdb->prepare( "SELECT post_id AS value_id, meta_value FROM {$this->wpdb->postmeta} WHERE meta_key = %s AND meta_value > 0 LIMIT {$start}, {$this->max_rows}", '_bbp_old_reply_to_id' );
750
 
751
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
768
 
769
  if ( ! empty( $this->sync_table ) ) {
770
  $query = $this->wpdb->prepare( "SELECT sync_table1.value_id AS topic_id, sync_table1.meta_value AS topic_is_anonymous, sync_table2.meta_value AS topic_author
771
+ FROM {$this->sync_table_name} AS sync_table1
772
+ INNER JOIN {$this->sync_table_name} AS sync_table2
773
+ ON ( sync_table1.value_id = sync_table2.value_id )
774
+ WHERE sync_table1.meta_value = %s
775
+ AND sync_table2.meta_key = %s
776
+ LIMIT {$start}, {$this->max_rows}", 'true', '_bbp_old_topic_author_name_id' );
777
  } else {
778
  $query = $this->wpdb->prepare( "SELECT wp_postmeta1.post_id AS topic_id, wp_postmeta1.meta_value AS topic_is_anonymous, wp_postmeta2.meta_value AS topic_author
779
+ FROM {$this->wpdb->postmeta} AS wp_postmeta1
780
+ INNER JOIN {$this->wpdb->postmeta} AS wp_postmeta2
781
+ ON ( wp_postmeta1.post_id = wp_postmeta2.post_id )
782
+ WHERE wp_postmeta1.meta_value = %s
783
+ AND wp_postmeta2.meta_key = %s
784
+ LIMIT {$start}, {$this->max_rows}", 'true', '_bbp_old_topic_author_name_id' );
785
  }
786
 
787
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
807
 
808
  if ( ! empty( $this->sync_table ) ) {
809
  $query = $this->wpdb->prepare( "SELECT sync_table1.value_id AS reply_id, sync_table1.meta_value AS reply_is_anonymous, sync_table2.meta_value AS reply_author
810
+ FROM {$this->sync_table_name} AS sync_table1
811
+ INNER JOIN {$this->sync_table_name} AS sync_table2
812
+ ON ( sync_table1.value_id = sync_table2.value_id )
813
+ WHERE sync_table1.meta_value = %s
814
+ AND sync_table2.meta_key = %s
815
+ LIMIT {$start}, {$this->max_rows}", 'true', '_bbp_old_reply_author_name_id' );
816
  } else {
817
  $query = $this->wpdb->prepare( "SELECT wp_postmeta1.post_id AS reply_id, wp_postmeta1.meta_value AS reply_is_anonymous, wp_postmeta2.meta_value AS reply_author
818
+ FROM {$this->wpdb->postmeta} AS wp_postmeta1
819
+ INNER JOIN {$this->wpdb->postmeta} AS wp_postmeta2
820
+ ON ( wp_postmeta1.post_id = wp_postmeta2.post_id )
821
+ WHERE wp_postmeta1.meta_value = %s
822
+ AND wp_postmeta2.meta_key = %s
823
+ LIMIT {$start}, {$this->max_rows}", 'true', '_bbp_old_reply_author_name_id' );
824
  }
825
 
826
  foreach ( $this->count_rows_by_results( $query ) as $row ) {
837
 
838
  /**
839
  * This method deletes data from the wp database.
840
+ *
841
+ * @since 2.6.0 bbPress (r6456)
842
  */
843
+ public function clean() {
844
 
845
  // Defaults
846
  $has_delete = false;
847
 
848
  /** Delete topics/forums/posts ****************************************/
849
 
850
+ $esc_like = $this->wpdb->esc_like( '_bbp_' ) . '%';
851
+ $query = ! empty( $this->sync_table )
852
+ ? $this->wpdb->prepare( "SELECT value_id FROM {$this->sync_table_name} INNER JOIN {$this->wpdb->posts} ON(value_id = ID) WHERE meta_key LIKE %s AND value_type = %s GROUP BY value_id ORDER BY value_id DESC LIMIT {$this->max_rows}", $esc_like, 'post' )
853
+ : $this->wpdb->prepare( "SELECT post_id AS value_id FROM {$this->wpdb->postmeta} WHERE meta_key LIKE %s GROUP BY post_id ORDER BY post_id DESC LIMIT {$this->max_rows}", $esc_like );
854
 
855
  $posts = $this->get_results( $query, ARRAY_A );
856
 
932
  *
933
  * @param string The table name to grab fields from
934
  */
935
+ private function get_fields( $tablename = '' ) {
936
+ $retval = array();
937
+ $field_array = $this->get_results( "DESCRIBE {$tablename}", ARRAY_A );
938
 
939
+ // Bail if no fields
940
+ if ( empty( $field_array ) ) {
941
+ return $retval;
942
+ }
943
+
944
+ // Add fields to array
945
  foreach ( $field_array as $field ) {
946
+ if ( ! empty( $field['Field'] ) ) {
947
+ $retval[] = $field['Field'];
948
+ }
949
  }
950
 
951
+ // Add social fields for users table
952
  if ( $tablename === $this->wpdb->users ) {
953
+ $retval[] = 'role';
954
+ $retval[] = 'yim';
955
+ $retval[] = 'aim';
956
+ $retval[] = 'jabber';
957
  }
958
 
959
+ return $retval;
960
  }
961
 
962
  /** Database Wrappers *****************************************************/
1198
  }
1199
 
1200
  protected function callback_html( $field ) {
1201
+ require_once bbp_admin()->admin_dir . 'parser.php';
1202
 
1203
  // Setup the BBCode parser
1204
  $bbcode = BBCode::getInstance();
includes/admin/classes/class-bbp-converter-db.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * bbPress Converter Database
5
+ *
6
+ * @package bbPress
7
+ * @subpackage Administration
8
+ */
9
+
10
+ // Exit if accessed directly
11
+ defined( 'ABSPATH' ) || exit;
12
+
13
+ if ( ! class_exists( 'BBP_Converter_DB' ) && class_exists( 'wpdb' ) ) :
14
+ /**
15
+ * bbPress Converter Database Access Abstraction Object
16
+ *
17
+ * @since 2.6.0 bbPress (r6784)
18
+ */
19
+ class BBP_Converter_DB extends wpdb {
20
+
21
+ /**
22
+ * Sets up the credentials used to connect to the database server, but does
23
+ * not actually connect to the database on construct.
24
+ *
25
+ * @since 2.6.0 bbPress (r6784)
26
+ *
27
+ * @param string $dbuser MySQL database user
28
+ * @param string $dbpassword MySQL database password
29
+ * @param string $dbname MySQL database name
30
+ * @param string $dbhost MySQL database host
31
+ */
32
+ public function __construct( $dbuser, $dbpassword, $dbname, $dbhost ) {
33
+ register_shutdown_function( array( $this, '__destruct' ) );
34
+
35
+ if ( WP_DEBUG && WP_DEBUG_DISPLAY ) {
36
+ $this->show_errors();
37
+ }
38
+
39
+ // Use ext/mysqli if it exists unless WP_USE_EXT_MYSQL is defined as true
40
+ if ( function_exists( 'mysqli_connect' ) ) {
41
+ $this->use_mysqli = true;
42
+
43
+ if ( defined( 'WP_USE_EXT_MYSQL' ) ) {
44
+ $this->use_mysqli = ! WP_USE_EXT_MYSQL;
45
+ }
46
+ }
47
+
48
+ // Setup credentials
49
+ $this->dbuser = $dbuser;
50
+ $this->dbpassword = $dbpassword;
51
+ $this->dbname = $dbname;
52
+ $this->dbhost = $dbhost;
53
+
54
+ // Normally wpdb would try to connect here, but we don't want to do that
55
+ // until we are good and ready, so instead we do nothing.
56
+ }
57
+ }
58
+ endif;
includes/admin/classes/class-bbp-converter.php CHANGED
@@ -215,9 +215,21 @@ class BBP_Converter {
215
  $output = wp_kses_data( $output );
216
 
217
  // Maybe prepend the step
218
- $progress = ! empty( $this->step )
219
- ? sprintf( '<span class="step">%s.</span><span class="output">%s</span><span class="mini-step">%s</span>', $this->step, $output, $this->step_percentage . '%' )
220
- : $output;
 
 
 
 
 
 
 
 
 
 
 
 
221
 
222
  // Output
223
  wp_send_json_success( array(
@@ -237,11 +249,27 @@ class BBP_Converter {
237
  * @since 2.6.0 bbPress (r6460)
238
  */
239
  private function maybe_set_memory() {
240
- if ( ! ini_get( 'safe_mode' ) ) {
241
- set_time_limit( 0 );
242
- ini_set( 'memory_limit', '256M' );
243
- ini_set( 'implicit_flush', '1' );
244
- ignore_user_abort( true );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
  }
246
  }
247
 
@@ -427,8 +455,28 @@ class BBP_Converter {
427
  * @since 2.6.0 bbPress (r6460)
428
  */
429
  private function bump_start() {
 
 
 
 
 
430
  $start = (int) ( $this->start + $this->rows );
431
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
432
  update_option( '_bbp_converter_start', $start );
433
  }
434
 
@@ -457,7 +505,7 @@ class BBP_Converter {
457
  */
458
  private function step_sync_table() {
459
  if ( true === $this->converter->clean ) {
460
- if ( $this->converter->clean( $this->start ) ) {
461
  $this->bump_step();
462
  $this->sync_table( true );
463
 
@@ -466,7 +514,7 @@ class BBP_Converter {
466
  : $this->converter_response( esc_html__( 'Sync-table ready', 'bbpress' ) );
467
  } else {
468
  $this->bump_start();
469
- $this->converter_response( sprintf( esc_html__( 'Deleting previously converted data (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step) );
470
  }
471
 
472
  $this->converter->clean = false;
@@ -492,7 +540,7 @@ class BBP_Converter {
492
  : $this->converter_response( esc_html__( 'All users imported', 'bbpress' ) );
493
  } else {
494
  $this->bump_start();
495
- $this->converter_response( sprintf( esc_html__( 'Converting users (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) );
496
  }
497
  } else {
498
  $this->bump_step();
@@ -515,7 +563,7 @@ class BBP_Converter {
515
  : $this->converter_response( esc_html__( 'All passwords cleared', 'bbpress' ) );
516
  } else {
517
  $this->bump_start();
518
- $this->converter_response( sprintf( esc_html__( 'Delete default WordPress user passwords (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) );
519
  }
520
  } else {
521
  $this->bump_step();
215
  $output = wp_kses_data( $output );
216
 
217
  // Maybe prepend the step
218
+ if ( ! empty( $this->step ) ) {
219
+
220
+ // Include percentage
221
+ if ( ! empty( $this->rows_in_step ) ) {
222
+ $progress = sprintf( '<span class="step">%s.</span><span class="output">%s</span><span class="mini-step">%s</span>', $this->step, $output, $this->step_percentage . '%' );
223
+
224
+ // Don't include percentage
225
+ } else {
226
+ $progress = sprintf( '<span class="step">%s.</span><span class="output">%s</span>', $this->step, $output );
227
+ }
228
+
229
+ // Raw text
230
+ } else {
231
+ $progress = $output;
232
+ }
233
 
234
  // Output
235
  wp_send_json_success( array(
249
  * @since 2.6.0 bbPress (r6460)
250
  */
251
  private function maybe_set_memory() {
252
+
253
+ // Filter args
254
+ $r = apply_filters( 'bbp_converter_php_ini_overrides', array(
255
+ 'implicit_flush' => '1',
256
+ 'memory_limit' => '256M',
257
+ 'max_execution_time' => HOUR_IN_SECONDS * 6
258
+ ) );
259
+
260
+ // Get disabled PHP functions (to avoid using them)
261
+ $disabled = explode( ',', @ini_get( 'disable_functions' ) );
262
+
263
+ // Maybe avoid terminating when the client goes away (if function is not disabled)
264
+ if ( ! in_array( 'ignore_user_abort', $disabled, true ) ) {
265
+ @ignore_user_abort( true );
266
+ }
267
+
268
+ // Maybe set memory & time limits, and flush style (if function is not disabled)
269
+ if ( ! in_array( 'ini_set', $disabled, true ) ) {
270
+ foreach ( $r as $key => $value ) {
271
+ @ini_set( $key, $value );
272
+ }
273
  }
274
  }
275
 
455
  * @since 2.6.0 bbPress (r6460)
456
  */
457
  private function bump_start() {
458
+
459
+ // Set rows in step from option
460
+ $this->rows_in_step = get_option( '_bbp_converter_rows_in_step', 0 );
461
+
462
+ // Get rows to start from
463
  $start = (int) ( $this->start + $this->rows );
464
 
465
+ // Enforce maximum if exists
466
+ if ( $this->rows_in_step > 0 ) {
467
+
468
+ // Start cannot be larger than total rows
469
+ if ( $start > $this->rows_in_step ) {
470
+ $start = $this->rows_in_step;
471
+ }
472
+
473
+ // Max can't be greater than total rows
474
+ if ( $this->max > $this->rows_in_step ) {
475
+ $this->max = $this->rows_in_step;
476
+ }
477
+ }
478
+
479
+ // Update the start option
480
  update_option( '_bbp_converter_start', $start );
481
  }
482
 
505
  */
506
  private function step_sync_table() {
507
  if ( true === $this->converter->clean ) {
508
+ if ( $this->converter->clean() ) {
509
  $this->bump_step();
510
  $this->sync_table( true );
511
 
514
  : $this->converter_response( esc_html__( 'Sync-table ready', 'bbpress' ) );
515
  } else {
516
  $this->bump_start();
517
+ $this->converter_response( sprintf( esc_html__( 'Deleting previously converted data (%1$s through %2$s)', 'bbpress' ), $this->start, $this->max ) );
518
  }
519
 
520
  $this->converter->clean = false;
540
  : $this->converter_response( esc_html__( 'All users imported', 'bbpress' ) );
541
  } else {
542
  $this->bump_start();
543
+ $this->converter_response( sprintf( esc_html__( 'Converting users (%1$s through %2$s of %3$s)', 'bbpress' ), $this->start, $this->max, $this->rows_in_step ) );
544
  }
545
  } else {
546
  $this->bump_step();
563
  : $this->converter_response( esc_html__( 'All passwords cleared', 'bbpress' ) );
564
  } else {
565
  $this->bump_start();
566
+ $this->converter_response( sprintf( esc_html__( 'Delete default WordPress user passwords (%1$s through %2$s)', 'bbpress' ), $this->start, $this->max ) );
567
  }
568
  } else {
569
  $this->bump_step();
includes/admin/classes/class-bbp-topic-replies-list-table.php CHANGED
@@ -33,13 +33,16 @@ class BBP_Topic_Replies_List_Table extends WP_List_Table {
33
  * @since 2.6.0 bbPress (r5886)
34
  */
35
  public function __construct( $args = array() ) {
36
- $args = array(
 
 
37
  'singular' => 'reply',
38
  'plural' => 'replies',
39
  'ajax' => false
40
- );
41
- parent::__construct( $args );
42
- }
 
43
 
44
  /**
45
  * Setup the list-table columns
@@ -194,19 +197,33 @@ class BBP_Topic_Replies_List_Table extends WP_List_Table {
194
  // Query parameters
195
  $per_page = 5;
196
  $current_page = $this->get_pagenum();
197
- $orderby = ( ! empty( $_REQUEST['orderby'] ) ) ? sanitize_key( $_REQUEST['orderby'] ) : 'date';
198
- $order = ( ! empty( $_REQUEST['order'] ) ) ? sanitize_key( $_REQUEST['order'] ) : 'asc';
 
 
 
 
 
 
 
 
 
 
 
 
 
199
 
200
  // Query for replies
201
  $reply_query = new WP_Query( array(
202
  'post_type' => bbp_get_reply_post_type(),
 
203
  'post_parent' => $topic_id,
204
  'posts_per_page' => $per_page,
205
  'paged' => $current_page,
206
  'orderby' => $orderby,
207
  'order' => ucwords( $order ),
208
  'hierarchical' => false,
209
- 'ignore_sticky_posts' => true,
210
  ) );
211
 
212
  // Get the total number of replies, for pagination
@@ -245,7 +262,7 @@ class BBP_Topic_Replies_List_Table extends WP_List_Table {
245
  // Top
246
  $this->display_tablenav( 'top' ); ?>
247
 
248
- <table class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>">
249
  <thead>
250
  <tr>
251
  <?php $this->print_column_headers(); ?>
33
  * @since 2.6.0 bbPress (r5886)
34
  */
35
  public function __construct( $args = array() ) {
36
+
37
+ // Parse arguments
38
+ $args = bbp_parse_args( $args, array(
39
  'singular' => 'reply',
40
  'plural' => 'replies',
41
  'ajax' => false
42
+ ), 'topic_replies_list_table' );
43
+
44
+ // Construct the list table
45
+ parent::__construct( $args ); }
46
 
47
  /**
48
  * Setup the list-table columns
197
  // Query parameters
198
  $per_page = 5;
199
  $current_page = $this->get_pagenum();
200
+ $orderby = ! empty( $_REQUEST['orderby'] ) ? sanitize_key( $_REQUEST['orderby'] ) : 'date';
201
+ $order = ! empty( $_REQUEST['order'] ) ? sanitize_key( $_REQUEST['order'] ) : 'asc';
202
+ $statuses = bbp_get_public_reply_statuses();
203
+
204
+ // Maybe add private statuses to query
205
+ if ( current_user_can( 'edit_others_replies' ) ) {
206
+
207
+ // Default view=all statuses
208
+ $statuses = array_keys( bbp_get_topic_statuses() );
209
+
210
+ // Add support for private status
211
+ if ( current_user_can( 'read_private_replies' ) ) {
212
+ $statuses[] = bbp_get_private_status_id();
213
+ }
214
+ }
215
 
216
  // Query for replies
217
  $reply_query = new WP_Query( array(
218
  'post_type' => bbp_get_reply_post_type(),
219
+ 'post_status' => $statuses,
220
  'post_parent' => $topic_id,
221
  'posts_per_page' => $per_page,
222
  'paged' => $current_page,
223
  'orderby' => $orderby,
224
  'order' => ucwords( $order ),
225
  'hierarchical' => false,
226
+ 'ignore_sticky_posts' => true
227
  ) );
228
 
229
  // Get the total number of replies, for pagination
262
  // Top
263
  $this->display_tablenav( 'top' ); ?>
264
 
265
+ <table id="bbp-reply-list" class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>">
266
  <thead>
267
  <tr>
268
  <?php $this->print_column_headers(); ?>
includes/admin/common.php CHANGED
@@ -29,13 +29,13 @@ function bbp_admin_separator() {
29
  // Loop through caps, and look for a reason to show the separator
30
  foreach ( $caps as $cap ) {
31
  if ( current_user_can( $cap ) ) {
32
- bbpress()->admin->show_separator = true;
33
  break;
34
  }
35
  }
36
 
37
  // Bail if no separator
38
- if ( false === bbpress()->admin->show_separator ) {
39
  return;
40
  }
41
 
@@ -53,7 +53,7 @@ function bbp_admin_separator() {
53
  * @return mixed True if separator, false if not
54
  */
55
  function bbp_admin_custom_menu_order( $menu_order = false ) {
56
- if ( false === bbpress()->admin->show_separator ) {
57
  return $menu_order;
58
  }
59
 
@@ -71,7 +71,7 @@ function bbp_admin_custom_menu_order( $menu_order = false ) {
71
  function bbp_admin_menu_order( $menu_order ) {
72
 
73
  // Bail if user cannot see any top level bbPress menus
74
- if ( empty( $menu_order ) || ( false === bbpress()->admin->show_separator ) ) {
75
  return $menu_order;
76
  }
77
 
@@ -113,29 +113,6 @@ function bbp_admin_menu_order( $menu_order ) {
113
  return $bbp_menu_order;
114
  }
115
 
116
- /**
117
- * Filter sample permalinks so that certain languages display properly.
118
- *
119
- * @since 2.0.0 bbPress (r3336)
120
- *
121
- * @param string $post_link Custom post type permalink
122
- * @param object $_post Post data object
123
- * @param bool $leavename Optional, defaults to false. Whether to keep post name or page name.
124
- * @param bool $sample Optional, defaults to false. Is it a sample permalink.
125
- *
126
- * @return string The custom post type permalink
127
- */
128
- function bbp_filter_sample_permalink( $post_link, $_post, $leavename = false, $sample = false ) {
129
-
130
- // Bail if not on an admin page and not getting a sample permalink
131
- if ( ! empty( $sample ) && is_admin() && bbp_is_custom_post_type() ) {
132
- return urldecode( $post_link );
133
- }
134
-
135
- // Return post link
136
- return $post_link;
137
- }
138
-
139
  /**
140
  * Sanitize permalink slugs when saving the settings page.
141
  *
@@ -171,52 +148,19 @@ function bbp_sanitize_slug( $slug = '' ) {
171
  *
172
  * @since 2.1.0 bbPress (r3765)
173
  *
174
- * @param type $site_id
175
  */
176
  function bbp_do_uninstall( $site_id = 0 ) {
177
  if ( empty( $site_id ) ) {
178
  $site_id = get_current_blog_id();
179
  }
180
 
181
- switch_to_blog( $site_id );
182
  bbp_delete_options();
183
  bbp_remove_roles();
184
  bbp_remove_caps();
185
  flush_rewrite_rules();
186
- restore_current_blog();
187
- }
188
-
189
- /**
190
- * Redirect user to "What's New" page on activation
191
- *
192
- * @since 2.2.0 bbPress (r4389)
193
- *
194
- * @internal Used internally to redirect bbPress to the about page on activation
195
- *
196
- * @return If no transient, or in network admin, or is bulk activation
197
- */
198
- function bbp_do_activation_redirect() {
199
-
200
- // Bail if no activation redirect
201
- if ( ! get_transient( '_bbp_activation_redirect' ) ) {
202
- return;
203
- }
204
-
205
- // Delete the redirect transient
206
- delete_transient( '_bbp_activation_redirect' );
207
-
208
- // Bail if activating from network, or bulk
209
- if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
210
- return;
211
- }
212
-
213
- // Bail if the current user cannot see the about page
214
- if ( ! current_user_can( 'bbp_about_page' ) ) {
215
- return;
216
- }
217
-
218
- // Redirect to bbPress about page
219
- bbp_redirect( add_query_arg( array( 'page' => 'bbp-about' ), admin_url( 'index.php' ) ) );
220
  }
221
 
222
  /**
29
  // Loop through caps, and look for a reason to show the separator
30
  foreach ( $caps as $cap ) {
31
  if ( current_user_can( $cap ) ) {
32
+ bbp_admin()->show_separator = true;
33
  break;
34
  }
35
  }
36
 
37
  // Bail if no separator
38
+ if ( false === bbp_admin()->show_separator ) {
39
  return;
40
  }
41
 
53
  * @return mixed True if separator, false if not
54
  */
55
  function bbp_admin_custom_menu_order( $menu_order = false ) {
56
+ if ( false === bbp_admin()->show_separator ) {
57
  return $menu_order;
58
  }
59
 
71
  function bbp_admin_menu_order( $menu_order ) {
72
 
73
  // Bail if user cannot see any top level bbPress menus
74
+ if ( empty( $menu_order ) || ( false === bbp_admin()->show_separator ) ) {
75
  return $menu_order;
76
  }
77
 
113
  return $bbp_menu_order;
114
  }
115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  /**
117
  * Sanitize permalink slugs when saving the settings page.
118
  *
148
  *
149
  * @since 2.1.0 bbPress (r3765)
150
  *
151
+ * @param int $site_id
152
  */
153
  function bbp_do_uninstall( $site_id = 0 ) {
154
  if ( empty( $site_id ) ) {
155
  $site_id = get_current_blog_id();
156
  }
157
 
158
+ bbp_switch_to_site( $site_id );
159
  bbp_delete_options();
160
  bbp_remove_roles();
161
  bbp_remove_caps();
162
  flush_rewrite_rules();
163
+ bbp_restore_current_site();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
  }
165
 
166
  /**
includes/admin/converters/XenForo.php CHANGED
@@ -684,7 +684,7 @@ class XenForo extends BBP_Converter_Base {
684
  /**
685
  * This method is to save the salt and password together. That
686
  * way when we authenticate it we can get it out of the database
687
- * as one value. Array values are auto sanitized by wordpress.
688
  */
689
  public function translate_savepass( $field, $row ) {
690
  $pass_array = array( 'hash' => $field, 'salt' => $row['salt'] );
684
  /**
685
  * This method is to save the salt and password together. That
686
  * way when we authenticate it we can get it out of the database
687
+ * as one value. Array values are auto sanitized by WordPress.
688
  */
689
  public function translate_savepass( $field, $row ) {
690
  $pass_array = array( 'hash' => $field, 'salt' => $row['salt'] );
includes/admin/converters/phpBB.php CHANGED
@@ -715,13 +715,13 @@ class phpBB extends BBP_Converter_Base {
715
 
716
  /**
717
  * This method is to save the salt and password together. That
718
- * way when it is authenticate it we can get it out of the database
719
  * as one value.
720
  */
721
  public function callback_savepass( $field, $row ) {
722
  return array(
723
  'hash' => $field,
724
- 'salt' => $row['salt']
725
  );
726
  }
727
 
715
 
716
  /**
717
  * This method is to save the salt and password together. That
718
+ * way when we authenticate it we can get it out of the database
719
  * as one value.
720
  */
721
  public function callback_savepass( $field, $row ) {
722
  return array(
723
  'hash' => $field,
724
+ 'salt' => $row['user_form_salt']
725
  );
726
  }
727
 
includes/admin/converters/vBulletin.php CHANGED
@@ -27,7 +27,7 @@ class vBulletin extends BBP_Converter_Base {
27
  /**
28
  * Sets up the field mappings
29
  */
30
- private function setup_globals() {
31
 
32
  // Setup smiley URL & path
33
  $this->bbcode_parser_properties = array(
27
  /**
28
  * Sets up the field mappings
29
  */
30
+ public function setup_globals() {
31
 
32
  // Setup smiley URL & path
33
  $this->bbcode_parser_properties = array(
includes/admin/converters/vBulletin3.php CHANGED
@@ -27,7 +27,7 @@ class vBulletin3 extends BBP_Converter_Base {
27
  /**
28
  * Sets up the field mappings
29
  */
30
- private function setup_globals() {
31
 
32
  // Setup smiley URL & path
33
  $this->bbcode_parser_properties = array(
27
  /**
28
  * Sets up the field mappings
29
  */
30
+ public function setup_globals() {
31
 
32
  // Setup smiley URL & path
33
  $this->bbcode_parser_properties = array(
includes/admin/forums.php CHANGED
@@ -66,8 +66,8 @@ class BBP_Forums_Admin {
66
  add_action( 'save_post', array( $this, 'save_meta_boxes' ) );
67
 
68
  // Check if there are any bbp_toggle_forum_* requests on admin_init, also have a message displayed
69
- add_action( 'load-edit.php', array( $this, 'toggle_forum' ) );
70
- add_action( 'admin_notices', array( $this, 'toggle_forum_notice' ) );
71
 
72
  // Contextual Help
73
  add_action( 'load-edit.php', array( $this, 'edit_help' ) );
@@ -123,9 +123,10 @@ class BBP_Forums_Admin {
123
  'content' =>
124
  '<p>' . __( 'Hovering over a row in the forums list will display action links that allow you to manage your forum. You can perform the following actions:', 'bbpress' ) . '</p>' .
125
  '<ul>' .
126
- '<li>' . __( '<strong>Edit</strong> takes you to the editing screen for that forum. You can also reach that screen by clicking on the forum title.', 'bbpress' ) . '</li>' .
127
- '<li>' . __( '<strong>Trash</strong> removes your forum from this list and places it in the trash, from which you can permanently delete it.', 'bbpress' ) . '</li>' .
128
- '<li>' . __( '<strong>View</strong> will show you what your draft forum will look like if you publish it. View will take you to your live site to view the forum. Which link is available depends on your forum&#8217;s status.', 'bbpress' ) . '</li>' .
 
129
  '</ul>'
130
  ) );
131
 
@@ -210,7 +211,7 @@ class BBP_Forums_Admin {
210
  public function attributes_metabox() {
211
  add_meta_box(
212
  'bbp_forum_attributes',
213
- __( 'Forum Attributes', 'bbpress' ),
214
  'bbp_forum_metabox',
215
  $this->post_type,
216
  'side',
@@ -233,7 +234,7 @@ class BBP_Forums_Admin {
233
  // Moderators
234
  add_meta_box(
235
  'bbp_moderator_assignment_metabox',
236
- __( 'Forum Moderators', 'bbpress' ),
237
  'bbp_moderator_assignment_metabox',
238
  $this->post_type,
239
  'side',
@@ -263,7 +264,7 @@ class BBP_Forums_Admin {
263
  // Add the meta-box
264
  add_meta_box(
265
  'bbp_forum_subscriptions_metabox',
266
- __( 'Subscriptions', 'bbpress' ),
267
  'bbp_forum_subscriptions_metabox',
268
  $this->post_type,
269
  'normal',
@@ -357,12 +358,12 @@ class BBP_Forums_Admin {
357
  // Bail if forum is missing
358
  $forum_id = bbp_get_forum_id( $_GET['forum_id'] );
359
  if ( ! bbp_get_forum( $forum_id ) ) {
360
- wp_die( __( 'The forum was not found.', 'bbpress' ) );
361
  }
362
 
363
  // What is the user doing here?
364
  if ( ! current_user_can( 'edit_forum', $forum_id ) ) {
365
- wp_die( __( 'You do not have permission to do that.', 'bbpress' ) );
366
  }
367
 
368
  // Defaults
@@ -417,7 +418,7 @@ class BBP_Forums_Admin {
417
  */
418
  public function toggle_forum_notice() {
419
 
420
- // Bail if missing topic toggle action
421
  if ( ! bbp_is_get_request() || empty( $_GET['forum_id'] ) || empty( $_GET['bbp_forum_toggle_notice'] ) ) {
422
  return;
423
  }
@@ -447,14 +448,14 @@ class BBP_Forums_Admin {
447
  switch ( $notice ) {
448
  case 'opened' :
449
  $message = ( $is_failure === true )
450
- ? sprintf( __( 'There was a problem opening the forum "%1$s".', 'bbpress' ), $forum_title )
451
- : sprintf( __( 'Forum "%1$s" successfully opened.', 'bbpress' ), $forum_title );
452
  break;
453
 
454
  case 'closed' :
455
  $message = ( $is_failure === true )
456
- ? sprintf( __( 'There was a problem closing the forum "%1$s".', 'bbpress' ), $forum_title )
457
- : sprintf( __( 'Forum "%1$s" successfully closed.', 'bbpress' ), $forum_title );
458
  break;
459
  }
460
 
@@ -464,13 +465,28 @@ class BBP_Forums_Admin {
464
  ? 'error'
465
  : 'updated';
466
 
467
- ?>
 
 
468
 
469
- <div id="message" class="<?php echo esc_html( $class ); ?> fade">
470
- <p style="line-height: 150%"><?php echo esc_html( $message ); ?></p>
471
- </div>
 
 
 
 
 
472
 
473
- <?php
 
 
 
 
 
 
 
 
474
  }
475
 
476
  /**
@@ -518,13 +534,13 @@ class BBP_Forums_Admin {
518
  // Set list table column headers
519
  $columns = array(
520
  'cb' => '<input type="checkbox" />',
521
- 'title' => __( 'Forum', 'bbpress' ),
522
- 'bbp_forum_topic_count' => __( 'Topics', 'bbpress' ),
523
- 'bbp_forum_reply_count' => __( 'Replies', 'bbpress' ),
524
- 'bbp_forum_mods' => __( 'Moderators', 'bbpress' ),
525
- 'author' => __( 'Creator', 'bbpress' ),
526
- 'bbp_forum_created' => __( 'Created' , 'bbpress' ),
527
- 'bbp_forum_freshness' => __( 'Last Post', 'bbpress' )
528
  );
529
 
530
  // Remove forum mods column if not enabled
@@ -595,12 +611,14 @@ class BBP_Forums_Admin {
595
  *
596
  * @since 2.0.0 bbPress (r2577)
597
  *
598
- * @param array $actions Actions
599
- * @param array $forum Forum object
 
600
  * @return array $actions Actions
601
  */
602
- public function row_actions( $actions, $forum ) {
603
 
 
604
  unset( $actions['inline hide-if-no-js'] );
605
 
606
  // Only show the actions if the user is capable of viewing them :)
@@ -620,7 +638,37 @@ class BBP_Forums_Admin {
620
  // simple hack to show the forum description under the title
621
  bbp_forum_content( $forum->ID );
622
 
623
- return $actions;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
624
  }
625
 
626
  /**
@@ -650,50 +698,50 @@ class BBP_Forums_Admin {
650
  // Updated
651
  1 => sprintf(
652
  '%1$s <a href="%2$s">%3$s</a>',
653
- __( 'Forum updated.', 'bbpress' ),
654
  $forum_url,
655
- __( 'View forum', 'bbpress' )
656
  ),
657
 
658
  // Custom field updated
659
- 2 => __( 'Custom field updated.', 'bbpress' ),
660
 
661
  // Custom field deleted
662
- 3 => __( 'Custom field deleted.', 'bbpress' ),
663
 
664
  // Forum updated
665
- 4 => __( 'Forum updated.', 'bbpress' ),
666
 
667
  // Restored from revision
668
  // translators: %s: date and time of the revision
669
  5 => isset( $_GET['revision'] )
670
- ? sprintf( __( 'Forum restored to revision from %s', 'bbpress' ), wp_post_revision_title( (int) $_GET['revision'], false ) )
671
- : false,
672
 
673
  // Forum created
674
  6 => sprintf(
675
  '%1$s <a href="%2$s">%3$s</a>',
676
- __( 'Forum created.', 'bbpress' ),
677
  $forum_url,
678
- __( 'View forum', 'bbpress' )
679
  ),
680
 
681
  // Forum saved
682
- 7 => __( 'Forum saved.', 'bbpress' ),
683
 
684
  // Forum submitted
685
  8 => sprintf(
686
  '%1$s <a href="%2$s" target="_blank">%3$s</a>',
687
- __( 'Forum submitted.', 'bbpress' ),
688
  esc_url( add_query_arg( 'preview', 'true', $forum_url ) ),
689
- __( 'Preview forum', 'bbpress' )
690
  ),
691
 
692
  // Forum scheduled
693
  9 => sprintf(
694
  '%1$s <a target="_blank" href="%2$s">%3$s</a>',
695
  sprintf(
696
- __( 'Forum scheduled for: %s.', 'bbpress' ),
697
  // translators: Publish box date format, see http://php.net/date
698
  '<strong>' . date_i18n( __( 'M j, Y @ G:i', 'bbpress' ), strtotime( $post_date ) ) . '</strong>'
699
  ),
@@ -704,9 +752,9 @@ class BBP_Forums_Admin {
704
  // Forum draft updated
705
  10 => sprintf(
706
  '%1$s <a href="%2$s" target="_blank">%3$s</a>',
707
- __( 'Forum draft updated.', 'bbpress' ),
708
  esc_url( add_query_arg( 'preview', 'true', $forum_url ) ),
709
- __( 'Preview forum', 'bbpress' )
710
  ),
711
  );
712
 
@@ -733,5 +781,5 @@ function bbp_admin_forums( $current_screen ) {
733
  }
734
 
735
  // Init the forums admin
736
- bbpress()->admin->forums = new BBP_Forums_Admin();
737
  }
66
  add_action( 'save_post', array( $this, 'save_meta_boxes' ) );
67
 
68
  // Check if there are any bbp_toggle_forum_* requests on admin_init, also have a message displayed
69
+ add_action( 'load-edit.php', array( $this, 'toggle_forum' ) );
70
+ add_action( 'load-edit.php', array( $this, 'toggle_forum_notice' ) );
71
 
72
  // Contextual Help
73
  add_action( 'load-edit.php', array( $this, 'edit_help' ) );
123
  'content' =>
124
  '<p>' . __( 'Hovering over a row in the forums list will display action links that allow you to manage your forum. You can perform the following actions:', 'bbpress' ) . '</p>' .
125
  '<ul>' .
126
+ '<li>' . __( '<strong>Edit</strong> takes you to the editing screen for that forum. You can also reach that screen by clicking on the forum title.', 'bbpress' ) . '</li>' .
127
+ '<li>' . __( '<strong>Close</strong> will mark the selected forum as &#8217;closed&#8217 and disable the ability to post new topics and replies in it.', 'bbpress' ) . '</li>' .
128
+ '<li>' . __( '<strong>Trash</strong> removes your forum from this list and places it in the trash, from which you can permanently delete it.', 'bbpress' ) . '</li>' .
129
+ '<li>' . __( '<strong>View</strong> will either show you what your draft forum will look like if you publish it, or take you to your live site to view it. Which link depends on your forum&#8217;s status.', 'bbpress' ) . '</li>' .
130
  '</ul>'
131
  ) );
132
 
211
  public function attributes_metabox() {
212
  add_meta_box(
213
  'bbp_forum_attributes',
214
+ esc_html__( 'Forum Attributes', 'bbpress' ),
215
  'bbp_forum_metabox',
216
  $this->post_type,
217
  'side',
234
  // Moderators
235
  add_meta_box(
236
  'bbp_moderator_assignment_metabox',
237
+ esc_html__( 'Forum Moderators', 'bbpress' ),
238
  'bbp_moderator_assignment_metabox',
239
  $this->post_type,
240
  'side',
264
  // Add the meta-box
265
  add_meta_box(
266
  'bbp_forum_subscriptions_metabox',
267
+ esc_html__( 'Subscriptions', 'bbpress' ),
268
  'bbp_forum_subscriptions_metabox',
269
  $this->post_type,
270
  'normal',
358
  // Bail if forum is missing
359
  $forum_id = bbp_get_forum_id( $_GET['forum_id'] );
360
  if ( ! bbp_get_forum( $forum_id ) ) {
361
+ wp_die( esc_html__( 'The forum was not found.', 'bbpress' ) );
362
  }
363
 
364
  // What is the user doing here?
365
  if ( ! current_user_can( 'edit_forum', $forum_id ) ) {
366
+ wp_die( esc_html__( 'You do not have permission to do that.', 'bbpress' ) );
367
  }
368
 
369
  // Defaults
418
  */
419
  public function toggle_forum_notice() {
420
 
421
+ // Bail if missing forum toggle action
422
  if ( ! bbp_is_get_request() || empty( $_GET['forum_id'] ) || empty( $_GET['bbp_forum_toggle_notice'] ) ) {
423
  return;
424
  }
448
  switch ( $notice ) {
449
  case 'opened' :
450
  $message = ( $is_failure === true )
451
+ ? sprintf( esc_html__( 'There was a problem opening the forum "%1$s".', 'bbpress' ), $forum_title )
452
+ : sprintf( esc_html__( 'Forum "%1$s" successfully opened.', 'bbpress' ), $forum_title );
453
  break;
454
 
455
  case 'closed' :
456
  $message = ( $is_failure === true )
457
+ ? sprintf( esc_html__( 'There was a problem closing the forum "%1$s".', 'bbpress' ), $forum_title )
458
+ : sprintf( esc_html__( 'Forum "%1$s" successfully closed.', 'bbpress' ), $forum_title );
459
  break;
460
  }
461
 
465
  ? 'error'
466
  : 'updated';
467
 
468
+ // Add the notice
469
+ bbp_admin()->add_notice( $message, $class, true );
470
+ }
471
 
472
+ /**
473
+ * Returns an array of keys used to sort row actions
474
+ *
475
+ * @since 2.6.0 bbPress (r6771)
476
+ *
477
+ * @return array
478
+ */
479
+ private function get_row_action_sort_order() {
480
 
481
+ // Filter & return
482
+ return (array) apply_filters( 'bbp_admin_forum_row_action_sort_order', array(
483
+ 'edit',
484
+ 'closed',
485
+ 'trash',
486
+ 'untrash',
487
+ 'delete',
488
+ 'view'
489
+ ) );
490
  }
491
 
492
  /**
534
  // Set list table column headers
535
  $columns = array(
536
  'cb' => '<input type="checkbox" />',
537
+ 'title' => esc_html__( 'Forum', 'bbpress' ),
538
+ 'bbp_forum_topic_count' => esc_html__( 'Topics', 'bbpress' ),
539
+ 'bbp_forum_reply_count' => esc_html__( 'Replies', 'bbpress' ),
540
+ 'bbp_forum_mods' => esc_html__( 'Moderators', 'bbpress' ),
541
+ 'author' => esc_html__( 'Creator', 'bbpress' ),
542
+ 'bbp_forum_created' => esc_html__( 'Created' , 'bbpress' ),
543
+ 'bbp_forum_freshness' => esc_html__( 'Last Post', 'bbpress' )
544
  );
545
 
546
  // Remove forum mods column if not enabled
611
  *
612
  * @since 2.0.0 bbPress (r2577)
613
  *
614
+ * @param array $actions Actions
615
+ * @param object $forum Forum object
616
+ *
617
  * @return array $actions Actions
618
  */
619
+ public function row_actions( $actions = array(), $forum = false ) {
620
 
621
+ // Disable quick edit (too much to do here)
622
  unset( $actions['inline hide-if-no-js'] );
623
 
624
  // Only show the actions if the user is capable of viewing them :)
638
  // simple hack to show the forum description under the title
639
  bbp_forum_content( $forum->ID );
640
 
641
+ // Sort & return
642
+ return $this->sort_row_actions( $actions );
643
+ }
644
+
645
+ /**
646
+ * Sort row actions by key
647
+ *
648
+ * @since 2.6.0
649
+ *
650
+ * @param array $actions
651
+ *
652
+ * @return array
653
+ */
654
+ private function sort_row_actions( $actions = array() ) {
655
+
656
+ // Return value
657
+ $retval = array();
658
+
659
+ // Known row actions, in sort order
660
+ $known_actions = $this->get_row_action_sort_order();
661
+
662
+ // Sort known actions, and keep any unknown ones
663
+ foreach ( $known_actions as $key ) {
664
+ if ( isset( $actions[ $key ] ) ) {
665
+ $retval[ $key ] = $actions[ $key ];
666
+ unset( $actions[ $key ] );
667
+ }
668
+ }
669
+
670
+ // Combine & return
671
+ return $retval + $actions;
672
  }
673
 
674
  /**
698
  // Updated
699
  1 => sprintf(
700
  '%1$s <a href="%2$s">%3$s</a>',
701
+ esc_html__( 'Forum updated.', 'bbpress' ),
702
  $forum_url,
703
+ esc_html__( 'View forum', 'bbpress' )
704
  ),
705
 
706
  // Custom field updated
707
+ 2 => esc_html__( 'Custom field updated.', 'bbpress' ),
708
 
709
  // Custom field deleted
710
+ 3 => esc_html__( 'Custom field deleted.', 'bbpress' ),
711
 
712
  // Forum updated
713
+ 4 => esc_html__( 'Forum updated.', 'bbpress' ),
714
 
715
  // Restored from revision
716
  // translators: %s: date and time of the revision
717
  5 => isset( $_GET['revision'] )
718
+ ? sprintf( esc_html__( 'Forum restored to revision from %s', 'bbpress' ), wp_post_revision_title( (int) $_GET['revision'], false ) )
719
+ : false,
720
 
721
  // Forum created
722
  6 => sprintf(
723
  '%1$s <a href="%2$s">%3$s</a>',
724
+ esc_html__( 'Forum created.', 'bbpress' ),
725
  $forum_url,
726
+ esc_html__( 'View forum', 'bbpress' )
727
  ),
728
 
729
  // Forum saved
730
+ 7 => esc_html__( 'Forum saved.', 'bbpress' ),
731
 
732
  // Forum submitted
733
  8 => sprintf(
734
  '%1$s <a href="%2$s" target="_blank">%3$s</a>',
735
+ esc_html__( 'Forum submitted.', 'bbpress' ),
736
  esc_url( add_query_arg( 'preview', 'true', $forum_url ) ),
737
+ esc_html__( 'Preview forum', 'bbpress' )
738
  ),
739
 
740
  // Forum scheduled
741
  9 => sprintf(
742
  '%1$s <a target="_blank" href="%2$s">%3$s</a>',
743
  sprintf(
744
+ esc_html__( 'Forum scheduled for: %s.', 'bbpress' ),
745
  // translators: Publish box date format, see http://php.net/date
746
  '<strong>' . date_i18n( __( 'M j, Y @ G:i', 'bbpress' ), strtotime( $post_date ) ) . '</strong>'
747
  ),
752
  // Forum draft updated
753
  10 => sprintf(
754
  '%1$s <a href="%2$s" target="_blank">%3$s</a>',
755
+ esc_html__( 'Forum draft updated.', 'bbpress' ),
756
  esc_url( add_query_arg( 'preview', 'true', $forum_url ) ),
757
+ esc_html__( 'Preview forum', 'bbpress' )
758
  ),
759
  );
760
 
781
  }
782
 
783
  // Init the forums admin
784
+ bbp_admin()->forums = new BBP_Forums_Admin();
785
  }
includes/admin/metaboxes.php CHANGED
@@ -35,7 +35,7 @@ function bbp_filter_dashboard_glance_items( $elements = array() ) {
35
  'count_spammed_replies' => false,
36
  'count_trashed_replies' => false,
37
  'count_empty_tags' => false
38
- ));
39
 
40
  // Users
41
  if ( isset( $r['user_count'] ) ) {
@@ -555,9 +555,9 @@ function bbp_reply_metabox( $post ) {
555
  *
556
  * @since 2.6.0 bbPress (r5886)
557
  *
558
- * @param type $topic
559
  *
560
- * @return type
561
  */
562
  function bbp_topic_replies_metabox( $topic = false ) {
563
 
@@ -568,7 +568,7 @@ function bbp_topic_replies_metabox( $topic = false ) {
568
 
569
  // Pull in the list table class
570
  if ( ! class_exists( 'BBP_Topic_Replies_List_Table' ) ) {
571
- require_once bbpress()->admin->admin_dir . '/classes/class-bbp-topic-replies-list-table.php';
572
  }
573
 
574
  // Look for pagination value
@@ -748,7 +748,9 @@ function bbp_topic_subscriptions_metabox( $post ) {
748
  $user_ids = bbp_get_subscribers( $post->ID );
749
 
750
  // Output
751
- ?><p><?php
 
 
752
 
753
  // Relationships
754
  $args = array(
35
  'count_spammed_replies' => false,
36
  'count_trashed_replies' => false,
37
  'count_empty_tags' => false
38
+ ) );
39
 
40
  // Users
41
  if ( isset( $r['user_count'] ) ) {
555
  *
556
  * @since 2.6.0 bbPress (r5886)
557
  *
558
+ * @param object $topic
559
  *
560
+ * @return void
561
  */
562
  function bbp_topic_replies_metabox( $topic = false ) {
563
 
568
 
569
  // Pull in the list table class
570
  if ( ! class_exists( 'BBP_Topic_Replies_List_Table' ) ) {
571
+ require_once bbp_admin()->admin_dir . '/classes/class-bbp-topic-replies-list-table.php';
572
  }
573
 
574
  // Look for pagination value
748
  $user_ids = bbp_get_subscribers( $post->ID );
749
 
750
  // Output
751
+ ?>
752
+ <input name="bbp_topic_subscription" id="bbp_topic_subscription" type="hidden" value="bbp_subscribe" <?php bbp_form_topic_subscribed(); ?> />
753
+ <p><?php
754
 
755
  // Relationships
756
  $args = array(
includes/admin/replies.php CHANGED
@@ -73,13 +73,16 @@ class BBP_Replies_Admin {
73
  add_action( 'save_post', array( $this, 'save_meta_boxes' ) );
74
 
75
  // Check if there are any bbp_toggle_reply_* requests on admin_init, also have a message displayed
76
- add_action( 'load-edit.php', array( $this, 'toggle_reply' ) );
77
- add_action( 'admin_notices', array( $this, 'toggle_reply_notice' ) );
78
 
79
  // Add ability to filter topics and replies per forum
80
  add_filter( 'restrict_manage_posts', array( $this, 'filter_dropdown' ) );
81
  add_filter( 'bbp_request', array( $this, 'filter_post_rows' ) );
82
 
 
 
 
83
  // Contextual Help
84
  add_action( 'load-edit.php', array( $this, 'edit_help' ) );
85
  add_action( 'load-post.php', array( $this, 'new_help' ) );
@@ -186,7 +189,7 @@ class BBP_Replies_Admin {
186
 
187
  $publish_box = '<p>' . __( '<strong>Publish</strong> - You can set the terms of publishing your reply in the Publish box. For Status, Visibility, and Publish (immediately), click on the Edit link to reveal more options. Visibility includes options for password-protecting a reply or making it stay at the top of your blog indefinitely (sticky). Publish (immediately) allows you to set a future or past date and time, so you can schedule a reply to be published in the future or backdate a reply.', 'bbpress' ) . '</p>';
188
 
189
- if ( current_theme_supports( 'reply-thumbnails' ) && post_type_supports( 'reply', 'thumbnail' ) ) {
190
  $publish_box .= '<p>' . __( '<strong>Featured Image</strong> - This allows you to associate an image with your reply without inserting it. This is usually useful only if your theme makes use of the featured image as a reply thumbnail on the home page, a custom header, etc.', 'bbpress' ) . '</p>';
191
  }
192
 
@@ -227,9 +230,9 @@ class BBP_Replies_Admin {
227
 
228
  if ( current_user_can( 'moderate' ) ) {
229
  if ( bbp_get_spam_status_id() === get_query_var( 'post_status' ) ) {
230
- $actions['unspam'] = __( 'Unspam', 'bbpress' );
231
  } else {
232
- $actions['spam'] = __( 'Spam', 'bbpress' );
233
  }
234
  }
235
 
@@ -272,7 +275,7 @@ class BBP_Replies_Admin {
272
 
273
  foreach ( (array) $post_ids as $post_id ) {
274
  if ( ! current_user_can( 'moderate', $post_id ) ) {
275
- wp_die( __( 'Sorry, you are not allowed to spam this item.', 'bbpress' ) );
276
  }
277
 
278
  if ( wp_check_post_lock( $post_id ) ) {
@@ -281,7 +284,7 @@ class BBP_Replies_Admin {
281
  }
282
 
283
  if ( ! bbp_spam_reply( $post_id ) ) {
284
- wp_die( __( 'Error in spamming reply.', 'bbpress' ) );
285
  }
286
 
287
  $updated++;
@@ -297,7 +300,7 @@ class BBP_Replies_Admin {
297
 
298
  foreach ( (array) $post_ids as $post_id ) {
299
  if ( ! current_user_can( 'moderate', $post_id ) ) {
300
- wp_die( __( 'Sorry, you are not allowed to unspam this reply.', 'bbpress' ) );
301
  }
302
 
303
  if ( wp_check_post_lock( $post_id ) ) {
@@ -306,7 +309,7 @@ class BBP_Replies_Admin {
306
  }
307
 
308
  if ( ! bbp_unspam_reply( $post_id ) ) {
309
- wp_die( __( 'Error in unspamming reply.', 'bbpress' ) );
310
  }
311
 
312
  $updated++;
@@ -330,7 +333,7 @@ class BBP_Replies_Admin {
330
  public function attributes_metabox() {
331
  add_meta_box(
332
  'bbp_reply_attributes',
333
- __( 'Reply Attributes', 'bbpress' ),
334
  'bbp_reply_metabox',
335
  $this->post_type,
336
  'side',
@@ -355,7 +358,7 @@ class BBP_Replies_Admin {
355
  // Add the meta-box
356
  add_meta_box(
357
  'bbp_author_metabox',
358
- __( 'Author Information', 'bbpress' ),
359
  'bbp_author_metabox',
360
  $this->post_type,
361
  'side',
@@ -453,12 +456,12 @@ class BBP_Replies_Admin {
453
  // Get reply and die if empty
454
  $reply_id = bbp_get_reply_id( $_GET['reply_id'] );
455
  if ( ! bbp_get_reply( $reply_id ) ) {
456
- wp_die( __( 'The reply was not found.', 'bbpress' ) );
457
  }
458
 
459
  // What is the user doing here?
460
  if ( ! current_user_can( 'moderate', $reply_id ) ) {
461
- wp_die( __( 'You do not have permission to do that.', 'bbpress' ) );
462
  }
463
 
464
  // Defaults
@@ -470,13 +473,13 @@ class BBP_Replies_Admin {
470
  case 'bbp_toggle_reply_approve' :
471
  check_admin_referer( 'approve-reply_' . $reply_id );
472
 
473
- $is_approve = bbp_is_reply_pending( $reply_id );
474
  $message = ( true === $is_approve )
475
- ? 'approved'
476
- : 'unapproved';
477
  $success = ( true === $is_approve )
478
- ? bbp_approve_reply( $reply_id )
479
- : bbp_unapprove_reply( $reply_id );
480
 
481
  break;
482
 
@@ -556,26 +559,26 @@ class BBP_Replies_Admin {
556
  switch ( $notice ) {
557
  case 'spammed' :
558
  $message = ( $is_failure === true )
559
- ? sprintf( __( 'There was a problem marking the reply "%1$s" as spam.', 'bbpress' ), $reply_title )
560
- : sprintf( __( 'Reply "%1$s" successfully marked as spam.', 'bbpress' ), $reply_title );
561
  break;
562
 
563
  case 'unspammed' :
564
  $message = ( $is_failure === true )
565
- ? sprintf( __( 'There was a problem unmarking the reply "%1$s" as spam.', 'bbpress' ), $reply_title )
566
- : sprintf( __( 'Reply "%1$s" successfully unmarked as spam.', 'bbpress' ), $reply_title );
567
  break;
568
 
569
  case 'approved' :
570
  $message = ( $is_failure === true )
571
- ? sprintf( __( 'There was a problem approving the reply "%1$s".', 'bbpress' ), $reply_title )
572
- : sprintf( __( 'Reply "%1$s" successfully approved.', 'bbpress' ), $reply_title );
573
  break;
574
 
575
  case 'unapproved' :
576
  $message = ( $is_failure === true )
577
- ? sprintf( __( 'There was a problem unapproving the reply "%1$s".', 'bbpress' ), $reply_title )
578
- : sprintf( __( 'Reply "%1$s" successfully unapproved.', 'bbpress' ), $reply_title );
579
  break;
580
  }
581
 
@@ -585,13 +588,31 @@ class BBP_Replies_Admin {
585
  ? 'error'
586
  : 'updated';
587
 
588
- ?>
 
 
589
 
590
- <div id="message" class="<?php echo esc_html( $class ); ?> fade">
591
- <p style="line-height: 150%"><?php echo esc_html( $message ); ?></p>
592
- </div>
 
 
 
 
 
593
 
594
- <?php
 
 
 
 
 
 
 
 
 
 
 
595
  }
596
 
597
  /**
@@ -640,11 +661,11 @@ class BBP_Replies_Admin {
640
  public function column_headers( $columns ) {
641
  $columns = array(
642
  'cb' => '<input type="checkbox" />',
643
- 'title' => __( 'Title', 'bbpress' ),
644
- 'bbp_reply_forum' => __( 'Forum', 'bbpress' ),
645
- 'bbp_reply_topic' => __( 'Topic', 'bbpress' ),
646
- 'bbp_reply_author' => __( 'Author', 'bbpress' ),
647
- 'bbp_reply_created' => __( 'Created', 'bbpress' ),
648
  );
649
 
650
  // Filter & return
@@ -753,13 +774,14 @@ class BBP_Replies_Admin {
753
  *
754
  * @since 2.0.0 bbPress (r2577)
755
  *
756
- * @param array $actions Actions
757
- * @param array $reply Reply object
758
  *
759
  * @return array $actions Actions
760
  */
761
- public function row_actions( $actions, $reply ) {
762
 
 
763
  unset( $actions['inline hide-if-no-js'] );
764
 
765
  // View link
@@ -781,21 +803,21 @@ class BBP_Replies_Admin {
781
  // Only show the actions if the user is capable of viewing them
782
  if ( current_user_can( 'moderate', $reply->ID ) ) {
783
 
784
- // Show the 'approve' link on pending posts only and 'unapprove' on published posts only
785
  $approve_uri = wp_nonce_url( add_query_arg( array( 'reply_id' => $reply->ID, 'action' => 'bbp_toggle_reply_approve' ), remove_query_arg( array( 'bbp_reply_toggle_notice', 'reply_id', 'failed', 'super' ) ) ), 'approve-reply_' . $reply->ID );
786
- if ( bbp_is_reply_published( $reply->ID ) ) {
787
  $actions['unapproved'] = '<a href="' . esc_url( $approve_uri ) . '" title="' . esc_attr__( 'Unapprove this reply', 'bbpress' ) . '">' . _x( 'Unapprove', 'Unapprove reply', 'bbpress' ) . '</a>';
788
- } elseif ( ! bbp_is_reply_private( $reply->ID ) ) {
789
  $actions['approved'] = '<a href="' . esc_url( $approve_uri ) . '" title="' . esc_attr__( 'Approve this reply', 'bbpress' ) . '">' . _x( 'Approve', 'Approve reply', 'bbpress' ) . '</a>';
790
  }
791
 
792
  // Show the 'spam' link on published and pending replies and 'not spam' on spammed replies
793
- if ( in_array( $reply->post_status, array( bbp_get_public_status_id(), bbp_get_pending_status_id(), bbp_get_spam_status_id() ), true ) ) {
794
  $spam_uri = wp_nonce_url( add_query_arg( array( 'reply_id' => $reply->ID, 'action' => 'bbp_toggle_reply_spam' ), remove_query_arg( array( 'bbp_reply_toggle_notice', 'reply_id', 'failed', 'super' ) ) ), 'spam-reply_' . $reply->ID );
795
- if ( bbp_is_reply_spam( $reply->ID ) ) {
796
- $actions['spam'] = '<a href="' . esc_url( $spam_uri ) . '" title="' . esc_attr__( 'Mark the reply as not spam', 'bbpress' ) . '">' . esc_html__( 'Not spam', 'bbpress' ) . '</a>';
797
- } else {
798
  $actions['spam'] = '<a href="' . esc_url( $spam_uri ) . '" title="' . esc_attr__( 'Mark this reply as spam', 'bbpress' ) . '">' . esc_html__( 'Spam', 'bbpress' ) . '</a>';
 
 
799
  }
800
  }
801
  }
@@ -813,12 +835,40 @@ class BBP_Replies_Admin {
813
 
814
  if ( ( bbp_get_trash_status_id() === $reply->post_status ) || empty( $trash_days ) ) {
815
  $actions['delete'] = "<a class='submitdelete' title='" . esc_attr__( 'Delete this item permanently', 'bbpress' ) . "' href='" . esc_url( get_delete_post_link( $reply->ID, '', true ) ) . "'>" . esc_html__( 'Delete Permanently', 'bbpress' ) . "</a>";
816
- } elseif ( bbp_get_spam_status_id() === $reply->post_status ) {
817
- unset( $actions['trash'] );
818
  }
819
  }
820
 
821
- return $actions;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
822
  }
823
 
824
  /**
@@ -830,17 +880,6 @@ class BBP_Replies_Admin {
830
  */
831
  public function filter_dropdown() {
832
 
833
- // Add "Empty Spam" button for moderators
834
- if ( ! empty( $_GET['post_status'] ) && ( bbp_get_spam_status_id() === $_GET['post_status'] ) && current_user_can( 'moderate' ) ) {
835
- wp_nonce_field( 'bulk-destroy', '_destroy_nonce' );
836
- submit_button(
837
- esc_attr__( 'Empty Spam', 'bbpress' ),
838
- 'button-secondary apply',
839
- 'delete_all',
840
- false
841
- );
842
- }
843
-
844
  // Get which forum is selected
845
  $selected = ! empty( $_GET['bbp_forum_id'] )
846
  ? (int) $_GET['bbp_forum_id']
@@ -853,6 +892,34 @@ class BBP_Replies_Admin {
853
  ) );
854
  }
855
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
856
  /**
857
  * Adjust the request query and include the forum id
858
  *
@@ -901,63 +968,63 @@ class BBP_Replies_Admin {
901
  // Updated
902
  1 => sprintf(
903
  '%1$s <a href="%2$s">%3$s</a>',
904
- __( 'Reply updated.', 'bbpress' ),
905
  $topic_url,
906
- __( 'View topic', 'bbpress' )
907
  ),
908
 
909
  // Custom field updated
910
- 2 => __( 'Custom field updated.', 'bbpress' ),
911
 
912
  // Custom field deleted
913
- 3 => __( 'Custom field deleted.', 'bbpress' ),
914
 
915
  // Reply updated
916
- 4 => __( 'Reply updated.', 'bbpress' ),
917
 
918
  // Restored from revision
919
  // translators: %s: date and time of the revision
920
  5 => isset( $_GET['revision'] )
921
- ? sprintf( __( 'Reply restored to revision from %s', 'bbpress' ), wp_post_revision_title( (int) $_GET['revision'], false ) )
922
  : false,
923
 
924
  // Reply created
925
  6 => sprintf(
926
  '%1$s <a href="%2$s">%3$s</a>',
927
- __( 'Reply created.', 'bbpress' ),
928
  $topic_url,
929
- __( 'View topic', 'bbpress' )
930
  ),
931
 
932
  // Reply saved
933
- 7 => __( 'Reply saved.', 'bbpress' ),
934
 
935
  // Reply submitted
936
  8 => sprintf(
937
  '%1$s <a href="%2$s" target="_blank">%3$s</a>',
938
- __( 'Reply submitted.', 'bbpress' ),
939
  esc_url( add_query_arg( 'preview', 'true', $topic_url ) ),
940
- __( 'Preview topic', 'bbpress' )
941
  ),
942
 
943
  // Reply scheduled
944
  9 => sprintf(
945
  '%1$s <a target="_blank" href="%2$s">%3$s</a>',
946
  sprintf(
947
- __( 'Reply scheduled for: %s.', 'bbpress' ),
948
  // translators: Publish box date format, see http://php.net/date
949
  '<strong>' . date_i18n( __( 'M j, Y @ G:i', 'bbpress' ), strtotime( $post_date ) ) . '</strong>'
950
  ),
951
  $topic_url,
952
- __( 'Preview topic', 'bbpress' )
953
  ),
954
 
955
  // Reply draft updated
956
  10 => sprintf(
957
  '%1$s <a href="%2$s" target="_blank">%3$s</a>',
958
- __( 'Reply draft updated.', 'bbpress' ),
959
  esc_url( add_query_arg( 'preview', 'true', $topic_url ) ),
960
- __( 'Preview topic', 'bbpress' )
961
  ),
962
  );
963
 
@@ -984,5 +1051,5 @@ function bbp_admin_replies( $current_screen ) {
984
  }
985
 
986
  // Init the replies admin
987
- bbpress()->admin->replies = new BBP_Replies_Admin();
988
  }
73
  add_action( 'save_post', array( $this, 'save_meta_boxes' ) );
74
 
75
  // Check if there are any bbp_toggle_reply_* requests on admin_init, also have a message displayed
76
+ add_action( 'load-edit.php', array( $this, 'toggle_reply' ) );
77
+ add_action( 'load-edit.php', array( $this, 'toggle_reply_notice' ) );
78
 
79
  // Add ability to filter topics and replies per forum
80
  add_filter( 'restrict_manage_posts', array( $this, 'filter_dropdown' ) );
81
  add_filter( 'bbp_request', array( $this, 'filter_post_rows' ) );
82
 
83
+ // Empty spam
84
+ add_filter( 'manage_posts_extra_tablenav', array( $this, 'filter_empty_spam' ) );
85
+
86
  // Contextual Help
87
  add_action( 'load-edit.php', array( $this, 'edit_help' ) );
88
  add_action( 'load-post.php', array( $this, 'new_help' ) );
189
 
190
  $publish_box = '<p>' . __( '<strong>Publish</strong> - You can set the terms of publishing your reply in the Publish box. For Status, Visibility, and Publish (immediately), click on the Edit link to reveal more options. Visibility includes options for password-protecting a reply or making it stay at the top of your blog indefinitely (sticky). Publish (immediately) allows you to set a future or past date and time, so you can schedule a reply to be published in the future or backdate a reply.', 'bbpress' ) . '</p>';
191
 
192
+ if ( current_theme_supports( 'reply-thumbnails' ) && post_type_supports( bbp_get_reply_post_type(), 'thumbnail' ) ) {
193
  $publish_box .= '<p>' . __( '<strong>Featured Image</strong> - This allows you to associate an image with your reply without inserting it. This is usually useful only if your theme makes use of the featured image as a reply thumbnail on the home page, a custom header, etc.', 'bbpress' ) . '</p>';
194
  }
195
 
230
 
231
  if ( current_user_can( 'moderate' ) ) {
232
  if ( bbp_get_spam_status_id() === get_query_var( 'post_status' ) ) {
233
+ $actions['unspam'] = esc_html__( 'Unspam', 'bbpress' );
234
  } else {
235
+ $actions['spam'] = esc_html__( 'Spam', 'bbpress' );
236
  }
237
  }
238
 
275
 
276
  foreach ( (array) $post_ids as $post_id ) {
277
  if ( ! current_user_can( 'moderate', $post_id ) ) {
278
+ wp_die( esc_html__( 'Sorry, you are not allowed to spam this item.', 'bbpress' ) );
279
  }
280
 
281
  if ( wp_check_post_lock( $post_id ) ) {
284
  }
285
 
286
  if ( ! bbp_spam_reply( $post_id ) ) {
287
+ wp_die( esc_html__( 'Error in spamming reply.', 'bbpress' ) );
288
  }
289
 
290
  $updated++;
300
 
301
  foreach ( (array) $post_ids as $post_id ) {
302
  if ( ! current_user_can( 'moderate', $post_id ) ) {
303
+ wp_die( esc_html__( 'Sorry, you are not allowed to unspam this reply.', 'bbpress' ) );
304
  }
305
 
306
  if ( wp_check_post_lock( $post_id ) ) {
309
  }
310
 
311
  if ( ! bbp_unspam_reply( $post_id ) ) {
312
+ wp_die( esc_html__( 'Error in unspamming reply.', 'bbpress' ) );
313
  }
314
 
315
  $updated++;
333
  public function attributes_metabox() {
334
  add_meta_box(
335
  'bbp_reply_attributes',
336
+ esc_html__( 'Reply Attributes', 'bbpress' ),
337
  'bbp_reply_metabox',
338
  $this->post_type,
339
  'side',
358
  // Add the meta-box
359
  add_meta_box(
360
  'bbp_author_metabox',
361
+ esc_html__( 'Author Information', 'bbpress' ),
362
  'bbp_author_metabox',
363
  $this->post_type,
364
  'side',
456
  // Get reply and die if empty
457
  $reply_id = bbp_get_reply_id( $_GET['reply_id'] );
458
  if ( ! bbp_get_reply( $reply_id ) ) {
459
+ wp_die( esc_html__( 'The reply was not found.', 'bbpress' ) );
460
  }
461
 
462
  // What is the user doing here?
463
  if ( ! current_user_can( 'moderate', $reply_id ) ) {
464
+ wp_die( esc_html__( 'You do not have permission to do that.', 'bbpress' ) );
465
  }
466
 
467
  // Defaults
473
  case 'bbp_toggle_reply_approve' :
474
  check_admin_referer( 'approve-reply_' . $reply_id );
475
 
476
+ $is_approve = bbp_is_reply_public( $reply_id );
477
  $message = ( true === $is_approve )
478
+ ? 'unpproved'
479
+ : 'approved';
480
  $success = ( true === $is_approve )
481
+ ? bbp_unapprove_reply( $reply_id )
482
+ : bbp_approve_reply( $reply_id );
483
 
484
  break;
485
 
559
  switch ( $notice ) {
560
  case 'spammed' :
561
  $message = ( $is_failure === true )
562
+ ? sprintf( esc_html__( 'There was a problem marking the reply "%1$s" as spam.', 'bbpress' ), $reply_title )
563
+ : sprintf( esc_html__( 'Reply "%1$s" successfully marked as spam.', 'bbpress' ), $reply_title );
564
  break;
565
 
566
  case 'unspammed' :
567
  $message = ( $is_failure === true )
568
+ ? sprintf( esc_html__( 'There was a problem unmarking the reply "%1$s" as spam.', 'bbpress' ), $reply_title )
569
+ : sprintf( esc_html__( 'Reply "%1$s" successfully unmarked as spam.', 'bbpress' ), $reply_title );
570
  break;
571
 
572
  case 'approved' :
573
  $message = ( $is_failure === true )
574
+ ? sprintf( esc_html__( 'There was a problem approving the reply "%1$s".', 'bbpress' ), $reply_title )
575
+ : sprintf( esc_html__( 'Reply "%1$s" successfully approved.', 'bbpress' ), $reply_title );
576
  break;
577
 
578
  case 'unapproved' :
579
  $message = ( $is_failure === true )
580
+ ? sprintf( esc_html__( 'There was a problem unapproving the reply "%1$s".', 'bbpress' ), $reply_title )
581
+ : sprintf( esc_html__( 'Reply "%1$s" successfully unapproved.', 'bbpress' ), $reply_title );
582
  break;
583
  }
584
 
588
  ? 'error'
589
  : 'updated';
590
 
591
+ // Add the notice
592
+ bbp_admin()->add_notice( $message, $class, true );
593
+ }
594
 
595
+ /**
596
+ * Returns an array of keys used to sort row actions
597
+ *
598
+ * @since 2.6.0 bbPress (r6771)
599
+ *
600
+ * @return array
601
+ */
602
+ private function get_row_action_sort_order() {
603
 
604
+ // Filter & return
605
+ return (array) apply_filters( 'bbp_admin_reply_row_action_sort_order', array(
606
+ 'edit',
607
+ 'approved',
608
+ 'unapproved',
609
+ 'spam',
610
+ 'unspam',
611
+ 'trash',
612
+ 'untrash',
613
+ 'delete',
614
+ 'view'
615
+ ) );
616
  }
617
 
618
  /**
661
  public function column_headers( $columns ) {
662
  $columns = array(
663
  'cb' => '<input type="checkbox" />',
664
+ 'title' => esc_html__( 'Title', 'bbpress' ),
665
+ 'bbp_reply_forum' => esc_html__( 'Forum', 'bbpress' ),
666
+ 'bbp_reply_topic' => esc_html__( 'Topic', 'bbpress' ),
667
+ 'bbp_reply_author' => esc_html__( 'Author', 'bbpress' ),
668
+ 'bbp_reply_created' => esc_html__( 'Created', 'bbpress' ),
669
  );
670
 
671
  // Filter & return
774
  *
775
  * @since 2.0.0 bbPress (r2577)
776
  *
777
+ * @param array $actions Actions
778
+ * @param object $reply Reply object
779
  *
780
  * @return array $actions Actions
781
  */
782
+ public function row_actions( $actions = array(), $reply = false ) {
783
 
784
+ // Disable quick edit (too much to do here)
785
  unset( $actions['inline hide-if-no-js'] );
786
 
787
  // View link
803
  // Only show the actions if the user is capable of viewing them
804
  if ( current_user_can( 'moderate', $reply->ID ) ) {
805
 
806
+ // Show the 'approve' link on non-published posts only and 'unapprove' on published posts only
807
  $approve_uri = wp_nonce_url( add_query_arg( array( 'reply_id' => $reply->ID, 'action' => 'bbp_toggle_reply_approve' ), remove_query_arg( array( 'bbp_reply_toggle_notice', 'reply_id', 'failed', 'super' ) ) ), 'approve-reply_' . $reply->ID );
808
+ if ( bbp_is_reply_public( $reply->ID ) ) {
809
  $actions['unapproved'] = '<a href="' . esc_url( $approve_uri ) . '" title="' . esc_attr__( 'Unapprove this reply', 'bbpress' ) . '">' . _x( 'Unapprove', 'Unapprove reply', 'bbpress' ) . '</a>';
810
+ } else {
811
  $actions['approved'] = '<a href="' . esc_url( $approve_uri ) . '" title="' . esc_attr__( 'Approve this reply', 'bbpress' ) . '">' . _x( 'Approve', 'Approve reply', 'bbpress' ) . '</a>';
812
  }
813
 
814
  // Show the 'spam' link on published and pending replies and 'not spam' on spammed replies
815
+ if ( in_array( $reply->post_status, array( bbp_get_public_status_id(), bbp_get_trash_status_id(), bbp_get_pending_status_id(), bbp_get_spam_status_id() ), true ) ) {
816
  $spam_uri = wp_nonce_url( add_query_arg( array( 'reply_id' => $reply->ID, 'action' => 'bbp_toggle_reply_spam' ), remove_query_arg( array( 'bbp_reply_toggle_notice', 'reply_id', 'failed', 'super' ) ) ), 'spam-reply_' . $reply->ID );
817
+ if ( ! bbp_is_reply_spam( $reply->ID ) ) {
 
 
818
  $actions['spam'] = '<a href="' . esc_url( $spam_uri ) . '" title="' . esc_attr__( 'Mark this reply as spam', 'bbpress' ) . '">' . esc_html__( 'Spam', 'bbpress' ) . '</a>';
819
+ } else {
820
+ $actions['unspam'] = '<a href="' . esc_url( $spam_uri ) . '" title="' . esc_attr__( 'Mark the reply as not spam', 'bbpress' ) . '">' . esc_html__( 'Not Spam', 'bbpress' ) . '</a>';
821
  }
822
  }
823
  }
835
 
836
  if ( ( bbp_get_trash_status_id() === $reply->post_status ) || empty( $trash_days ) ) {
837
  $actions['delete'] = "<a class='submitdelete' title='" . esc_attr__( 'Delete this item permanently', 'bbpress' ) . "' href='" . esc_url( get_delete_post_link( $reply->ID, '', true ) ) . "'>" . esc_html__( 'Delete Permanently', 'bbpress' ) . "</a>";
 
 
838
  }
839
  }
840
 
841
+ // Sort & return
842
+ return $this->sort_row_actions( $actions );
843
+ }
844
+
845
+ /**
846
+ * Sort row actions by key
847
+ *
848
+ * @since 2.6.0
849
+ *
850
+ * @param array $actions
851
+ *
852
+ * @return array
853
+ */
854
+ private function sort_row_actions( $actions = array() ) {
855
+
856
+ // Return value
857
+ $retval = array();
858
+
859
+ // Known row actions, in sort order
860
+ $known_actions = $this->get_row_action_sort_order();
861
+
862
+ // Sort known actions, and keep any unknown ones
863
+ foreach ( $known_actions as $key ) {
864
+ if ( isset( $actions[ $key ] ) ) {
865
+ $retval[ $key ] = $actions[ $key ];
866
+ unset( $actions[ $key ] );
867
+ }
868
+ }
869
+
870
+ // Combine & return
871
+ return $retval + $actions;
872
  }
873
 
874
  /**
880
  */
881
  public function filter_dropdown() {
882
 
 
 
 
 
 
 
 
 
 
 
 
883
  // Get which forum is selected
884
  $selected = ! empty( $_GET['bbp_forum_id'] )
885
  ? (int) $_GET['bbp_forum_id']
892
  ) );
893
  }
894
 
895
+ /**
896
+ * Add "Empty Spam" button for moderators
897
+ *
898
+ * @since 2.6.0 bbPress (r6791)
899
+ */
900
+ public function filter_empty_spam() {
901
+
902
+ // Bail if not viewing spam
903
+ if ( empty( $_GET['post_status'] ) || ( bbp_get_spam_status_id() !== $_GET['post_status'] ) && current_user_can( 'moderate' ) ) {
904
+ return;
905
+ }
906
+
907
+ ?>
908
+
909
+ <div class="alignleft actions"><?php
910
+
911
+ // Output the nonce & button
912
+ wp_nonce_field( 'bulk-destroy', '_destroy_nonce' );
913
+ submit_button(
914
+ esc_attr__( 'Empty Spam', 'bbpress' ),
915
+ 'button-secondary apply',
916
+ 'delete_all',
917
+ false
918
+ );
919
+
920
+ ?></div><?php
921
+ }
922
+
923
  /**
924
  * Adjust the request query and include the forum id
925
  *
968
  // Updated
969
  1 => sprintf(
970
  '%1$s <a href="%2$s">%3$s</a>',
971
+ esc_html__( 'Reply updated.', 'bbpress' ),
972
  $topic_url,
973
+ esc_html__( 'View topic', 'bbpress' )
974
  ),
975
 
976
  // Custom field updated
977
+ 2 => esc_html__( 'Custom field updated.', 'bbpress' ),
978
 
979
  // Custom field deleted
980
+ 3 => esc_html__( 'Custom field deleted.', 'bbpress' ),
981
 
982
  // Reply updated
983
+ 4 => esc_html__( 'Reply updated.', 'bbpress' ),
984
 
985
  // Restored from revision
986
  // translators: %s: date and time of the revision
987
  5 => isset( $_GET['revision'] )
988
+ ? sprintf( esc_html__( 'Reply restored to revision from %s', 'bbpress' ), wp_post_revision_title( (int) $_GET['revision'], false ) )
989
  : false,
990
 
991
  // Reply created
992
  6 => sprintf(
993
  '%1$s <a href="%2$s">%3$s</a>',
994
+ esc_html__( 'Reply created.', 'bbpress' ),
995
  $topic_url,
996
+ esc_html__( 'View topic', 'bbpress' )
997
  ),
998
 
999
  // Reply saved
1000
+ 7 => esc_html__( 'Reply saved.', 'bbpress' ),
1001
 
1002
  // Reply submitted
1003
  8 => sprintf(
1004
  '%1$s <a href="%2$s" target="_blank">%3$s</a>',
1005
+ esc_html__( 'Reply submitted.', 'bbpress' ),
1006
  esc_url( add_query_arg( 'preview', 'true', $topic_url ) ),
1007
+ esc_html__( 'Preview topic', 'bbpress' )
1008
  ),
1009
 
1010
  // Reply scheduled
1011
  9 => sprintf(
1012
  '%1$s <a target="_blank" href="%2$s">%3$s</a>',
1013
  sprintf(
1014
+ esc_html__( 'Reply scheduled for: %s.', 'bbpress' ),
1015
  // translators: Publish box date format, see http://php.net/date
1016
  '<strong>' . date_i18n( __( 'M j, Y @ G:i', 'bbpress' ), strtotime( $post_date ) ) . '</strong>'
1017
  ),
1018
  $topic_url,
1019
+ esc_html__( 'Preview topic', 'bbpress' )
1020
  ),
1021
 
1022
  // Reply draft updated
1023
  10 => sprintf(
1024
  '%1$s <a href="%2$s" target="_blank">%3$s</a>',
1025
+ esc_html__( 'Reply draft updated.', 'bbpress' ),
1026
  esc_url( add_query_arg( 'preview', 'true', $topic_url ) ),
1027
+ esc_html__( 'Preview topic', 'bbpress' )
1028
  ),
1029
  );
1030
 
1051
  }
1052
 
1053
  // Init the replies admin
1054
+ bbp_admin()->replies = new BBP_Replies_Admin();
1055
  }
includes/admin/settings.php CHANGED
@@ -97,7 +97,7 @@ function bbp_admin_get_settings_sections() {
97
  *
98
  * @since 2.1.0 bbPress (r4001)
99
  *
100
- * @return type
101
  */
102
  function bbp_admin_get_settings_fields() {
103
 
@@ -492,7 +492,7 @@ function bbp_admin_get_settings_fields() {
492
  'title' => esc_html__( 'Select Platform', 'bbpress' ),
493
  'callback' => 'bbp_converter_setting_callback_platform',
494
  'sanitize_callback' => 'sanitize_text_field',
495
- 'args' => array()
496
  ),
497
 
498
  // Database Server
@@ -500,7 +500,7 @@ function bbp_admin_get_settings_fields() {
500
  'title' => esc_html__( 'Database Server', 'bbpress' ),
501
  'callback' => 'bbp_converter_setting_callback_dbserver',
502
  'sanitize_callback' => 'sanitize_text_field',
503
- 'args' => array()
504
  ),
505
 
506
  // Database Server Port
@@ -508,7 +508,7 @@ function bbp_admin_get_settings_fields() {
508
  'title' => esc_html__( 'Database Port', 'bbpress' ),
509
  'callback' => 'bbp_converter_setting_callback_dbport',
510
  'sanitize_callback' => 'intval',
511
- 'args' => array()
512
  ),
513
 
514
  // Database Name
@@ -516,7 +516,7 @@ function bbp_admin_get_settings_fields() {
516
  'title' => esc_html__( 'Database Name', 'bbpress' ),
517
  'callback' => 'bbp_converter_setting_callback_dbname',
518
  'sanitize_callback' => 'sanitize_text_field',
519
- 'args' => array()
520
  ),
521
 
522
  // Database User
@@ -524,7 +524,7 @@ function bbp_admin_get_settings_fields() {
524
  'title' => esc_html__( 'Database User', 'bbpress' ),
525
  'callback' => 'bbp_converter_setting_callback_dbuser',
526
  'sanitize_callback' => 'sanitize_text_field',
527
- 'args' => array()
528
  ),
529
 
530
  // Database User
@@ -532,7 +532,7 @@ function bbp_admin_get_settings_fields() {
532
  'title' => esc_html__( 'Database Password', 'bbpress' ),
533
  'callback' => 'bbp_converter_setting_callback_dbpass',
534
  'sanitize_callback' => 'sanitize_text_field',
535
- 'args' => array()
536
  ),
537
 
538
  // Database User
@@ -540,7 +540,7 @@ function bbp_admin_get_settings_fields() {
540
  'title' => esc_html__( 'Table Prefix', 'bbpress' ),
541
  'callback' => 'bbp_converter_setting_callback_dbprefix',
542
  'sanitize_callback' => 'sanitize_text_field',
543
- 'args' => array()
544
  )
545
  ),
546
 
@@ -552,7 +552,7 @@ function bbp_admin_get_settings_fields() {
552
  'title' => esc_html__( 'Rows Limit', 'bbpress' ),
553
  'callback' => 'bbp_converter_setting_callback_rows',
554
  'sanitize_callback' => 'intval',
555
- 'args' => array()
556
  ),
557
 
558
  // Delay Time
@@ -560,7 +560,7 @@ function bbp_admin_get_settings_fields() {
560
  'title' => esc_html__( 'Delay Time', 'bbpress' ),
561
  'callback' => 'bbp_converter_setting_callback_delay_time',
562
  'sanitize_callback' => 'intval',
563
- 'args' => array()
564
  ),
565
 
566
  // Convert Users
@@ -568,7 +568,7 @@ function bbp_admin_get_settings_fields() {
568
  'title' => esc_html__( 'Convert Users', 'bbpress' ),
569
  'callback' => 'bbp_converter_setting_callback_convert_users',
570
  'sanitize_callback' => 'intval',
571
- 'args' => array()
572
  ),
573
 
574
  // Halt
@@ -576,7 +576,7 @@ function bbp_admin_get_settings_fields() {
576
  'title' => esc_html__( 'Stop on Error', 'bbpress' ),
577
  'callback' => 'bbp_converter_setting_callback_halt',
578
  'sanitize_callback' => 'intval',
579
- 'args' => array()
580
  ),
581
 
582
  // Restart
@@ -584,7 +584,7 @@ function bbp_admin_get_settings_fields() {
584
  'title' => esc_html__( 'Start Over', 'bbpress' ),
585
  'callback' => 'bbp_converter_setting_callback_restart',
586
  'sanitize_callback' => 'intval',
587
- 'args' => array()
588
  ),
589
 
590
  // Clean
@@ -592,7 +592,7 @@ function bbp_admin_get_settings_fields() {
592
  'title' => esc_html__( 'Helper Data', 'bbpress' ),
593
  'callback' => 'bbp_converter_setting_callback_clean',
594
  'sanitize_callback' => 'intval',
595
- 'args' => array()
596
  )
597
  )
598
  ) );
@@ -1522,7 +1522,7 @@ function bbp_admin_settings() {
1522
  function bbp_converter_setting_callback_main_section() {
1523
  ?>
1524
 
1525
- <p><?php _e( 'Information about your previous forums database so that they can be converted. <strong>Backup your database before proceeding.</strong>', 'bbpress' ); ?></p>
1526
 
1527
  <?php
1528
  }
@@ -1545,7 +1545,7 @@ function bbp_converter_setting_callback_platform() {
1545
  } ?>
1546
 
1547
  <select name="_bbp_converter_platform" id="_bbp_converter_platform"><?php echo $options ?></select>
1548
- <label for="_bbp_converter_platform"><?php esc_html_e( 'is the previous forum software', 'bbpress' ); ?></label>
1549
 
1550
  <?php
1551
  }
@@ -1559,7 +1559,7 @@ function bbp_converter_setting_callback_dbserver() {
1559
  ?>
1560
 
1561
  <input name="_bbp_converter_db_server" id="_bbp_converter_db_server" type="text" class="code" value="<?php bbp_form_option( '_bbp_converter_db_server', 'localhost' ); ?>" <?php bbp_maybe_admin_setting_disabled( '_bbp_converter_db_server' ); ?> />
1562
- <label for="_bbp_converter_db_server"><?php esc_html_e( 'Use default "localhost" if on the same server, otherwise IP or hostname', 'bbpress' ); ?></label>
1563
 
1564
  <?php
1565
  }
@@ -1573,7 +1573,7 @@ function bbp_converter_setting_callback_dbport() {
1573
  ?>
1574
 
1575
  <input name="_bbp_converter_db_port" id="_bbp_converter_db_port" type="text" class="code" value="<?php bbp_form_option( '_bbp_converter_db_port', '3306' ); ?>" <?php bbp_maybe_admin_setting_disabled( '_bbp_converter_db_port' ); ?> />
1576
- <label for="_bbp_converter_db_port"><?php esc_html_e( 'Use default "3306" if unsure', 'bbpress' ); ?></label>
1577
 
1578
  <?php
1579
  }
@@ -1587,7 +1587,7 @@ function bbp_converter_setting_callback_dbuser() {
1587
  ?>
1588
 
1589
  <input name="_bbp_converter_db_user" id="_bbp_converter_db_user" type="text" class="code" value="<?php bbp_form_option( '_bbp_converter_db_user' ); ?>" <?php bbp_maybe_admin_setting_disabled( '_bbp_converter_db_user' ); ?> />
1590
- <label for="_bbp_converter_db_user"><?php esc_html_e( 'User to access the database', 'bbpress' ); ?></label>
1591
 
1592
  <?php
1593
  }
@@ -1601,13 +1601,13 @@ function bbp_converter_setting_callback_dbpass() {
1601
  ?>
1602
 
1603
  <span class="bbp-converter-db-password-wrapper">
1604
- <input name="_bbp_converter_db_pass" id="_bbp_converter_db_pass" class="bbp-converter-db-pass" type="password" class="code" value="<?php bbp_form_option( '_bbp_converter_db_pass' ); ?>" autocomplete="off" <?php bbp_maybe_admin_setting_disabled( '_bbp_converter_db_pass' ); ?> />
1605
  <button type="button" class="bbp-db-pass-toggle password">
1606
  <span class="screen-reader-text"><?php esc_html_e( 'Toggle', 'bbpress' ); ?></span>
1607
  <span class="toggle-indicator" aria-hidden="true"></span>
1608
  </button>
1609
  </span>
1610
- <label for="_bbp_converter_db_pass"><?php esc_html_e( 'Password for the above database user', 'bbpress' ); ?></label>
1611
 
1612
  <?php
1613
  }
@@ -1621,7 +1621,7 @@ function bbp_converter_setting_callback_dbname() {
1621
  ?>
1622
 
1623
  <input name="_bbp_converter_db_name" id="_bbp_converter_db_name" type="text" class="code" value="<?php bbp_form_option( '_bbp_converter_db_name' ); ?>" <?php bbp_maybe_admin_setting_disabled( '_bbp_converter_db_name' ); ?> />
1624
- <label for="_bbp_converter_db_name"><?php esc_html_e( 'Name of the database with your old forum data', 'bbpress' ); ?></label>
1625
 
1626
  <?php
1627
  }
@@ -1648,7 +1648,7 @@ function bbp_converter_setting_callback_dbprefix() {
1648
  ?>
1649
 
1650
  <input name="_bbp_converter_db_prefix" id="_bbp_converter_db_prefix" type="text" class="code" value="<?php bbp_form_option( '_bbp_converter_db_prefix' ); ?>" <?php bbp_maybe_admin_setting_disabled( '_bbp_converter_db_prefix' ); ?> />
1651
- <label for="_bbp_converter_db_prefix"><?php esc_html_e( '(If converting from BuddyPress Forums, use "wp_bb_" or your custom prefix)', 'bbpress' ); ?></label>
1652
 
1653
  <?php
1654
  }
@@ -1755,7 +1755,7 @@ function bbp_converter_settings_page() {
1755
 
1756
  // Status
1757
  $step = (int) get_option( '_bbp_converter_step', 0 );
1758
- $max = (int) bbpress()->admin->converter->max_steps;
1759
 
1760
  // Starting or continuing?
1761
  $status_text = ! empty( $step )
@@ -1777,46 +1777,47 @@ function bbp_converter_settings_page() {
1777
  <hr class="wp-header-end">
1778
  <h2 class="nav-tab-wrapper"><?php bbp_tools_admin_tabs( esc_html__( 'Import Forums', 'bbpress' ) ); ?></h2>
1779
 
1780
- <form action="#" method="post" id="bbp-converter-settings"><?php
1781
-
1782
- // Fields
1783
- settings_fields( 'converter' );
1784
-
1785
- // Sections
1786
- do_settings_sections( 'converter' );
1787
-
1788
- ?>
1789
-
1790
- <p class="submit">
1791
- <input type="button" name="submit" class="button-primary" id="bbp-converter-start" value="<?php echo esc_attr( $start_text ); ?>" />
1792
- <input type="button" name="submit" class="button-primary" id="bbp-converter-stop" value="<?php esc_attr_e( 'Pause', 'bbpress' ); ?>" />
1793
- </p>
1794
- </form>
1795
-
1796
- <div id="poststuff">
1797
- <div id="post-body" class="metabox-holder columns-1">
1798
- <div id="postbox-container-1" class="postbox-container">
1799
- <div id="normal-sortables" class="meta-box-sortables ui-sortable">
1800
- <div id="bbp-converter-monitor" class="postbox">
1801
- <button type="button" class="handlediv" aria-expanded="true">
1802
- <span class="screen-reader-text"><?php esc_html_e( 'Toggle panel: Import Status', 'bbpress' ); ?></span>
1803
- <span class="toggle-indicator" aria-hidden="true"></span>
1804
- </button>
1805
- <h2 class="hndle ui-sortable-handle">
1806
- <span><?php esc_html_e( 'Import Monitor', 'bbpress' ); ?></span>
1807
- <span id="bbp-converter-status"><?php echo esc_html( $status_text ); ?></span>
1808
- <span id="bbp-converter-step-percentage" class="bbp-progress-bar"></span>
1809
- <span id="bbp-converter-total-percentage" class="bbp-progress-bar"></span>
1810
- </h2>
1811
- <div class="inside">
1812
- <div id="bbp-converter-message" class="bbp-converter-log">
1813
- <p><?php echo esc_html( $progress_text ); ?></p>
1814
  </div>
1815
  </div>
1816
  </div>
1817
  </div>
1818
  </div>
1819
  </div>
 
 
 
 
 
 
 
 
 
 
1820
  </div>
1821
  </div>
1822
  <?php
97
  *
98
  * @since 2.1.0 bbPress (r4001)
99
  *
100
+ * @return array
101
  */
102
  function bbp_admin_get_settings_fields() {
103
 
492
  'title' => esc_html__( 'Select Platform', 'bbpress' ),
493
  'callback' => 'bbp_converter_setting_callback_platform',
494
  'sanitize_callback' => 'sanitize_text_field',
495
+ 'args' => array( 'label_for'=> '_bbp_converter_platform' )
496
  ),
497
 
498
  // Database Server
500
  'title' => esc_html__( 'Database Server', 'bbpress' ),
501
  'callback' => 'bbp_converter_setting_callback_dbserver',
502
  'sanitize_callback' => 'sanitize_text_field',
503
+ 'args' => array( 'label_for'=> '_bbp_converter_db_server' )
504
  ),
505
 
506
  // Database Server Port
508
  'title' => esc_html__( 'Database Port', 'bbpress' ),
509
  'callback' => 'bbp_converter_setting_callback_dbport',
510
  'sanitize_callback' => 'intval',
511
+ 'args' => array( 'label_for'=> '_bbp_converter_db_port' )
512
  ),
513
 
514
  // Database Name
516
  'title' => esc_html__( 'Database Name', 'bbpress' ),
517
  'callback' => 'bbp_converter_setting_callback_dbname',
518
  'sanitize_callback' => 'sanitize_text_field',
519
+ 'args' => array( 'label_for'=> '_bbp_converter_db_name' )
520
  ),
521
 
522
  // Database User
524
  'title' => esc_html__( 'Database User', 'bbpress' ),
525
  'callback' => 'bbp_converter_setting_callback_dbuser',
526
  'sanitize_callback' => 'sanitize_text_field',
527
+ 'args' => array( 'label_for'=> '_bbp_converter_db_user' )
528
  ),
529
 
530
  // Database User
532
  'title' => esc_html__( 'Database Password', 'bbpress' ),
533
  'callback' => 'bbp_converter_setting_callback_dbpass',
534
  'sanitize_callback' => 'sanitize_text_field',
535
+ 'args' => array( 'label_for'=> '_bbp_converter_db_pass' )
536
  ),
537
 
538
  // Database User
540
  'title' => esc_html__( 'Table Prefix', 'bbpress' ),
541
  'callback' => 'bbp_converter_setting_callback_dbprefix',
542
  'sanitize_callback' => 'sanitize_text_field',
543
+ 'args' => array( 'label_for'=> '_bbp_converter_db_prefix' )
544
  )
545
  ),
546
 
552
  'title' => esc_html__( 'Rows Limit', 'bbpress' ),
553
  'callback' => 'bbp_converter_setting_callback_rows',
554
  'sanitize_callback' => 'intval',
555
+ 'args' => array( 'label_for'=> '_bbp_converter_rows' )
556
  ),
557
 
558
  // Delay Time
560
  'title' => esc_html__( 'Delay Time', 'bbpress' ),
561
  'callback' => 'bbp_converter_setting_callback_delay_time',
562
  'sanitize_callback' => 'intval',
563
+ 'args' => array( 'label_for'=> '_bbp_converter_delay_time' )
564
  ),
565
 
566
  // Convert Users
568
  'title' => esc_html__( 'Convert Users', 'bbpress' ),
569
  'callback' => 'bbp_converter_setting_callback_convert_users',
570
  'sanitize_callback' => 'intval',
571
+ 'args' => array( 'label_for'=> '_bbp_converter_convert_users' )
572
  ),
573
 
574
  // Halt
576
  'title' => esc_html__( 'Stop on Error', 'bbpress' ),
577
  'callback' => 'bbp_converter_setting_callback_halt',
578
  'sanitize_callback' => 'intval',
579
+ 'args' => array( 'label_for'=> '_bbp_converter_halt' )
580
  ),
581
 
582
  // Restart
584
  'title' => esc_html__( 'Start Over', 'bbpress' ),
585
  'callback' => 'bbp_converter_setting_callback_restart',
586
  'sanitize_callback' => 'intval',
587
+ 'args' => array( 'label_for'=> '_bbp_converter_restart' )
588
  ),
589
 
590
  // Clean
592
  'title' => esc_html__( 'Helper Data', 'bbpress' ),
593
  'callback' => 'bbp_converter_setting_callback_clean',
594
  'sanitize_callback' => 'intval',
595
+ 'args' => array( 'label_for'=> '_bbp_converter_clean' )
596
  )
597
  )
598
  ) );
1522
  function bbp_converter_setting_callback_main_section() {
1523
  ?>
1524
 
1525
+ <p><?php _e( 'Information about the database for your previous forums so they can be converted.', 'bbpress' ); ?></p>
1526
 
1527
  <?php
1528
  }
1545
  } ?>
1546
 
1547
  <select name="_bbp_converter_platform" id="_bbp_converter_platform"><?php echo $options ?></select>
1548
+ <p class="description"><?php esc_html_e( 'The previous forum software', 'bbpress' ); ?></p>
1549
 
1550
  <?php
1551
  }
1559
  ?>
1560
 
1561
  <input name="_bbp_converter_db_server" id="_bbp_converter_db_server" type="text" class="code" value="<?php bbp_form_option( '_bbp_converter_db_server', 'localhost' ); ?>" <?php bbp_maybe_admin_setting_disabled( '_bbp_converter_db_server' ); ?> />
1562
+ <p class="description"><?php printf( esc_html__( 'Use default %s if same server, or IP or hostname', 'bbpress' ), '<code>localhost</code>' ); ?></p>
1563
 
1564
  <?php
1565
  }
1573
  ?>
1574
 
1575
  <input name="_bbp_converter_db_port" id="_bbp_converter_db_port" type="text" class="code" value="<?php bbp_form_option( '_bbp_converter_db_port', '3306' ); ?>" <?php bbp_maybe_admin_setting_disabled( '_bbp_converter_db_port' ); ?> />
1576
+ <p class="description"><?php printf( esc_html__( 'Use default %s if unsure', 'bbpress' ), '<code>3306</code>' ); ?></p>
1577
 
1578
  <?php
1579
  }
1587
  ?>
1588
 
1589
  <input name="_bbp_converter_db_user" id="_bbp_converter_db_user" type="text" class="code" value="<?php bbp_form_option( '_bbp_converter_db_user' ); ?>" <?php bbp_maybe_admin_setting_disabled( '_bbp_converter_db_user' ); ?> />
1590
+ <p class="description"><?php esc_html_e( 'User to access the database', 'bbpress' ); ?></p>
1591
 
1592
  <?php
1593
  }
1601
  ?>
1602
 
1603
  <span class="bbp-converter-db-password-wrapper">
1604
+ <input name="_bbp_converter_db_pass" id="_bbp_converter_db_pass" class="bbp-converter-db-pass code" type="password" value="<?php bbp_form_option( '_bbp_converter_db_pass' ); ?>" autocomplete="off" <?php bbp_maybe_admin_setting_disabled( '_bbp_converter_db_pass' ); ?> />
1605
  <button type="button" class="bbp-db-pass-toggle password">
1606
  <span class="screen-reader-text"><?php esc_html_e( 'Toggle', 'bbpress' ); ?></span>
1607
  <span class="toggle-indicator" aria-hidden="true"></span>
1608
  </button>
1609
  </span>
1610
+ <p class="description"><?php esc_html_e( 'Password for the above database user', 'bbpress' ); ?></p>
1611
 
1612
  <?php
1613
  }
1621
  ?>
1622
 
1623
  <input name="_bbp_converter_db_name" id="_bbp_converter_db_name" type="text" class="code" value="<?php bbp_form_option( '_bbp_converter_db_name' ); ?>" <?php bbp_maybe_admin_setting_disabled( '_bbp_converter_db_name' ); ?> />
1624
+ <p class="description"><?php esc_html_e( 'Name of the database with your old forum data', 'bbpress' ); ?></p>
1625
 
1626
  <?php
1627
  }
1648
  ?>
1649
 
1650
  <input name="_bbp_converter_db_prefix" id="_bbp_converter_db_prefix" type="text" class="code" value="<?php bbp_form_option( '_bbp_converter_db_prefix' ); ?>" <?php bbp_maybe_admin_setting_disabled( '_bbp_converter_db_prefix' ); ?> />
1651
+ <p class="description"><?php printf( esc_html__( 'Use %s if converting from BuddyPress Legacy', 'bbpress' ), '<code>wp_bb_</code>' ); ?></p>
1652
 
1653
  <?php
1654
  }
1755
 
1756
  // Status
1757
  $step = (int) get_option( '_bbp_converter_step', 0 );
1758
+ $max = (int) bbp_admin()->converter->max_steps;
1759
 
1760
  // Starting or continuing?
1761
  $status_text = ! empty( $step )
1777
  <hr class="wp-header-end">
1778
  <h2 class="nav-tab-wrapper"><?php bbp_tools_admin_tabs( esc_html__( 'Import Forums', 'bbpress' ) ); ?></h2>
1779
 
1780
+ <div class="bbp-converter-wrap">
1781
+ <div id="poststuff" class="bbp-converter-monitor-wrap">
1782
+ <div id="post-body" class="metabox-holder columns-1">
1783
+ <div id="postbox-container-1" class="postbox-container">
1784
+ <div id="normal-sortables" class="meta-box-sortables ui-sortable">
1785
+ <div id="bbp-converter-monitor" class="postbox">
1786
+ <button type="button" class="handlediv" aria-expanded="true">
1787
+ <span class="screen-reader-text"><?php esc_html_e( 'Toggle panel: Import Status', 'bbpress' ); ?></span>
1788
+ <span class="toggle-indicator" aria-hidden="true"></span>
1789
+ </button>
1790
+ <h2 class="hndle ui-sortable-handle">
1791
+ <span><?php esc_html_e( 'Import Monitor', 'bbpress' ); ?></span>
1792
+ <span id="bbp-converter-status"><?php echo esc_html( $status_text ); ?></span>
1793
+ <span id="bbp-converter-step-percentage" class="bbp-progress-bar"></span>
1794
+ <span id="bbp-converter-total-percentage" class="bbp-progress-bar"></span>
1795
+ </h2>
1796
+ <div class="inside">
1797
+ <div id="bbp-converter-message" class="bbp-converter-log">
1798
+ <p><?php echo esc_html( $progress_text ); ?></p>
1799
+ </div>
1800
+ </div>
1801
+ <div class="actions">
1802
+ <input type="button" name="submit" class="button-primary" id="bbp-converter-start" value="<?php echo esc_attr( $start_text ); ?>" />
1803
+ <input type="button" name="submit" class="button-primary" id="bbp-converter-stop" value="<?php esc_attr_e( 'Pause', 'bbpress' ); ?>" />
1804
+ <span class="spinner" id="bbp-converter-spinner"></span>
 
 
 
 
 
 
 
 
 
1805
  </div>
1806
  </div>
1807
  </div>
1808
  </div>
1809
  </div>
1810
  </div>
1811
+
1812
+ <form action="#" method="post" id="bbp-converter-settings" class="bbp-converter-settings-wrap"><?php
1813
+
1814
+ // Fields
1815
+ settings_fields( 'converter' );
1816
+
1817
+ // Sections
1818
+ do_settings_sections( 'converter' );
1819
+
1820
+ ?></form>
1821
  </div>
1822
  </div>
1823
  <?php
includes/admin/styles/evergreen/colors-rtl.css CHANGED
@@ -56,7 +56,7 @@ input[type=radio]:checked:before {
56
  box-shadow: inset 0 1px 0 #43925d, 0 0 2px 1px #33b3db;
57
  }
58
 
59
- .wp-core-ui .button-primary:active {
60
  background: #43925d;
61
  border-color: #3b8152;
62
  box-shadow: inset 0 2px 0 #3b8152;
@@ -110,9 +110,7 @@ input[type=radio]:checked:before {
110
 
111
  /* List tables */
112
  .wrap .add-new-h2:hover,
113
- .wrap .page-title-action:hover,
114
- .tablenav .tablenav-pages a:hover,
115
- .tablenav .tablenav-pages a:focus {
116
  color: #fff;
117
  background-color: #446950;
118
  }
56
  box-shadow: inset 0 1px 0 #43925d, 0 0 2px 1px #33b3db;
57
  }
58
 
59
+ .wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover {
60
  background: #43925d;
61
  border-color: #3b8152;
62
  box-shadow: inset 0 2px 0 #3b8152;
110
 
111
  /* List tables */
112
  .wrap .add-new-h2:hover,
113
+ .wrap .page-title-action:hover {
 
 
114
  color: #fff;
115
  background-color: #446950;
116
  }
includes/admin/styles/evergreen/colors-rtl.min.css CHANGED
@@ -1 +1 @@
1
- body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}input[type=checkbox]:checked:before{color:#56b274}input[type=radio]:checked:before{background:#56b274}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0096dd}.wp-core-ui .button-primary{background:#56b274;border-color:#43925d #3b8152 #3b8152;color:#fff;box-shadow:0 1px 0 #3b8152;text-shadow:0 -1px 1px #3b8152,-1px 0 1px #3b8152,0 1px 1px #3b8152,1px 0 1px #3b8152}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#61b77d;border-color:#3b8152;color:#fff;box-shadow:0 1px 0 #3b8152}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #43925d,0 0 2px 1px #33b3db}.wp-core-ui .button-primary:active{background:#43925d;border-color:#3b8152;box-shadow:inset 0 2px 0 #3b8152}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7d1ca!important;background:#469961!important;border-color:#3b8152!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #3b8152!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #3b8152!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#446950}.wp-core-ui .wp-ui-text-primary{color:#446950}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#56b274}.wp-core-ui .wp-ui-text-highlight{color:#56b274}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#36b360}.wp-core-ui .wp-ui-text-notification{color:#36b360}.wp-core-ui .wp-ui-text-icon{color:#f1f3f2}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#446950}.view-switch a.current:before{color:#446950}.view-switch a:hover:before{color:#36b360}#adminmenu,#adminmenuback,#adminmenuwrap{background:#446950}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f3f2}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#56b274}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#36533f}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#36533f}#adminmenu .wp-submenu .wp-submenu-head{color:#c7d2cb}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#c7d2cb}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#56b274}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#56b274}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#56b274}#adminmenu a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#36b360}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#36533f}#collapse-button{color:#f1f3f2}#collapse-button:focus,#collapse-button:hover{color:#56b274}#wpadminbar{color:#fff;background:#446950}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f1f3f2}#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#56b274;background:#36533f}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#56b274}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#36533f}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#597763}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#c7d2cb}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f3f2}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar li #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#56b274}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#56b274}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f1f3f2}#wpadminbar #adminbarsearch:before{color:#f1f3f2}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#527f61}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#527f61;background-color:#527f61}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#56b274}#wpadminbar #wp-admin-bar-user-info .username{color:#c7d2cb}.wp-pointer .wp-pointer-content h3{background-color:#56b274;border-color:#4ba468}.wp-pointer .wp-pointer-content h3:before{color:#56b274}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#56b274}.media-item .bar,.media-progress-bar div{background-color:#56b274}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #56b274}.attachment.details .check{background-color:#56b274;box-shadow:0 0 0 1px #fff,0 0 0 2px #56b274}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #56b274}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#56b274}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#56b274}.theme-filter.current,.theme-section.current{border-bottom-color:#446950}body.more-filters-opened .more-filters{color:#fff;background-color:#446950}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#56b274;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#56b274;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}div#wp-responsive-toggle a:before{color:#f1f3f2}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#56b274}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#36533f}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f1f3f2}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#56b274}
1
+ body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}input[type=checkbox]:checked:before{color:#56b274}input[type=radio]:checked:before{background:#56b274}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0096dd}.wp-core-ui .button-primary{background:#56b274;border-color:#43925d #3b8152 #3b8152;color:#fff;box-shadow:0 1px 0 #3b8152;text-shadow:0 -1px 1px #3b8152,-1px 0 1px #3b8152,0 1px 1px #3b8152,1px 0 1px #3b8152}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#61b77d;border-color:#3b8152;color:#fff;box-shadow:0 1px 0 #3b8152}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #43925d,0 0 2px 1px #33b3db}.wp-core-ui .button-primary.active,.wp-core-ui .button-primary.active:focus,.wp-core-ui .button-primary.active:hover,.wp-core-ui .button-primary:active{background:#43925d;border-color:#3b8152;box-shadow:inset 0 2px 0 #3b8152}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7d1ca!important;background:#469961!important;border-color:#3b8152!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #3b8152!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #3b8152!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#446950}.wp-core-ui .wp-ui-text-primary{color:#446950}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#56b274}.wp-core-ui .wp-ui-text-highlight{color:#56b274}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#36b360}.wp-core-ui .wp-ui-text-notification{color:#36b360}.wp-core-ui .wp-ui-text-icon{color:#f1f3f2}.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#446950}.view-switch a.current:before{color:#446950}.view-switch a:hover:before{color:#36b360}#adminmenu,#adminmenuback,#adminmenuwrap{background:#446950}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f3f2}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#56b274}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#36533f}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#36533f}#adminmenu .wp-submenu .wp-submenu-head{color:#c7d2cb}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#c7d2cb}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#56b274}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#56b274}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#56b274}#adminmenu a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#36b360}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#36533f}#collapse-button{color:#f1f3f2}#collapse-button:focus,#collapse-button:hover{color:#56b274}#wpadminbar{color:#fff;background:#446950}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f1f3f2}#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#56b274;background:#36533f}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#56b274}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#36533f}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#597763}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#c7d2cb}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f3f2}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar li #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#56b274}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#56b274}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f1f3f2}#wpadminbar #adminbarsearch:before{color:#f1f3f2}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#527f61}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#527f61;background-color:#527f61}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#56b274}#wpadminbar #wp-admin-bar-user-info .username{color:#c7d2cb}.wp-pointer .wp-pointer-content h3{background-color:#56b274;border-color:#4ba468}.wp-pointer .wp-pointer-content h3:before{color:#56b274}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#56b274}.media-item .bar,.media-progress-bar div{background-color:#56b274}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #56b274}.attachment.details .check{background-color:#56b274;box-shadow:0 0 0 1px #fff,0 0 0 2px #56b274}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #56b274}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#56b274}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#56b274}.theme-filter.current,.theme-section.current{border-bottom-color:#446950}body.more-filters-opened .more-filters{color:#fff;background-color:#446950}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#56b274;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#56b274;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}div#wp-responsive-toggle a:before{color:#f1f3f2}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#56b274}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#36533f}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f1f3f2}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#56b274}
includes/admin/styles/evergreen/colors.css CHANGED
@@ -56,7 +56,7 @@ input[type=radio]:checked:before {
56
  box-shadow: inset 0 1px 0 #43925d, 0 0 2px 1px #33b3db;
57
  }
58
 
59
- .wp-core-ui .button-primary:active {
60
  background: #43925d;
61
  border-color: #3b8152;
62
  box-shadow: inset 0 2px 0 #3b8152;
@@ -110,9 +110,7 @@ input[type=radio]:checked:before {
110
 
111
  /* List tables */
112
  .wrap .add-new-h2:hover,
113
- .wrap .page-title-action:hover,
114
- .tablenav .tablenav-pages a:hover,
115
- .tablenav .tablenav-pages a:focus {
116
  color: #fff;
117
  background-color: #446950;
118
  }
56
  box-shadow: inset 0 1px 0 #43925d, 0 0 2px 1px #33b3db;
57
  }
58
 
59
+ .wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover {
60
  background: #43925d;
61
  border-color: #3b8152;
62
  box-shadow: inset 0 2px 0 #3b8152;
110
 
111
  /* List tables */
112
  .wrap .add-new-h2:hover,
113
+ .wrap .page-title-action:hover {
 
 
114
  color: #fff;
115
  background-color: #446950;
116
  }
includes/admin/styles/evergreen/colors.min.css CHANGED
@@ -1 +1 @@
1
- body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}input[type=checkbox]:checked:before{color:#56b274}input[type=radio]:checked:before{background:#56b274}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0096dd}.wp-core-ui .button-primary{background:#56b274;border-color:#43925d #3b8152 #3b8152;color:#fff;box-shadow:0 1px 0 #3b8152;text-shadow:0 -1px 1px #3b8152,1px 0 1px #3b8152,0 1px 1px #3b8152,-1px 0 1px #3b8152}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#61b77d;border-color:#3b8152;color:#fff;box-shadow:0 1px 0 #3b8152}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #43925d,0 0 2px 1px #33b3db}.wp-core-ui .button-primary:active{background:#43925d;border-color:#3b8152;box-shadow:inset 0 2px 0 #3b8152}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7d1ca!important;background:#469961!important;border-color:#3b8152!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #3b8152!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #3b8152!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#446950}.wp-core-ui .wp-ui-text-primary{color:#446950}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#56b274}.wp-core-ui .wp-ui-text-highlight{color:#56b274}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#36b360}.wp-core-ui .wp-ui-text-notification{color:#36b360}.wp-core-ui .wp-ui-text-icon{color:#f1f3f2}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#446950}.view-switch a.current:before{color:#446950}.view-switch a:hover:before{color:#36b360}#adminmenu,#adminmenuback,#adminmenuwrap{background:#446950}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f3f2}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#56b274}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#36533f}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#36533f}#adminmenu .wp-submenu .wp-submenu-head{color:#c7d2cb}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#c7d2cb}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#56b274}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#56b274}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#56b274}#adminmenu a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#36b360}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#36533f}#collapse-button{color:#f1f3f2}#collapse-button:focus,#collapse-button:hover{color:#56b274}#wpadminbar{color:#fff;background:#446950}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f1f3f2}#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#56b274;background:#36533f}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#56b274}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#36533f}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#597763}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#c7d2cb}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f3f2}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar li #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#56b274}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#56b274}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f1f3f2}#wpadminbar #adminbarsearch:before{color:#f1f3f2}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#527f61}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#527f61;background-color:#527f61}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#56b274}#wpadminbar #wp-admin-bar-user-info .username{color:#c7d2cb}.wp-pointer .wp-pointer-content h3{background-color:#56b274;border-color:#4ba468}.wp-pointer .wp-pointer-content h3:before{color:#56b274}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#56b274}.media-item .bar,.media-progress-bar div{background-color:#56b274}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #56b274}.attachment.details .check{background-color:#56b274;box-shadow:0 0 0 1px #fff,0 0 0 2px #56b274}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #56b274}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#56b274}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#56b274}.theme-filter.current,.theme-section.current{border-bottom-color:#446950}body.more-filters-opened .more-filters{color:#fff;background-color:#446950}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#56b274;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#56b274;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}div#wp-responsive-toggle a:before{color:#f1f3f2}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#56b274}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#36533f}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f1f3f2}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#56b274}
1
+ body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}input[type=checkbox]:checked:before{color:#56b274}input[type=radio]:checked:before{background:#56b274}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0096dd}.wp-core-ui .button-primary{background:#56b274;border-color:#43925d #3b8152 #3b8152;color:#fff;box-shadow:0 1px 0 #3b8152;text-shadow:0 -1px 1px #3b8152,1px 0 1px #3b8152,0 1px 1px #3b8152,-1px 0 1px #3b8152}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#61b77d;border-color:#3b8152;color:#fff;box-shadow:0 1px 0 #3b8152}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #43925d,0 0 2px 1px #33b3db}.wp-core-ui .button-primary.active,.wp-core-ui .button-primary.active:focus,.wp-core-ui .button-primary.active:hover,.wp-core-ui .button-primary:active{background:#43925d;border-color:#3b8152;box-shadow:inset 0 2px 0 #3b8152}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7d1ca!important;background:#469961!important;border-color:#3b8152!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #3b8152!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #3b8152!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#446950}.wp-core-ui .wp-ui-text-primary{color:#446950}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#56b274}.wp-core-ui .wp-ui-text-highlight{color:#56b274}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#36b360}.wp-core-ui .wp-ui-text-notification{color:#36b360}.wp-core-ui .wp-ui-text-icon{color:#f1f3f2}.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#446950}.view-switch a.current:before{color:#446950}.view-switch a:hover:before{color:#36b360}#adminmenu,#adminmenuback,#adminmenuwrap{background:#446950}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f3f2}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#56b274}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#36533f}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#36533f}#adminmenu .wp-submenu .wp-submenu-head{color:#c7d2cb}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#c7d2cb}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#56b274}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#56b274}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#56b274}#adminmenu a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#36b360}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#36533f}#collapse-button{color:#f1f3f2}#collapse-button:focus,#collapse-button:hover{color:#56b274}#wpadminbar{color:#fff;background:#446950}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f1f3f2}#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#56b274;background:#36533f}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#56b274}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#36533f}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#597763}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#c7d2cb}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f3f2}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar li #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#56b274}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#56b274}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f1f3f2}#wpadminbar #adminbarsearch:before{color:#f1f3f2}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#527f61}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#527f61;background-color:#527f61}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#56b274}#wpadminbar #wp-admin-bar-user-info .username{color:#c7d2cb}.wp-pointer .wp-pointer-content h3{background-color:#56b274;border-color:#4ba468}.wp-pointer .wp-pointer-content h3:before{color:#56b274}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#56b274}.media-item .bar,.media-progress-bar div{background-color:#56b274}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #56b274}.attachment.details .check{background-color:#56b274;box-shadow:0 0 0 1px #fff,0 0 0 2px #56b274}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #56b274}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#56b274}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#56b274}.theme-filter.current,.theme-section.current{border-bottom-color:#446950}body.more-filters-opened .more-filters{color:#fff;background-color:#446950}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#56b274;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#56b274;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}div#wp-responsive-toggle a:before{color:#f1f3f2}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#56b274}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#36533f}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f1f3f2}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#56b274}
includes/admin/styles/mint/colors-rtl.css CHANGED
@@ -56,7 +56,7 @@ input[type=radio]:checked:before {
56
  box-shadow: inset 0 1px 0 #3a4f41, 0 0 2px 1px #33b3db;
57
  }
58
 
59
- .wp-core-ui .button-primary:active {
60
  background: #3a4f41;
61
  border-color: #2f4035;
62
  box-shadow: inset 0 2px 0 #2f4035;
@@ -110,9 +110,7 @@ input[type=radio]:checked:before {
110
 
111
  /* List tables */
112
  .wrap .add-new-h2:hover,
113
- .wrap .page-title-action:hover,
114
- .tablenav .tablenav-pages a:hover,
115
- .tablenav .tablenav-pages a:focus {
116
  color: #fff;
117
  background-color: #5fb37c;
118
  }
56
  box-shadow: inset 0 1px 0 #3a4f41, 0 0 2px 1px #33b3db;
57
  }
58
 
59
+ .wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover {
60
  background: #3a4f41;
61
  border-color: #2f4035;
62
  box-shadow: inset 0 2px 0 #2f4035;
110
 
111
  /* List tables */
112
  .wrap .add-new-h2:hover,
113
+ .wrap .page-title-action:hover {
 
 
114
  color: #fff;
115
  background-color: #5fb37c;
116
  }
includes/admin/styles/mint/colors-rtl.min.css CHANGED
@@ -1 +1 @@
1
- body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}input[type=checkbox]:checked:before{color:#4f6d59}input[type=radio]:checked:before{background:#4f6d59}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0096dd}.wp-core-ui .button-primary{background:#4f6d59;border-color:#3a4f41 #2f4035 #2f4035;color:#fff;box-shadow:0 1px 0 #2f4035;text-shadow:0 -1px 1px #2f4035,-1px 0 1px #2f4035,0 1px 1px #2f4035,1px 0 1px #2f4035}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#567560;border-color:#2f4035;color:#fff;box-shadow:0 1px 0 #2f4035}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #3a4f41,0 0 2px 1px #33b3db}.wp-core-ui .button-primary:active{background:#3a4f41;border-color:#2f4035;box-shadow:inset 0 2px 0 #2f4035}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7d1ca!important;background:#3e5546!important;border-color:#2f4035!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #2f4035!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #2f4035!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#5fb37c}.wp-core-ui .wp-ui-text-primary{color:#5fb37c}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#4f6d59}.wp-core-ui .wp-ui-text-highlight{color:#4f6d59}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#33834e}.wp-core-ui .wp-ui-text-notification{color:#33834e}.wp-core-ui .wp-ui-text-icon{color:#f1f3f2}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#5fb37c}.view-switch a.current:before{color:#5fb37c}.view-switch a:hover:before{color:#33834e}#adminmenu,#adminmenuback,#adminmenuwrap{background:#5fb37c}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f3f2}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#4f6d59}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#4ca26a}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#4ca26a}#adminmenu .wp-submenu .wp-submenu-head{color:#cfe8d8}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#cfe8d8}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#4f6d59}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#4f6d59}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#4f6d59}#adminmenu a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#33834e}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#4ca26a}#collapse-button{color:#f1f3f2}#collapse-button:focus,#collapse-button:hover{color:#4f6d59}#wpadminbar{color:#fff;background:#5fb37c}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f1f3f2}#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#4f6d59;background:#4ca26a}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#4f6d59}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#4ca26a}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#7eb892}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#cfe8d8}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f3f2}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar li #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#4f6d59}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#4f6d59}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f1f3f2}#wpadminbar #adminbarsearch:before{color:#f1f3f2}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#77bf8f}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#77bf8f;background-color:#77bf8f}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#4f6d59}#wpadminbar #wp-admin-bar-user-info .username{color:#cfe8d8}.wp-pointer .wp-pointer-content h3{background-color:#4f6d59;border-color:#455e4d}.wp-pointer .wp-pointer-content h3:before{color:#4f6d59}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#4f6d59}.media-item .bar,.media-progress-bar div{background-color:#4f6d59}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #4f6d59}.attachment.details .check{background-color:#4f6d59;box-shadow:0 0 0 1px #fff,0 0 0 2px #4f6d59}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #4f6d59}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#4f6d59}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#4f6d59}.theme-filter.current,.theme-section.current{border-bottom-color:#5fb37c}body.more-filters-opened .more-filters{color:#fff;background-color:#5fb37c}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#4f6d59;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#4f6d59;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}div#wp-responsive-toggle a:before{color:#f1f3f2}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#4f6d59}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#4ca26a}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f1f3f2}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#4f6d59}
1
+ body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}input[type=checkbox]:checked:before{color:#4f6d59}input[type=radio]:checked:before{background:#4f6d59}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0096dd}.wp-core-ui .button-primary{background:#4f6d59;border-color:#3a4f41 #2f4035 #2f4035;color:#fff;box-shadow:0 1px 0 #2f4035;text-shadow:0 -1px 1px #2f4035,-1px 0 1px #2f4035,0 1px 1px #2f4035,1px 0 1px #2f4035}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#567560;border-color:#2f4035;color:#fff;box-shadow:0 1px 0 #2f4035}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #3a4f41,0 0 2px 1px #33b3db}.wp-core-ui .button-primary.active,.wp-core-ui .button-primary.active:focus,.wp-core-ui .button-primary.active:hover,.wp-core-ui .button-primary:active{background:#3a4f41;border-color:#2f4035;box-shadow:inset 0 2px 0 #2f4035}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7d1ca!important;background:#3e5546!important;border-color:#2f4035!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #2f4035!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #2f4035!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#5fb37c}.wp-core-ui .wp-ui-text-primary{color:#5fb37c}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#4f6d59}.wp-core-ui .wp-ui-text-highlight{color:#4f6d59}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#33834e}.wp-core-ui .wp-ui-text-notification{color:#33834e}.wp-core-ui .wp-ui-text-icon{color:#f1f3f2}.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#5fb37c}.view-switch a.current:before{color:#5fb37c}.view-switch a:hover:before{color:#33834e}#adminmenu,#adminmenuback,#adminmenuwrap{background:#5fb37c}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f3f2}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#4f6d59}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#4ca26a}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#4ca26a}#adminmenu .wp-submenu .wp-submenu-head{color:#cfe8d8}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#cfe8d8}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#4f6d59}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#4f6d59}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#4f6d59}#adminmenu a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#33834e}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#4ca26a}#collapse-button{color:#f1f3f2}#collapse-button:focus,#collapse-button:hover{color:#4f6d59}#wpadminbar{color:#fff;background:#5fb37c}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f1f3f2}#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#4f6d59;background:#4ca26a}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#4f6d59}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#4ca26a}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#7eb892}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#cfe8d8}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f3f2}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar li #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#4f6d59}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#4f6d59}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f1f3f2}#wpadminbar #adminbarsearch:before{color:#f1f3f2}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#77bf8f}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#77bf8f;background-color:#77bf8f}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#4f6d59}#wpadminbar #wp-admin-bar-user-info .username{color:#cfe8d8}.wp-pointer .wp-pointer-content h3{background-color:#4f6d59;border-color:#455e4d}.wp-pointer .wp-pointer-content h3:before{color:#4f6d59}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#4f6d59}.media-item .bar,.media-progress-bar div{background-color:#4f6d59}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #4f6d59}.attachment.details .check{background-color:#4f6d59;box-shadow:0 0 0 1px #fff,0 0 0 2px #4f6d59}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #4f6d59}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#4f6d59}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#4f6d59}.theme-filter.current,.theme-section.current{border-bottom-color:#5fb37c}body.more-filters-opened .more-filters{color:#fff;background-color:#5fb37c}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#4f6d59;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#4f6d59;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}div#wp-responsive-toggle a:before{color:#f1f3f2}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#4f6d59}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#4ca26a}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f1f3f2}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#4f6d59}
includes/admin/styles/mint/colors.css CHANGED
@@ -56,7 +56,7 @@ input[type=radio]:checked:before {
56
  box-shadow: inset 0 1px 0 #3a4f41, 0 0 2px 1px #33b3db;
57
  }
58
 
59
- .wp-core-ui .button-primary:active {
60
  background: #3a4f41;
61
  border-color: #2f4035;
62
  box-shadow: inset 0 2px 0 #2f4035;
@@ -110,9 +110,7 @@ input[type=radio]:checked:before {
110
 
111
  /* List tables */
112
  .wrap .add-new-h2:hover,
113
- .wrap .page-title-action:hover,
114
- .tablenav .tablenav-pages a:hover,
115
- .tablenav .tablenav-pages a:focus {
116
  color: #fff;
117
  background-color: #5fb37c;
118
  }
56
  box-shadow: inset 0 1px 0 #3a4f41, 0 0 2px 1px #33b3db;
57
  }
58
 
59
+ .wp-core-ui .button-primary:active, .wp-core-ui .button-primary.active, .wp-core-ui .button-primary.active:focus, .wp-core-ui .button-primary.active:hover {
60
  background: #3a4f41;
61
  border-color: #2f4035;
62
  box-shadow: inset 0 2px 0 #2f4035;
110
 
111
  /* List tables */
112
  .wrap .add-new-h2:hover,
113
+ .wrap .page-title-action:hover {
 
 
114
  color: #fff;
115
  background-color: #5fb37c;
116
  }
includes/admin/styles/mint/colors.min.css CHANGED
@@ -1 +1 @@
1
- body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}input[type=checkbox]:checked:before{color:#4f6d59}input[type=radio]:checked:before{background:#4f6d59}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0096dd}.wp-core-ui .button-primary{background:#4f6d59;border-color:#3a4f41 #2f4035 #2f4035;color:#fff;box-shadow:0 1px 0 #2f4035;text-shadow:0 -1px 1px #2f4035,1px 0 1px #2f4035,0 1px 1px #2f4035,-1px 0 1px #2f4035}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#567560;border-color:#2f4035;color:#fff;box-shadow:0 1px 0 #2f4035}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #3a4f41,0 0 2px 1px #33b3db}.wp-core-ui .button-primary:active{background:#3a4f41;border-color:#2f4035;box-shadow:inset 0 2px 0 #2f4035}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7d1ca!important;background:#3e5546!important;border-color:#2f4035!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #2f4035!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #2f4035!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#5fb37c}.wp-core-ui .wp-ui-text-primary{color:#5fb37c}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#4f6d59}.wp-core-ui .wp-ui-text-highlight{color:#4f6d59}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#33834e}.wp-core-ui .wp-ui-text-notification{color:#33834e}.wp-core-ui .wp-ui-text-icon{color:#f1f3f2}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#5fb37c}.view-switch a.current:before{color:#5fb37c}.view-switch a:hover:before{color:#33834e}#adminmenu,#adminmenuback,#adminmenuwrap{background:#5fb37c}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f3f2}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#4f6d59}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#4ca26a}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#4ca26a}#adminmenu .wp-submenu .wp-submenu-head{color:#cfe8d8}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#cfe8d8}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#4f6d59}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#4f6d59}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#4f6d59}#adminmenu a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#33834e}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#4ca26a}#collapse-button{color:#f1f3f2}#collapse-button:focus,#collapse-button:hover{color:#4f6d59}#wpadminbar{color:#fff;background:#5fb37c}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f1f3f2}#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#4f6d59;background:#4ca26a}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#4f6d59}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#4ca26a}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#7eb892}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#cfe8d8}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f3f2}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar li #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#4f6d59}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#4f6d59}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f1f3f2}#wpadminbar #adminbarsearch:before{color:#f1f3f2}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#77bf8f}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#77bf8f;background-color:#77bf8f}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#4f6d59}#wpadminbar #wp-admin-bar-user-info .username{color:#cfe8d8}.wp-pointer .wp-pointer-content h3{background-color:#4f6d59;border-color:#455e4d}.wp-pointer .wp-pointer-content h3:before{color:#4f6d59}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#4f6d59}.media-item .bar,.media-progress-bar div{background-color:#4f6d59}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #4f6d59}.attachment.details .check{background-color:#4f6d59;box-shadow:0 0 0 1px #fff,0 0 0 2px #4f6d59}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #4f6d59}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#4f6d59}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#4f6d59}.theme-filter.current,.theme-section.current{border-bottom-color:#5fb37c}body.more-filters-opened .more-filters{color:#fff;background-color:#5fb37c}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#4f6d59;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#4f6d59;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}div#wp-responsive-toggle a:before{color:#f1f3f2}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#4f6d59}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#4ca26a}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f1f3f2}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#4f6d59}
1
+ body{background:#f1f1f1}a{color:#0073aa}a:active,a:focus,a:hover{color:#0096dd}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,div.dashboard-widget-submit input:hover{color:#0096dd}input[type=checkbox]:checked:before{color:#4f6d59}input[type=radio]:checked:before{background:#4f6d59}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0096dd}.wp-core-ui .button-primary{background:#4f6d59;border-color:#3a4f41 #2f4035 #2f4035;color:#fff;box-shadow:0 1px 0 #2f4035;text-shadow:0 -1px 1px #2f4035,1px 0 1px #2f4035,0 1px 1px #2f4035,-1px 0 1px #2f4035}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#567560;border-color:#2f4035;color:#fff;box-shadow:0 1px 0 #2f4035}.wp-core-ui .button-primary:focus{box-shadow:inset 0 1px 0 #3a4f41,0 0 2px 1px #33b3db}.wp-core-ui .button-primary.active,.wp-core-ui .button-primary.active:focus,.wp-core-ui .button-primary.active:hover,.wp-core-ui .button-primary:active{background:#3a4f41;border-color:#2f4035;box-shadow:inset 0 2px 0 #2f4035}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7d1ca!important;background:#3e5546!important;border-color:#2f4035!important;text-shadow:none!important}.wp-core-ui .button-primary.button-hero{box-shadow:0 2px 0 #2f4035!important}.wp-core-ui .button-primary.button-hero:active{box-shadow:inset 0 3px 0 #2f4035!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#5fb37c}.wp-core-ui .wp-ui-text-primary{color:#5fb37c}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#4f6d59}.wp-core-ui .wp-ui-text-highlight{color:#4f6d59}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#33834e}.wp-core-ui .wp-ui-text-notification{color:#33834e}.wp-core-ui .wp-ui-text-icon{color:#f1f3f2}.wrap .add-new-h2:hover,.wrap .page-title-action:hover{color:#fff;background-color:#5fb37c}.view-switch a.current:before{color:#5fb37c}.view-switch a:hover:before{color:#33834e}#adminmenu,#adminmenuback,#adminmenuwrap{background:#5fb37c}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f3f2}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#4f6d59}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#4ca26a}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#4ca26a}#adminmenu .wp-submenu .wp-submenu-head{color:#cfe8d8}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#cfe8d8}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#4f6d59}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#4f6d59}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#4f6d59}#adminmenu a.current:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,.ie8 #adminmenu li.opensub div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#33834e}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#4ca26a}#collapse-button{color:#f1f3f2}#collapse-button:focus,#collapse-button:hover{color:#4f6d59}#wpadminbar{color:#fff;background:#5fb37c}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f1f3f2}#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{color:#4f6d59;background:#4ca26a}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label{color:#4f6d59}#wpadminbar:not(.mobile) li:hover #adminbarsearch:before,#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover .ab-item:before{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#4ca26a}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#7eb892}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#cfe8d8}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f3f2}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar li #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#4f6d59}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#4f6d59}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#f1f3f2}#wpadminbar #adminbarsearch:before{color:#f1f3f2}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#77bf8f}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#77bf8f;background-color:#77bf8f}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#4f6d59}#wpadminbar #wp-admin-bar-user-info .username{color:#cfe8d8}.wp-pointer .wp-pointer-content h3{background-color:#4f6d59;border-color:#455e4d}.wp-pointer .wp-pointer-content h3:before{color:#4f6d59}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#4f6d59}.media-item .bar,.media-progress-bar div{background-color:#4f6d59}.details.attachment{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #4f6d59}.attachment.details .check{background-color:#4f6d59;box-shadow:0 0 0 1px #fff,0 0 0 2px #4f6d59}.media-selection .attachment.selection.details .thumbnail{box-shadow:0 0 0 1px #fff,0 0 0 3px #4f6d59}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:focus:after,.theme-browser .theme.add-new-theme a:hover:after{background:#4f6d59}.theme-browser .theme.add-new-theme a:focus span:after,.theme-browser .theme.add-new-theme a:hover span:after{color:#4f6d59}.theme-filter.current,.theme-section.current{border-bottom-color:#5fb37c}body.more-filters-opened .more-filters{color:#fff;background-color:#5fb37c}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#4f6d59;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#4f6d59;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}div#wp-responsive-toggle a:before{color:#f1f3f2}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#4f6d59}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#4ca26a}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{color:#f1f3f2}.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item:hover{background:#4f6d59}
includes/admin/tools.php CHANGED
@@ -84,7 +84,7 @@ function bbp_register_repair_tool( $args = array() ) {
84
  }
85
 
86
  // Add tool to the registered tools array
87
- bbpress()->admin->tools[ $r['id'] ] = array(
88
  'type' => $r['type'],
89
  'title' => $r['title'],
90
  'description' => $r['description'],
84
  }
85
 
86
  // Add tool to the registered tools array
87
+ bbp_admin()->tools[ $r['id'] ] = array(
88
  'type' => $r['type'],
89
  'title' => $r['title'],
90
  'description' => $r['description'],
includes/admin/tools/common.php CHANGED
@@ -61,55 +61,7 @@ function bbp_admin_repair_tool_run_url( $component = array() ) {
61
  * @return string The message HTML
62
  */
63
  function bbp_admin_tools_feedback( $message, $class = false, $is_dismissible = true ) {
64
-
65
- // One message as string
66
- if ( is_string( $message ) ) {
67
- $message = '<p>' . $message . '</p>';
68
- $default_class ='updated';
69
-
70
- // Messages as objects
71
- } elseif ( is_wp_error( $message ) ) {
72
- $errors = $message->get_error_messages();
73
-
74
- switch ( count( $errors ) ) {
75
- case 0:
76
- return false;
77
-
78
- case 1:
79
- $message = '<p>' . $errors[0] . '</p>';
80
- break;
81
-
82
- default:
83
- $message = '<ul>' . "\n\t" . '<li>' . implode( '</li>' . "\n\t" . '<li>', $errors ) . '</li>' . "\n" . '</ul>';
84
- break;
85
- }
86
-
87
- $default_class = 'is-error';
88
-
89
- // Message is an unknown format, so bail
90
- } else {
91
- return false;
92
- }
93
-
94
- // CSS Classes
95
- $classes = ! empty( $class )
96
- ? array( $class )
97
- : array( $default_class );
98
-
99
- // Add dismissible class
100
- if ( ! empty( $is_dismissible ) ) {
101
- array_push( $classes, 'is-dismissible' );
102
- }
103
-
104
- // Assemble the message
105
- $message = '<div id="message" class="notice ' . implode( ' ', array_map( 'esc_attr', $classes ) ) . '">' . $message . '</div>';
106
- $message = str_replace( "'", "\'", $message );
107
-
108
- // Ugh
109
- $lambda = create_function( '', "echo '$message';" );
110
- add_action( 'admin_notices', $lambda );
111
-
112
- return $lambda;
113
  }
114
 
115
  /**
@@ -180,13 +132,13 @@ function bbp_admin_repair_handler() {
180
  function bbp_get_admin_repair_tools( $type = '' ) {
181
 
182
  // Get tools array
183
- $tools = ! empty( bbpress()->admin->tools )
184
- ? bbpress()->admin->tools
185
  : array();
186
 
187
  // Maybe limit to type (otherwise return all tools)
188
  if ( ! empty( $type ) ) {
189
- $tools = wp_list_filter( bbpress()->admin->tools, array( 'type' => $type ) );
190
  }
191
 
192
  // Filter & return
@@ -434,7 +386,7 @@ function bbp_get_admin_repair_tool_components( $item = array() ) {
434
  *
435
  * @since 2.6.0 bbPress (r5885)
436
  *
437
- * @param type array
438
  */
439
  function bbp_admin_repair_tool_overhead_filters( $args = array() ) {
440
  echo bbp_get_admin_repair_tool_overhead_filters( $args );
61
  * @return string The message HTML
62
  */
63
  function bbp_admin_tools_feedback( $message, $class = false, $is_dismissible = true ) {
64
+ return bbp_admin()->add_notice( $message, $class, $is_dismissible );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  }
66
 
67
  /**
132
  function bbp_get_admin_repair_tools( $type = '' ) {
133
 
134
  // Get tools array
135
+ $tools = ! empty( bbp_admin()->tools )
136
+ ? bbp_admin()->tools
137
  : array();
138
 
139
  // Maybe limit to type (otherwise return all tools)
140
  if ( ! empty( $type ) ) {
141
+ $tools = wp_list_filter( bbp_admin()->tools, array( 'type' => $type ) );
142
  }
143
 
144
  // Filter & return
386
  *
387
  * @since 2.6.0 bbPress (r5885)
388
  *
389
+ * @param array $args
390
  */
391
  function bbp_admin_repair_tool_overhead_filters( $args = array() ) {
392
  echo bbp_get_admin_repair_tool_overhead_filters( $args );
includes/admin/tools/converter.php CHANGED
@@ -20,30 +20,34 @@ defined( 'ABSPATH' ) || exit;
20
  * @return array
21
  */
22
  function bbp_get_converters() {
 
23
 
24
- // Default
25
- $files = array();
26
- $path = bbp_setup_converter()->converters_dir;
27
- $curdir = opendir( $path );
28
-
29
- // Look for the converter file in the converters directory
30
- if ( false !== $curdir ) {
31
- while ( $file = readdir( $curdir ) ) {
32
- if ( stristr( $file, '.php' ) && stristr( $file, 'index' ) === false ) {
33
- $name = preg_replace( '/.php/', '', $file );
34
- if ( 'Example' !== $name ) {
35
- $files[ $name ] = $path . $file;
 
 
 
36
  }
37
  }
38
  }
39
- }
40
 
41
- // Close the directory
42
- closedir( $curdir );
43
 
44
- // Sort keys alphabetically, ignoring upper/lower casing
45
- if ( ! empty( $files ) ) {
46
- natcasesort( $files );
 
47
  }
48
 
49
  // Filter & return
@@ -58,22 +62,39 @@ function bbp_get_converters() {
58
  * @since 2.0.0
59
  *
60
  * @param string $platform Name of valid platform class.
 
 
61
  */
62
- function bbp_new_converter( $platform ) {
 
 
 
63
 
64
- // Default value
 
 
 
 
 
65
  $converters = bbp_get_converters();
66
 
67
- // Create a new converter object if it's found
68
- if ( isset( $converters[ $platform ] ) ) {
 
 
 
 
 
69
 
70
- // Include & create the converter
71
- require_once $converters[ $platform ];
 
 
72
  if ( class_exists( $platform ) ) {
73
- return new $platform;
74
  }
75
  }
76
 
77
- // Return null if no converter was found
78
- return null;
79
  }
20
  * @return array
21
  */
22
  function bbp_get_converters() {
23
+ static $files = array();
24
 
25
+ // Only hit the file system one time per page load
26
+ if ( empty( $files ) ) {
27
+
28
+ // Open the converter directory
29
+ $path = bbp_setup_converter()->converters_dir;
30
+ $curdir = opendir( $path );
31
+
32
+ // Look for the converter file in the converters directory
33
+ if ( false !== $curdir ) {
34
+ while ( $file = readdir( $curdir ) ) {
35
+ if ( stristr( $file, '.php' ) && stristr( $file, 'index' ) === false ) {
36
+ $name = preg_replace( '/.php/', '', $file );
37
+ if ( 'Example' !== $name ) {
38
+ $files[ $name ] = $path . $file;
39
+ }
40
  }
41
  }
42
  }
 
43
 
44
+ // Close the directory
45
+ closedir( $curdir );
46
 
47
+ // Sort keys alphabetically, ignoring upper/lower casing
48
+ if ( ! empty( $files ) ) {
49
+ natcasesort( $files );
50
+ }
51
  }
52
 
53
  // Filter & return
62
  * @since 2.0.0
63
  *
64
  * @param string $platform Name of valid platform class.
65
+ *
66
+ * @return mixed Object if converter exists, null if not
67
  */
68
+ function bbp_new_converter( $platform = '' ) {
69
+
70
+ // Default converter
71
+ $converter = null;
72
 
73
+ // Bail if no platform
74
+ if ( empty( $platform ) ) {
75
+ return $converter;
76
+ }
77
+
78
+ // Get the available converters
79
  $converters = bbp_get_converters();
80
 
81
+ // Get the converter file form converters array
82
+ $converter_file = isset( $converters[ $platform ] )
83
+ ? $converters[ $platform ]
84
+ : '';
85
+
86
+ // Try to create a new converter object
87
+ if ( ! empty( $converter_file ) ) {
88
 
89
+ // Try to include the converter
90
+ @include_once $converter_file;
91
+
92
+ // Try to instantiate the converter object
93
  if ( class_exists( $platform ) ) {
94
+ $converter = new $platform;
95
  }
96
  }
97
 
98
+ // Filter & return
99
+ return apply_filters( 'bbp_new_converter', $converter, $platform );
100
  }
includes/admin/tools/repair.php CHANGED
@@ -1013,12 +1013,12 @@ function bbp_admin_repair_closed_topics() {
1013
  // Define variables
1014
  $bbp_db = bbp_db();
1015
  $statement = esc_html__( 'Repairing closed topics&hellip; %s', 'bbpress' );
1016
- $result = esc_html__( 'No closed topics to repair.', 'bbpress' );
1017
  $changed = 0;
1018
 
1019
  // Results
1020
- $query = "SELECT ID FROM `{$bbp_db->posts}` WHERE `post_type` = '%s' AND `post_status` = 'closed'";
1021
- $prepare = $bbp_db->prepare( $query, bbp_get_topic_post_type() );
1022
  $closed_topics = $bbp_db->get_col( $prepare );
1023
 
1024
  // Bail if no closed topics found
1013
  // Define variables
1014
  $bbp_db = bbp_db();
1015
  $statement = esc_html__( 'Repairing closed topics&hellip; %s', 'bbpress' );
1016
+ $result = esc_html__( 'No closed topics to repair.', 'bbpress' );
1017
  $changed = 0;
1018
 
1019
  // Results
1020
+ $query = "SELECT ID FROM `{$bbp_db->posts}` WHERE `post_type` = %s AND `post_status` = %s";
1021
+ $prepare = $bbp_db->prepare( $query, bbp_get_topic_post_type(), bbp_get_closed_status_id() );
1022
  $closed_topics = $bbp_db->get_col( $prepare );
1023
 
1024
  // Bail if no closed topics found
includes/admin/tools/reset.php CHANGED
@@ -76,142 +76,190 @@ function bbp_admin_reset_page() {
76
  }
77
 
78
  /**
79
- * Handle the processing and feedback of the admin tools page
80
  *
81
  * @since 2.0.0 bbPress (r2613)
82
  */
83
  function bbp_admin_reset_handler() {
84
 
85
- // Bail if not resetting
86
  if ( ! bbp_is_post_request() || empty( $_POST['bbpress-are-you-sure'] ) ) {
87
  return;
88
  }
89
 
90
- // Only keymasters can proceed
91
  if ( ! bbp_is_user_keymaster() ) {
92
  return;
93
  }
94
 
 
95
  check_admin_referer( 'bbpress-reset' );
96
 
97
- // Stores messages
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  $messages = array();
99
- $failed = esc_html__( 'Failed!', 'bbpress' );
100
- $success = esc_html__( 'Success!', 'bbpress' );
101
 
102
- // Flush the cache; things are about to get ugly.
103
  wp_cache_flush();
104
 
105
  /** Posts *****************************************************************/
106
 
107
- // Post types and status
108
  $fpt = bbp_get_forum_post_type();
109
  $tpt = bbp_get_topic_post_type();
110
  $rpt = bbp_get_reply_post_type();
111
 
112
- // Define variables
113
- $bbp_db = bbp_db();
114
- $statement = esc_html__( 'Deleting Posts&hellip; %s', 'bbpress' );
115
-
116
- $sql_posts = $bbp_db->get_results( "SELECT `ID` FROM `{$bbp_db->posts}` WHERE `post_type` IN ('{$fpt}', '{$tpt}', '{$rpt}')", OBJECT_K );
117
- $sql_delete = "DELETE FROM `{$bbp_db->posts}` WHERE `post_type` IN ('{$fpt}', '{$tpt}', '{$rpt}')";
118
- $result = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
119
- $messages[] = sprintf( $statement, $result );
120
-
121
- /** Post Meta *************************************************************/
122
-
123
  if ( ! empty( $sql_posts ) ) {
124
- $sql_meta = array();
 
125
  foreach ( $sql_posts as $key => $value ) {
126
  $sql_meta[] = $key;
127
  }
128
- $statement = esc_html__( 'Deleting Post Meta&hellip; %s', 'bbpress' );
129
- $sql_meta = implode( "', '", $sql_meta );
130
- $sql_delete = "DELETE FROM `{$bbp_db->postmeta}` WHERE `post_id` IN ('{$sql_meta}')";
131
- $result = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
132
- $messages[] = sprintf( $statement, $result );
133
- }
134
 
135
- /** Post Revisions ********************************************************/
 
 
 
 
136
 
137
- if ( ! empty( $sql_posts ) ) {
138
- $sql_meta = array();
139
- foreach ( $sql_posts as $key => $value ) {
140
- $sql_meta[] = $key;
 
 
 
141
  }
142
- $statement = esc_html__( 'Deleting Post Revisions&hellip; %s', 'bbpress' );
143
- $sql_meta = implode( "', '", $sql_meta );
144
- $sql_delete = "DELETE FROM `{$bbp_db->posts}` WHERE `post_parent` IN ('{$sql_meta}') AND `post_type` = 'revision'";
145
- $result = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
146
- $messages[] = sprintf( $statement, $result );
147
- }
148
 
149
- /** Forum moderators ******************************************************/
150
 
151
- $statement = esc_html__( 'Deleting Forum Moderators&hellip; %s', 'bbpress' );
152
- $sql_delete = "DELETE a,b,c FROM `{$bbp_db->terms}` AS a LEFT JOIN `{$bbp_db->term_taxonomy}` AS c ON a.term_id = c.term_id LEFT JOIN `{$bbp_db->term_relationships}` AS b ON b.term_taxonomy_id = c.term_taxonomy_id WHERE c.taxonomy = 'forum-mod'";
153
- $result = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
154
- $messages[] = sprintf( $statement, $result );
 
 
 
155
 
156
  /** Topic Tags ************************************************************/
157
 
158
- $statement = esc_html__( 'Deleting Topic Tags&hellip; %s', 'bbpress' );
159
- $sql_delete = "DELETE a,b,c FROM `{$bbp_db->terms}` AS a LEFT JOIN `{$bbp_db->term_taxonomy}` AS c ON a.term_id = c.term_id LEFT JOIN `{$bbp_db->term_relationships}` AS b ON b.term_taxonomy_id = c.term_taxonomy_id WHERE c.taxonomy = 'topic-tag'";
160
- $result = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
161
- $messages[] = sprintf( $statement, $result );
162
 
163
  /** User ******************************************************************/
164
 
165
  // First, if we're deleting previously imported users, delete them now
166
  if ( ! empty( $_POST['bbpress-delete-imported-users'] ) ) {
167
- $sql_users = $bbp_db->get_results( "SELECT `user_id` FROM `{$bbp_db->usermeta}` WHERE `meta_key` = '_bbp_old_user_id'", OBJECT_K );
 
168
  if ( ! empty( $sql_users ) ) {
169
  $sql_meta = array();
170
  foreach ( $sql_users as $key => $value ) {
171
  $sql_meta[] = $key;
172
  }
173
- $statement = esc_html__( 'Deleting Imported Users&hellip; %s', 'bbpress' );
 
174
  $sql_meta = implode( "', '", $sql_meta );
175
- $sql_delete = "DELETE FROM `{$bbp_db->users}` WHERE `ID` IN ('{$sql_meta}')";
176
- $result = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
177
- $messages[] = sprintf( $statement, $result );
178
- $statement = esc_html__( 'Deleting Imported User Meta&hellip; %s', 'bbpress' );
179
- $sql_delete = "DELETE FROM `{$bbp_db->usermeta}` WHERE `user_id` IN ('{$sql_meta}')";
180
- $result = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
181
- $messages[] = sprintf( $statement, $result );
 
 
 
182
  }
183
  }
184
 
185
  // Next, if we still have users that were not imported delete that meta data
186
- $statement = esc_html__( 'Deleting User Meta&hellip; %s', 'bbpress' );
187
- $sql_delete = "DELETE FROM `{$bbp_db->usermeta}` WHERE `meta_key` LIKE '%%_bbp_%%'";
188
- $result = is_wp_error( $bbp_db->query( $sql_delete ) ) ? $failed : $success;
189
- $messages[] = sprintf( $statement, $result );
190
 
191
  /** Converter *************************************************************/
192
 
193
- $statement = esc_html__( 'Deleting Conversion Table&hellip; %s', 'bbpress' );
194
  $table_name = $bbp_db->prefix . 'bbp_converter_translator';
195
  if ( $bbp_db->get_var( "SHOW TABLES LIKE '{$table_name}'" ) === $table_name ) {
196
- $bbp_db->query( "DROP TABLE {$table_name}" );
197
- $result = $success;
198
- } else {
199
- $result = $failed;
200
  }
201
- $messages[] = sprintf( $statement, $result );
202
 
203
  /** Options ***************************************************************/
204
 
205
- $statement = esc_html__( 'Deleting Settings&hellip; %s', 'bbpress' );
206
  bbp_delete_options();
207
- $messages[] = sprintf( $statement, $success );
208
 
209
  /** Roles *****************************************************************/
210
 
211
- $statement = esc_html__( 'Deleting Roles and Capabilities&hellip; %s', 'bbpress' );
212
  bbp_remove_roles();
213
  bbp_remove_caps();
214
- $messages[] = sprintf( $statement, $success );
215
 
216
  /** Output ****************************************************************/
217
 
76
  }
77
 
78
  /**
79
+ * Handle a bbPress admin area reset request.
80
  *
81
  * @since 2.0.0 bbPress (r2613)
82
  */
83
  function bbp_admin_reset_handler() {
84
 
85
+ // Bail if not resetting.
86
  if ( ! bbp_is_post_request() || empty( $_POST['bbpress-are-you-sure'] ) ) {
87
  return;
88
  }
89
 
90
+ // Only keymasters can proceed.
91
  if ( ! bbp_is_user_keymaster() ) {
92
  return;
93
  }
94
 
95
+ // Bail if not referred from resetter
96
  check_admin_referer( 'bbpress-reset' );
97
 
98
+ // Reset all of bbPress
99
+ bbp_admin_reset_database();
100
+ }
101
+
102
+ /**
103
+ * Wrapper for determining admin reset query feedback presented to a user.
104
+ *
105
+ * @since 2.6.0 bbPress (r6758)
106
+ *
107
+ * @param array $args Array of query, message, and possible responses
108
+ *
109
+ * @return string
110
+ */
111
+ function bbp_admin_reset_query_feedback( $args = array() ) {
112
+ static $defaults = null;
113
+
114
+ // Only set defaults one time to avoid hitting the GetText API repeatedly
115
+ if ( null === $defaults ) {
116
+ $defaults = array(
117
+ 'query' => '',
118
+ 'message' => esc_html__( 'Resetting&hellip;', 'bbpress' ),
119
+ 'responses' => array(
120
+ 'success' => esc_html__( 'Success!', 'bbpress' ),
121
+ 'failure' => esc_html__( 'Failed!', 'bbpress' ),
122
+ 'skipped' => esc_html__( 'Skipped.', 'bbpress' )
123
+ )
124
+ );
125
+ }
126
+
127
+ // Parse arguments
128
+ $r = bbp_parse_args( $args, $defaults, 'admin_reset_query_feedback' );
129
+
130
+ // Success/Failure based on query error
131
+ if ( ! empty( $r['query'] ) ) {
132
+ $query = bbp_db()->query( $r['query'] );
133
+ $result = ! is_wp_error( $query )
134
+ ? $r['responses']['success']
135
+ : $r['responses']['failure'];
136
+
137
+ // Skip if empty
138
+ } else {
139
+ $result = $r['responses']['skipped'];
140
+ }
141
+
142
+ // Return feedback
143
+ return sprintf( $r['message'], $result );
144
+ }
145
+
146
+ /**
147
+ * Perform a bbPress database reset.
148
+ *
149
+ * @since 2.6.0 bbPress
150
+ */
151
+ function bbp_admin_reset_database() {
152
+
153
+ // Define variables.
154
  $messages = array();
155
+ $sql_meta = array();
156
+ $bbp_db = bbp_db();
157
 
158
+ // Flush the whole cache; things are about to get ugly.
159
  wp_cache_flush();
160
 
161
  /** Posts *****************************************************************/
162
 
163
+ // Post types and status.
164
  $fpt = bbp_get_forum_post_type();
165
  $tpt = bbp_get_topic_post_type();
166
  $rpt = bbp_get_reply_post_type();
167
 
168
+ // Get post IDs
169
+ $sql_posts = $bbp_db->get_results( "SELECT `ID` FROM `{$bbp_db->posts}` WHERE `post_type` IN ('{$fpt}', '{$tpt}', '{$rpt}')", OBJECT_K );
 
 
 
 
 
 
 
 
 
170
  if ( ! empty( $sql_posts ) ) {
171
+
172
+ // Meta data
173
  foreach ( $sql_posts as $key => $value ) {
174
  $sql_meta[] = $key;
175
  }
176
+ $sql_meta = implode( "', '", $sql_meta );
 
 
 
 
 
177
 
178
+ // Delete posts
179
+ $messages[] = bbp_admin_reset_query_feedback( array(
180
+ 'query' => "DELETE FROM `{$bbp_db->posts}` WHERE `post_type` IN ('{$fpt}', '{$tpt}', '{$rpt}')",
181
+ 'message' => esc_html__( 'Removing Forums, Topics, and Replies&hellip; %s', 'bbpress' )
182
+ ) );
183
 
184
+ /** Post Meta *********************************************************/
185
+
186
+ if ( ! empty( $sql_posts ) ) {
187
+ $messages[] = bbp_admin_reset_query_feedback( array(
188
+ 'query' => "DELETE FROM `{$bbp_db->postmeta}` WHERE `post_id` IN ('{$sql_meta}')",
189
+ 'message' => esc_html__( 'Removing Forum, Topic, and Reply Meta Data&hellip; %s', 'bbpress' )
190
+ ) );
191
  }
 
 
 
 
 
 
192
 
193
+ /** Post Revisions ****************************************************/
194
 
195
+ if ( ! empty( $sql_posts ) ) {
196
+ $messages[] = bbp_admin_reset_query_feedback( array(
197
+ 'query' => "DELETE FROM `{$bbp_db->posts}` WHERE `post_parent` IN ('{$sql_meta}') AND `post_type` = 'revision'",
198
+ 'message' => esc_html__( 'Removing Revision Data&hellip; %s', 'bbpress' )
199
+ ) );
200
+ }
201
+ }
202
 
203
  /** Topic Tags ************************************************************/
204
 
205
+ $messages[] = bbp_admin_reset_query_feedback( array(
206
+ 'query' => "DELETE a,b,c FROM `{$bbp_db->terms}` AS a LEFT JOIN `{$bbp_db->term_taxonomy}` AS c ON a.term_id = c.term_id LEFT JOIN `{$bbp_db->term_relationships}` AS b ON b.term_taxonomy_id = c.term_taxonomy_id WHERE c.taxonomy = 'topic-tag'",
207
+ 'message' => esc_html__( 'Deleting Topic Tags&hellip; %s', 'bbpress' )
208
+ ) );
209
 
210
  /** User ******************************************************************/
211
 
212
  // First, if we're deleting previously imported users, delete them now
213
  if ( ! empty( $_POST['bbpress-delete-imported-users'] ) ) {
214
+ $sql_users = $bbp_db->get_results( "SELECT `user_id` FROM `{$bbp_db->usermeta}` WHERE `meta_key` = '_bbp_old_user_id'", OBJECT_K );
215
+
216
  if ( ! empty( $sql_users ) ) {
217
  $sql_meta = array();
218
  foreach ( $sql_users as $key => $value ) {
219
  $sql_meta[] = $key;
220
  }
221
+
222
+ // Users
223
  $sql_meta = implode( "', '", $sql_meta );
224
+ $messages[] = bbp_admin_reset_query_feedback( array(
225
+ 'query' => "DELETE FROM `{$bbp_db->users}` WHERE `ID` IN ('{$sql_meta}')",
226
+ 'message' => esc_html__( 'Deleting Imported Users&hellip; %s', 'bbpress' )
227
+ ) );
228
+
229
+ // User meta
230
+ $messages[] = bbp_admin_reset_query_feedback( array(
231
+ 'query' => "DELETE FROM `{$bbp_db->usermeta}` WHERE `user_id` IN ('{$sql_meta}')",
232
+ 'message' => esc_html__( 'Deleting Imported User Meta&hellip; %s', 'bbpress' )
233
+ ) );
234
  }
235
  }
236
 
237
  // Next, if we still have users that were not imported delete that meta data
238
+ $messages[] = bbp_admin_reset_query_feedback( array(
239
+ 'query' => "DELETE FROM `{$bbp_db->usermeta}` WHERE `meta_key` LIKE '%%_bbp_%%'",
240
+ 'message' => esc_html__( 'Deleting bbPress Specific User Meta&hellip; %s', 'bbpress' )
241
+ ) );
242
 
243
  /** Converter *************************************************************/
244
 
 
245
  $table_name = $bbp_db->prefix . 'bbp_converter_translator';
246
  if ( $bbp_db->get_var( "SHOW TABLES LIKE '{$table_name}'" ) === $table_name ) {
247
+ $messages[] = bbp_admin_reset_query_feedback( array(
248
+ 'query' => "DROP TABLE {$table_name}",
249
+ 'message' => esc_html__( 'Dropping Conversion Table&hellip; %s', 'bbpress' )
250
+ ) );
251
  }
 
252
 
253
  /** Options ***************************************************************/
254
 
 
255
  bbp_delete_options();
256
+ $messages[] = esc_html__( 'Deleting Settings&hellip; Success!', 'bbpress' );
257
 
258
  /** Roles *****************************************************************/
259
 
 
260
  bbp_remove_roles();
261
  bbp_remove_caps();
262
+ $messages[] = esc_html__( 'Removing Roles and Capabilities&hellip; Success!', 'bbpress' );
263
 
264
  /** Output ****************************************************************/
265
 
includes/admin/topics.php CHANGED
@@ -78,12 +78,15 @@ class BBP_Topics_Admin {
78
 
79
  // Check if there are any bbp_toggle_topic_* requests on admin_init, also have a message displayed
80
  add_action( 'load-edit.php', array( $this, 'toggle_topic' ) );
81
- add_action( 'admin_notices', array( $this, 'toggle_topic_notice' ) );
82
 
83
  // Add ability to filter topics and replies per forum
84
  add_filter( 'restrict_manage_posts', array( $this, 'filter_dropdown' ) );
85
  add_filter( 'bbp_request', array( $this, 'filter_post_rows' ) );
86
 
 
 
 
87
  // Contextual Help
88
  add_action( 'load-edit.php', array( $this, 'edit_help' ) );
89
  add_action( 'load-post.php', array( $this, 'new_help' ) );
@@ -140,13 +143,13 @@ class BBP_Topics_Admin {
140
  '<p>' . __( 'Hovering over a row in the topics list will display action links that allow you to manage your topic. You can perform the following actions:', 'bbpress' ) . '</p>' .
141
  '<ul>' .
142
  '<li>' . __( '<strong>Edit</strong> takes you to the editing screen for that topic. You can also reach that screen by clicking on the topic title.', 'bbpress' ) . '</li>' .
143
- '<li>' . __( '<strong>Trash</strong> removes your topic from this list and places it in the trash, from which you can permanently delete it.', 'bbpress' ) . '</li>' .
144
- '<li>' . __( '<strong>Spam</strong> removes your topic from this list and places it in the spam queue, from which you can permanently delete it.', 'bbpress' ) . '</li>' .
145
- '<li>' . __( '<strong>View</strong> will take you to your live site to view the topic.', 'bbpress' ) . '</li>' .
146
- '<li>' . __( '<strong>Approve</strong> will change the status from pending to publish.', 'bbpress' ) . '</li>' .
147
- '<li>' . __( '<strong>Close</strong> will mark the selected topic as &#8217;closed&#8217; and disable the option to post new replies to the topic.', 'bbpress' ) . '</li>' .
148
  '<li>' . __( '<strong>Stick</strong> will keep the selected topic &#8217;pinned&#8217; to the top the parent forum topic list.', 'bbpress' ) . '</li>' .
149
  '<li>' . __( '<strong>Stick <em>(to front)</em></strong> will keep the selected topic &#8217;pinned&#8217; to the top of ALL forums and be visable in any forums topics list.', 'bbpress' ) . '</li>' .
 
 
 
 
 
150
  '</ul>'
151
  ) );
152
 
@@ -192,7 +195,7 @@ class BBP_Topics_Admin {
192
 
193
  $publish_box = '<p>' . __( '<strong>Publish</strong> - You can set the terms of publishing your topic in the Publish box. For Status, Visibility, and Publish (immediately), click on the Edit link to reveal more options. Visibility includes options for password-protecting a topic or making it stay at the top of your blog indefinitely (sticky). Publish (immediately) allows you to set a future or past date and time, so you can schedule a topic to be published in the future or backdate a topic.', 'bbpress' ) . '</p>';
194
 
195
- if ( current_theme_supports( 'topic-thumbnails' ) && post_type_supports( 'topic', 'thumbnail' ) ) {
196
  $publish_box .= '<p>' . __( '<strong>Featured Image</strong> - This allows you to associate an image with your topic without inserting it. This is usually useful only if your theme makes use of the featured image as a topic thumbnail on the home page, a custom header, etc.', 'bbpress' ) . '</p>';
197
  }
198
 
@@ -232,9 +235,9 @@ class BBP_Topics_Admin {
232
 
233
  if ( current_user_can( 'moderate' ) ) {
234
  if ( bbp_get_spam_status_id() === get_query_var( 'post_status' ) ) {
235
- $actions['unspam'] = __( 'Unspam', 'bbpress' );
236
  } else {
237
- $actions['spam'] = __( 'Spam', 'bbpress' );
238
  }
239
  }
240
 
@@ -277,7 +280,7 @@ class BBP_Topics_Admin {
277
 
278
  foreach ( (array) $post_ids as $post_id ) {
279
  if ( ! current_user_can( 'moderate', $post_id ) ) {
280
- wp_die( __( 'Sorry, you are not allowed to spam this item.', 'bbpress' ) );
281
  }
282
 
283
  if ( wp_check_post_lock( $post_id ) ) {
@@ -286,7 +289,7 @@ class BBP_Topics_Admin {
286
  }
287
 
288
  if ( ! bbp_spam_topic( $post_id ) ) {
289
- wp_die( __( 'Error in spamming topic.', 'bbpress' ) );
290
  }
291
 
292
  $updated++;
@@ -302,7 +305,7 @@ class BBP_Topics_Admin {
302
 
303
  foreach ( (array) $post_ids as $post_id ) {
304
  if ( ! current_user_can( 'moderate', $post_id ) ) {
305
- wp_die( __( 'Sorry, you are not allowed to unspam this topic.', 'bbpress' ) );
306
  }
307
 
308
  if ( wp_check_post_lock( $post_id ) ) {
@@ -311,7 +314,7 @@ class BBP_Topics_Admin {
311
  }
312
 
313
  if ( ! bbp_unspam_topic( $post_id ) ) {
314
- wp_die( __( 'Error in unspamming topic.', 'bbpress' ) );
315
  }
316
 
317
  $updated++;
@@ -335,7 +338,7 @@ class BBP_Topics_Admin {
335
  public function attributes_metabox() {
336
  add_meta_box(
337
  'bbp_topic_attributes',
338
- __( 'Topic Attributes', 'bbpress' ),
339
  'bbp_topic_metabox',
340
  $this->post_type,
341
  'side',
@@ -358,7 +361,7 @@ class BBP_Topics_Admin {
358
  // Add the meta-box
359
  add_meta_box(
360
  'bbp_author_metabox',
361
- __( 'Author Information', 'bbpress' ),
362
  'bbp_author_metabox',
363
  $this->post_type,
364
  'side',
@@ -384,7 +387,7 @@ class BBP_Topics_Admin {
384
  // Add the meta-box
385
  add_meta_box(
386
  'bbp_topic_replies_metabox',
387
- __( 'Replies', 'bbpress' ),
388
  'bbp_topic_replies_metabox',
389
  $this->post_type,
390
  'normal',
@@ -414,7 +417,7 @@ class BBP_Topics_Admin {
414
  // Add the meta-box
415
  add_meta_box(
416
  'bbp_topic_engagements_metabox',
417
- __( 'Engagements', 'bbpress' ),
418
  'bbp_topic_engagements_metabox',
419
  $this->post_type,
420
  'side',
@@ -444,7 +447,7 @@ class BBP_Topics_Admin {
444
  // Add the meta-box
445
  add_meta_box(
446
  'bbp_topic_favorites_metabox',
447
- __( 'Favorites', 'bbpress' ),
448
  'bbp_topic_favorites_metabox',
449
  $this->post_type,
450
  'normal',
@@ -474,7 +477,7 @@ class BBP_Topics_Admin {
474
  // Add the meta-box
475
  add_meta_box(
476
  'bbp_topic_subscriptions_metabox',
477
- __( 'Subscriptions', 'bbpress' ),
478
  'bbp_topic_subscriptions_metabox',
479
  $this->post_type,
480
  'normal',
@@ -571,12 +574,12 @@ class BBP_Topics_Admin {
571
  // Bail if topic is missing
572
  $topic_id = bbp_get_topic_id( $_GET['topic_id'] );
573
  if ( ! bbp_get_topic( $topic_id ) ) {
574
- wp_die( __( 'The topic was not found.', 'bbpress' ) );
575
  }
576
 
577
  // What is the user doing here?
578
  if ( ! current_user_can( 'moderate', $topic_id ) ) {
579
- wp_die( __( 'You do not have permission to do that.', 'bbpress' ) );
580
  }
581
 
582
  // Defaults
@@ -588,13 +591,13 @@ class BBP_Topics_Admin {
588
  case 'bbp_toggle_topic_approve' :
589
  check_admin_referer( 'approve-topic_' . $topic_id );
590
 
591
- $is_approve = bbp_is_topic_pending( $topic_id );
592
  $message = ( true === $is_approve )
593
- ? 'approved'
594
- : 'unapproved';
595
  $success = ( true === $is_approve )
596
- ? bbp_approve_topic( $topic_id )
597
- : bbp_unapprove_topic( $topic_id );
598
 
599
  break;
600
 
@@ -707,56 +710,56 @@ class BBP_Topics_Admin {
707
  switch ( $notice ) {
708
  case 'opened' :
709
  $message = ( $is_failure === true )
710
- ? sprintf( __( 'There was a problem opening the topic "%1$s".', 'bbpress' ), $topic_title )
711
- : sprintf( __( 'Topic "%1$s" successfully opened.', 'bbpress' ), $topic_title );
712
  break;
713
 
714
  case 'closed' :
715
  $message = ( $is_failure === true )
716
- ? sprintf( __( 'There was a problem closing the topic "%1$s".', 'bbpress' ), $topic_title )
717
- : sprintf( __( 'Topic "%1$s" successfully closed.', 'bbpress' ), $topic_title );
718
  break;
719
 
720
  case 'super_sticky' :
721
  $message = ( $is_failure === true )
722
- ? sprintf( __( 'There was a problem sticking the topic "%1$s" to front.', 'bbpress' ), $topic_title )
723
- : sprintf( __( 'Topic "%1$s" successfully stuck to front.', 'bbpress' ), $topic_title );
724
  break;
725
 
726
  case 'stuck' :
727
  $message = ( $is_failure === true )
728
- ? sprintf( __( 'There was a problem sticking the topic "%1$s".', 'bbpress' ), $topic_title )
729
- : sprintf( __( 'Topic "%1$s" successfully stuck.', 'bbpress' ), $topic_title );
730
  break;
731
 
732
  case 'unstuck' :
733
  $message = ( $is_failure === true )
734
- ? sprintf( __( 'There was a problem unsticking the topic "%1$s".', 'bbpress' ), $topic_title )
735
- : sprintf( __( 'Topic "%1$s" successfully unstuck.', 'bbpress' ), $topic_title );
736
  break;
737
 
738
  case 'spammed' :
739
  $message = ( $is_failure === true )
740
- ? sprintf( __( 'There was a problem marking the topic "%1$s" as spam.', 'bbpress' ), $topic_title )
741
- : sprintf( __( 'Topic "%1$s" successfully marked as spam.', 'bbpress' ), $topic_title );
742
  break;
743
 
744
  case 'unspammed' :
745
  $message = ( $is_failure === true )
746
- ? sprintf( __( 'There was a problem unmarking the topic "%1$s" as spam.', 'bbpress' ), $topic_title )
747
- : sprintf( __( 'Topic "%1$s" successfully unmarked as spam.', 'bbpress' ), $topic_title );
748
  break;
749
 
750
  case 'approved' :
751
  $message = ( $is_failure === true )
752
- ? sprintf( __( 'There was a problem approving the topic "%1$s".', 'bbpress' ), $topic_title )
753
- : sprintf( __( 'Topic "%1$s" successfully approved.', 'bbpress' ), $topic_title );
754
  break;
755
 
756
  case 'unapproved' :
757
  $message = ( $is_failure === true )
758
- ? sprintf( __( 'There was a problem unapproving the topic "%1$s".', 'bbpress' ), $topic_title )
759
- : sprintf( __( 'Topic "%1$s" successfully unapproved.', 'bbpress' ), $topic_title );
760
  break;
761
  }
762
 
@@ -766,13 +769,33 @@ class BBP_Topics_Admin {
766
  ? 'error'
767
  : 'updated';
768
 
769
- ?>
 
 
770
 
771
- <div id="message" class="<?php echo esc_html( $class ); ?> fade">
772
- <p style="line-height: 150%"><?php echo esc_html( $message ); ?></p>
773
- </div>
 
 
 
 
 
774
 
775
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
776
  }
777
 
778
  /**
@@ -828,13 +851,13 @@ class BBP_Topics_Admin {
828
  public function column_headers( $columns ) {
829
  $columns = array(
830
  'cb' => '<input type="checkbox" />',
831
- 'title' => __( 'Topics', 'bbpress' ),
832
- 'bbp_topic_forum' => __( 'Forum', 'bbpress' ),
833
- 'bbp_topic_reply_count' => __( 'Replies', 'bbpress' ),
834
- 'bbp_topic_voice_count' => __( 'Voices', 'bbpress' ),
835
- 'bbp_topic_author' => __( 'Author', 'bbpress' ),
836
- 'bbp_topic_created' => __( 'Created', 'bbpress' ),
837
- 'bbp_topic_freshness' => __( 'Last Post', 'bbpress' )
838
  );
839
 
840
  // Filter & return
@@ -929,12 +952,14 @@ class BBP_Topics_Admin {
929
  *
930
  * @since 2.0.0 bbPress (r2485)
931
  *
932
- * @param array $actions Actions
933
- * @param array $topic Topic object
 
934
  * @return array $actions Actions
935
  */
936
- public function row_actions( $actions, $topic ) {
937
 
 
938
  unset( $actions['inline hide-if-no-js'] );
939
 
940
  // View link
@@ -956,11 +981,17 @@ class BBP_Topics_Admin {
956
  // Pending
957
  // Show the 'approve' and 'view' link on pending posts only and 'unapprove' on published posts only
958
  $approve_uri = wp_nonce_url( add_query_arg( array( 'topic_id' => $topic->ID, 'action' => 'bbp_toggle_topic_approve' ), remove_query_arg( array( 'bbp_topic_toggle_notice', 'topic_id', 'failed', 'super' ) ) ), 'approve-topic_' . $topic->ID );
959
- if ( bbp_is_topic_published( $topic->ID ) ) {
960
  $actions['unapproved'] = '<a href="' . esc_url( $approve_uri ) . '" title="' . esc_attr__( 'Unapprove this topic', 'bbpress' ) . '">' . _x( 'Unapprove', 'Unapprove Topic', 'bbpress' ) . '</a>';
961
- } elseif ( ! bbp_is_topic_private( $topic->ID ) ) {
962
- $actions['approved'] = '<a href="' . esc_url( $approve_uri ) . '" title="' . esc_attr__( 'Approve this topic', 'bbpress' ) . '">' . _x( 'Approve', 'Approve Topic', 'bbpress' ) . '</a>';
963
- $actions['view'] = '<a href="' . esc_url( $view_link ) . '" title="' . esc_attr( sprintf( __( 'View &#8220;%s&#8221;', 'bbpress' ), bbp_get_topic_title( $topic->ID ) ) ) . '" rel="permalink">' . esc_html__( 'View', 'bbpress' ) . '</a>';
 
 
 
 
 
 
964
  }
965
 
966
  // Close
@@ -975,7 +1006,7 @@ class BBP_Topics_Admin {
975
  }
976
 
977
  // Sticky
978
- // Dont show sticky if topic links is spam, trash or pending
979
  if ( ! bbp_is_topic_spam( $topic->ID ) && ! bbp_is_topic_trash( $topic->ID ) && ! bbp_is_topic_pending( $topic->ID ) ) {
980
  $stick_uri = wp_nonce_url( add_query_arg( array( 'topic_id' => $topic->ID, 'action' => 'bbp_toggle_topic_stick' ), remove_query_arg( array( 'bbp_topic_toggle_notice', 'topic_id', 'failed', 'super' ) ) ), 'stick-topic_' . $topic->ID );
981
  if ( bbp_is_topic_sticky( $topic->ID ) ) {
@@ -988,10 +1019,10 @@ class BBP_Topics_Admin {
988
 
989
  // Spam
990
  $spam_uri = wp_nonce_url( add_query_arg( array( 'topic_id' => $topic->ID, 'action' => 'bbp_toggle_topic_spam' ), remove_query_arg( array( 'bbp_topic_toggle_notice', 'topic_id', 'failed', 'super' ) ) ), 'spam-topic_' . $topic->ID );
991
- if ( bbp_is_topic_spam( $topic->ID ) ) {
992
- $actions['spam'] = '<a href="' . esc_url( $spam_uri ) . '" title="' . esc_attr__( 'Mark the topic as not spam', 'bbpress' ) . '">' . esc_html__( 'Not spam', 'bbpress' ) . '</a>';
993
- } else {
994
  $actions['spam'] = '<a href="' . esc_url( $spam_uri ) . '" title="' . esc_attr__( 'Mark this topic as spam', 'bbpress' ) . '">' . esc_html__( 'Spam', 'bbpress' ) . '</a>';
 
 
995
  }
996
  }
997
 
@@ -1008,12 +1039,40 @@ class BBP_Topics_Admin {
1008
 
1009
  if ( ( bbp_get_trash_status_id() === $topic->post_status ) || empty( $trash_days ) ) {
1010
  $actions['delete'] = "<a class='submitdelete' title='" . esc_attr__( 'Delete this item permanently', 'bbpress' ) . "' href='" . esc_url( get_delete_post_link( $topic->ID, '', true ) ) . "'>" . esc_html__( 'Delete Permanently', 'bbpress' ) . "</a>";
1011
- } elseif ( bbp_get_spam_status_id() === $topic->post_status ) {
1012
- unset( $actions['trash'] );
1013
  }
1014
  }
1015
 
1016
- return $actions;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1017
  }
1018
 
1019
  /**
@@ -1025,17 +1084,6 @@ class BBP_Topics_Admin {
1025
  */
1026
  public function filter_dropdown() {
1027
 
1028
- // Add "Empty Spam" button for moderators
1029
- if ( ! empty( $_GET['post_status'] ) && ( bbp_get_spam_status_id() === $_GET['post_status'] ) && current_user_can( 'moderate' ) ) {
1030
- wp_nonce_field( 'bulk-destroy', '_destroy_nonce' );
1031
- submit_button(
1032
- esc_attr__( 'Empty Spam', 'bbpress' ),
1033
- 'button-secondary apply',
1034
- 'delete_all',
1035
- false
1036
- );
1037
- }
1038
-
1039
  // Get which forum is selected
1040
  $selected = ! empty( $_GET['bbp_forum_id'] )
1041
  ? (int) $_GET['bbp_forum_id']
@@ -1048,6 +1096,34 @@ class BBP_Topics_Admin {
1048
  ) );
1049
  }
1050
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1051
  /**
1052
  * Adjust the request query and include the forum id
1053
  *
@@ -1096,63 +1172,63 @@ class BBP_Topics_Admin {
1096
  // Updated
1097
  1 => sprintf(
1098
  '%1$s <a href="%2$s">%3$s</a>',
1099
- __( 'Topic updated.', 'bbpress' ),
1100
  $topic_url,
1101
- __( 'View topic', 'bbpress' )
1102
  ),
1103
 
1104
  // Custom field updated
1105
- 2 => __( 'Custom field updated.', 'bbpress' ),
1106
 
1107
  // Custom field deleted
1108
- 3 => __( 'Custom field deleted.', 'bbpress' ),
1109
 
1110
  // Topic updated
1111
- 4 => __( 'Topic updated.', 'bbpress' ),
1112
 
1113
  // Restored from revision
1114
  // translators: %s: date and time of the revision
1115
  5 => isset( $_GET['revision'] )
1116
- ? sprintf( __( 'Topic restored to revision from %s', 'bbpress' ), wp_post_revision_title( (int) $_GET['revision'], false ) )
1117
  : false,
1118
 
1119
  // Topic created
1120
  6 => sprintf(
1121
  '%1$s <a href="%2$s">%3$s</a>',
1122
- __( 'Topic created.', 'bbpress' ),
1123
  $topic_url,
1124
- __( 'View topic', 'bbpress' )
1125
  ),
1126
 
1127
  // Topic saved
1128
- 7 => __( 'Topic saved.', 'bbpress' ),
1129
 
1130
  // Topic submitted
1131
  8 => sprintf(
1132
  '%1$s <a href="%2$s" target="_blank">%3$s</a>',
1133
- __( 'Topic submitted.', 'bbpress' ),
1134
  esc_url( add_query_arg( 'preview', 'true', $topic_url ) ),
1135
- __( 'Preview topic', 'bbpress' )
1136
  ),
1137
 
1138
  // Topic scheduled
1139
  9 => sprintf(
1140
  '%1$s <a target="_blank" href="%2$s">%3$s</a>',
1141
  sprintf(
1142
- __( 'Topic scheduled for: %s.', 'bbpress' ),
1143
  // translators: Publish box date format, see http://php.net/date
1144
  '<strong>' . date_i18n( __( 'M j, Y @ G:i', 'bbpress' ), strtotime( $post_date ) ) . '</strong>'
1145
  ),
1146
  $topic_url,
1147
- __( 'Preview topic', 'bbpress' )
1148
  ),
1149
 
1150
  // Topic draft updated
1151
  10 => sprintf(
1152
  '%1$s <a href="%2$s" target="_blank">%3$s</a>',
1153
- __( 'Topic draft updated.', 'bbpress' ),
1154
  esc_url( add_query_arg( 'preview', 'true', $topic_url ) ),
1155
- __( 'Preview topic', 'bbpress' )
1156
  ),
1157
  );
1158
 
@@ -1179,5 +1255,5 @@ function bbp_admin_topics( $current_screen ) {
1179
  }
1180
 
1181
  // Init the topics admin
1182
- bbpress()->admin->topics = new BBP_Topics_Admin();
1183
  }
78
 
79
  // Check if there are any bbp_toggle_topic_* requests on admin_init, also have a message displayed
80
  add_action( 'load-edit.php', array( $this, 'toggle_topic' ) );
81
+ add_action( 'load-edit.php', array( $this, 'toggle_topic_notice' ) );
82
 
83
  // Add ability to filter topics and replies per forum
84
  add_filter( 'restrict_manage_posts', array( $this, 'filter_dropdown' ) );
85
  add_filter( 'bbp_request', array( $this, 'filter_post_rows' ) );
86
 
87
+ // Empty spam
88
+ add_filter( 'manage_posts_extra_tablenav', array( $this, 'filter_empty_spam' ) );
89
+
90
  // Contextual Help
91
  add_action( 'load-edit.php', array( $this, 'edit_help' ) );
92
  add_action( 'load-post.php', array( $this, 'new_help' ) );
143
  '<p>' . __( 'Hovering over a row in the topics list will display action links that allow you to manage your topic. You can perform the following actions:', 'bbpress' ) . '</p>' .
144
  '<ul>' .
145
  '<li>' . __( '<strong>Edit</strong> takes you to the editing screen for that topic. You can also reach that screen by clicking on the topic title.', 'bbpress' ) . '</li>' .
 
 
 
 
 
146
  '<li>' . __( '<strong>Stick</strong> will keep the selected topic &#8217;pinned&#8217; to the top the parent forum topic list.', 'bbpress' ) . '</li>' .
147
  '<li>' . __( '<strong>Stick <em>(to front)</em></strong> will keep the selected topic &#8217;pinned&#8217; to the top of ALL forums and be visable in any forums topics list.', 'bbpress' ) . '</li>' .
148
+ '<li>' . __( '<strong>Approve</strong> will change the status from pending to publish.', 'bbpress' ) . '</li>' .
149
+ '<li>' . __( '<strong>Close</strong> will mark the selected topic as &#8217;closed&#8217; and disable the ability to post new replies to it.', 'bbpress' ) . '</li>' .
150
+ '<li>' . __( '<strong>Spam</strong> removes your topic from this list and places it in the spam queue, from which you can permanently delete it.', 'bbpress' ) . '</li>' .
151
+ '<li>' . __( '<strong>Trash</strong> removes your topic from this list and places it in the trash, from which you can permanently delete it.', 'bbpress' ) . '</li>' .
152
+ '<li>' . __( '<strong>View</strong> will take you to your live site to view the topic.', 'bbpress' ) . '</li>' .
153
  '</ul>'
154
  ) );
155
 
195
 
196
  $publish_box = '<p>' . __( '<strong>Publish</strong> - You can set the terms of publishing your topic in the Publish box. For Status, Visibility, and Publish (immediately), click on the Edit link to reveal more options. Visibility includes options for password-protecting a topic or making it stay at the top of your blog indefinitely (sticky). Publish (immediately) allows you to set a future or past date and time, so you can schedule a topic to be published in the future or backdate a topic.', 'bbpress' ) . '</p>';
197
 
198
+ if ( current_theme_supports( 'topic-thumbnails' ) && post_type_supports( bbp_get_topic_post_type(), 'thumbnail' ) ) {
199
  $publish_box .= '<p>' . __( '<strong>Featured Image</strong> - This allows you to associate an image with your topic without inserting it. This is usually useful only if your theme makes use of the featured image as a topic thumbnail on the home page, a custom header, etc.', 'bbpress' ) . '</p>';
200
  }
201
 
235
 
236
  if ( current_user_can( 'moderate' ) ) {
237
  if ( bbp_get_spam_status_id() === get_query_var( 'post_status' ) ) {
238
+ $actions['unspam'] = esc_html__( 'Unspam', 'bbpress' );
239
  } else {
240
+ $actions['spam'] = esc_html__( 'Spam', 'bbpress' );
241
  }
242
  }
243
 
280
 
281
  foreach ( (array) $post_ids as $post_id ) {
282
  if ( ! current_user_can( 'moderate', $post_id ) ) {
283
+ wp_die( esc_html__( 'Sorry, you are not allowed to spam this item.', 'bbpress' ) );
284
  }
285
 
286
  if ( wp_check_post_lock( $post_id ) ) {
289
  }
290
 
291
  if ( ! bbp_spam_topic( $post_id ) ) {
292
+ wp_die( esc_html__( 'Error in spamming topic.', 'bbpress' ) );
293
  }
294
 
295
  $updated++;
305
 
306
  foreach ( (array) $post_ids as $post_id ) {
307
  if ( ! current_user_can( 'moderate', $post_id ) ) {
308
+ wp_die( esc_html__( 'Sorry, you are not allowed to unspam this topic.', 'bbpress' ) );
309
  }
310
 
311
  if ( wp_check_post_lock( $post_id ) ) {
314
  }
315
 
316
  if ( ! bbp_unspam_topic( $post_id ) ) {
317
+ wp_die( esc_html__( 'Error in unspamming topic.', 'bbpress' ) );
318
  }
319
 
320
  $updated++;
338
  public function attributes_metabox() {
339
  add_meta_box(
340
  'bbp_topic_attributes',
341
+ esc_html__( 'Topic Attributes', 'bbpress' ),
342
  'bbp_topic_metabox',
343
  $this->post_type,
344
  'side',
361
  // Add the meta-box
362
  add_meta_box(
363
  'bbp_author_metabox',
364
+ esc_html__( 'Author Information', 'bbpress' ),
365
  'bbp_author_metabox',
366
  $this->post_type,
367
  'side',
387
  // Add the meta-box
388
  add_meta_box(
389
  'bbp_topic_replies_metabox',
390
+ esc_html__( 'Replies', 'bbpress' ),
391
  'bbp_topic_replies_metabox',
392
  $this->post_type,
393
  'normal',
417
  // Add the meta-box
418
  add_meta_box(
419
  'bbp_topic_engagements_metabox',
420
+ esc_html__( 'Engagements', 'bbpress' ),
421
  'bbp_topic_engagements_metabox',
422
  $this->post_type,
423
  'side',
447
  // Add the meta-box
448
  add_meta_box(
449
  'bbp_topic_favorites_metabox',
450
+ esc_html__( 'Favorites', 'bbpress' ),
451
  'bbp_topic_favorites_metabox',
452
  $this->post_type,
453
  'normal',
477
  // Add the meta-box
478
  add_meta_box(
479
  'bbp_topic_subscriptions_metabox',
480
+ esc_html__( 'Subscriptions', 'bbpress' ),
481
  'bbp_topic_subscriptions_metabox',
482
  $this->post_type,
483
  'normal',
574
  // Bail if topic is missing
575
  $topic_id = bbp_get_topic_id( $_GET['topic_id'] );
576
  if ( ! bbp_get_topic( $topic_id ) ) {
577
+ wp_die( esc_html__( 'The topic was not found.', 'bbpress' ) );
578
  }
579
 
580
  // What is the user doing here?
581
  if ( ! current_user_can( 'moderate', $topic_id ) ) {
582
+ wp_die( esc_html__( 'You do not have permission to do that.', 'bbpress' ) );
583
  }
584
 
585
  // Defaults
591
  case 'bbp_toggle_topic_approve' :
592
  check_admin_referer( 'approve-topic_' . $topic_id );
593
 
594
+ $is_approve = bbp_is_topic_public( $topic_id );
595
  $message = ( true === $is_approve )
596
+ ? 'unapproved'
597
+ : 'approved';
598
  $success = ( true === $is_approve )
599
+ ? bbp_unapprove_topic( $topic_id )
600
+ : bbp_approve_topic( $topic_id );
601
 
602
  break;
603
 
710
  switch ( $notice ) {
711
  case 'opened' :
712
  $message = ( $is_failure === true )
713
+ ? sprintf( esc_html__( 'There was a problem opening the topic "%1$s".', 'bbpress' ), $topic_title )
714
+ : sprintf( esc_html__( 'Topic "%1$s" successfully opened.', 'bbpress' ), $topic_title );
715
  break;
716
 
717
  case 'closed' :
718
  $message = ( $is_failure === true )
719
+ ? sprintf( esc_html__( 'There was a problem closing the topic "%1$s".', 'bbpress' ), $topic_title )
720
+ : sprintf( esc_html__( 'Topic "%1$s" successfully closed.', 'bbpress' ), $topic_title );
721
  break;
722
 
723
  case 'super_sticky' :
724
  $message = ( $is_failure === true )
725
+ ? sprintf( esc_html__( 'There was a problem sticking the topic "%1$s" to front.', 'bbpress' ), $topic_title )
726
+ : sprintf( esc_html__( 'Topic "%1$s" successfully stuck to front.', 'bbpress' ), $topic_title );
727
  break;
728
 
729
  case 'stuck' :
730
  $message = ( $is_failure === true )
731
+ ? sprintf( esc_html__( 'There was a problem sticking the topic "%1$s".', 'bbpress' ), $topic_title )
732
+ : sprintf( esc_html__( 'Topic "%1$s" successfully stuck.', 'bbpress' ), $topic_title );
733
  break;
734
 
735
  case 'unstuck' :
736
  $message = ( $is_failure === true )
737
+ ? sprintf( esc_html__( 'There was a problem unsticking the topic "%1$s".', 'bbpress' ), $topic_title )
738
+ : sprintf( esc_html__( 'Topic "%1$s" successfully unstuck.', 'bbpress' ), $topic_title );
739
  break;
740
 
741
  case 'spammed' :
742
  $message = ( $is_failure === true )
743
+ ? sprintf( esc_html__( 'There was a problem marking the topic "%1$s" as spam.', 'bbpress' ), $topic_title )
744
+ : sprintf( esc_html__( 'Topic "%1$s" successfully marked as spam.', 'bbpress' ), $topic_title );
745
  break;
746
 
747
  case 'unspammed' :
748
  $message = ( $is_failure === true )
749
+ ? sprintf( esc_html__( 'There was a problem unmarking the topic "%1$s" as spam.', 'bbpress' ), $topic_title )
750
+ : sprintf( esc_html__( 'Topic "%1$s" successfully unmarked as spam.', 'bbpress' ), $topic_title );
751
  break;
752
 
753
  case 'approved' :
754
  $message = ( $is_failure === true )
755
+ ? sprintf( esc_html__( 'There was a problem approving the topic "%1$s".', 'bbpress' ), $topic_title )
756
+ : sprintf( esc_html__( 'Topic "%1$s" successfully approved.', 'bbpress' ), $topic_title );
757
  break;
758
 
759
  case 'unapproved' :
760
  $message = ( $is_failure === true )
761
+ ? sprintf( esc_html__( 'There was a problem unapproving the topic "%1$s".', 'bbpress' ), $topic_title )
762
+ : sprintf( esc_html__( 'Topic "%1$s" successfully unapproved.', 'bbpress' ), $topic_title );
763
  break;
764
  }
765
 
769
  ? 'error'
770
  : 'updated';
771
 
772
+ // Add the notice
773
+ bbp_admin()->add_notice( $message, $class, true );
774
+ }
775
 
776
+ /**
777
+ * Returns an array of keys used to sort row actions
778
+ *
779
+ * @since 2.6.0 bbPress (r6771)
780
+ *
781
+ * @return array
782
+ */
783
+ private function get_row_action_sort_order() {
784
 
785
+ // Filter & return
786
+ return (array) apply_filters( 'bbp_admin_topics_row_action_sort_order', array(
787
+ 'edit',
788
+ 'stick',
789
+ 'approved',
790
+ 'unapproved',
791
+ 'closed',
792
+ 'spam',
793
+ 'unspam',
794
+ 'trash',
795
+ 'untrash',
796
+ 'delete',
797
+ 'view'
798
+ ) );
799
  }
800
 
801
  /**
851
  public function column_headers( $columns ) {
852
  $columns = array(
853
  'cb' => '<input type="checkbox" />',
854
+ 'title' => esc_html__( 'Topics', 'bbpress' ),
855
+ 'bbp_topic_forum' => esc_html__( 'Forum', 'bbpress' ),
856
+ 'bbp_topic_reply_count' => esc_html__( 'Replies', 'bbpress' ),
857
+ 'bbp_topic_voice_count' => esc_html__( 'Voices', 'bbpress' ),
858
+ 'bbp_topic_author' => esc_html__( 'Author', 'bbpress' ),
859
+ 'bbp_topic_created' => esc_html__( 'Created', 'bbpress' ),
860
+ 'bbp_topic_freshness' => esc_html__( 'Last Post', 'bbpress' )
861
  );
862
 
863
  // Filter & return
952
  *
953
  * @since 2.0.0 bbPress (r2485)
954
  *
955
+ * @param array $actions Actions
956
+ * @param object $topic Topic object
957
+ *
958
  * @return array $actions Actions
959
  */
960
+ public function row_actions( $actions = array(), $topic = false ) {
961
 
962
+ // Disable quick edit (too much to do here)
963
  unset( $actions['inline hide-if-no-js'] );
964
 
965
  // View link
981
  // Pending
982
  // Show the 'approve' and 'view' link on pending posts only and 'unapprove' on published posts only
983
  $approve_uri = wp_nonce_url( add_query_arg( array( 'topic_id' => $topic->ID, 'action' => 'bbp_toggle_topic_approve' ), remove_query_arg( array( 'bbp_topic_toggle_notice', 'topic_id', 'failed', 'super' ) ) ), 'approve-topic_' . $topic->ID );
984
+ if ( bbp_is_topic_public( $topic->ID ) ) {
985
  $actions['unapproved'] = '<a href="' . esc_url( $approve_uri ) . '" title="' . esc_attr__( 'Unapprove this topic', 'bbpress' ) . '">' . _x( 'Unapprove', 'Unapprove Topic', 'bbpress' ) . '</a>';
986
+ } else {
987
+
988
+ // Do not show 'approve' if already public
989
+ if ( ! bbp_is_topic_public( $topic->ID ) ) {
990
+ $actions['approved'] = '<a href="' . esc_url( $approve_uri ) . '" title="' . esc_attr__( 'Approve this topic', 'bbpress' ) . '">' . _x( 'Approve', 'Approve Topic', 'bbpress' ) . '</a>';
991
+ }
992
+
993
+ // Modify the view link
994
+ $actions['view'] = '<a href="' . esc_url( $view_link ) . '" title="' . esc_attr( sprintf( __( 'View &#8220;%s&#8221;', 'bbpress' ), bbp_get_topic_title( $topic->ID ) ) ) . '" rel="permalink">' . esc_html__( 'View', 'bbpress' ) . '</a>';
995
  }
996
 
997
  // Close
1006
  }
1007
 
1008
  // Sticky
1009
+ // Dont show sticky if topic is spam, trash or pending
1010
  if ( ! bbp_is_topic_spam( $topic->ID ) && ! bbp_is_topic_trash( $topic->ID ) && ! bbp_is_topic_pending( $topic->ID ) ) {
1011
  $stick_uri = wp_nonce_url( add_query_arg( array( 'topic_id' => $topic->ID, 'action' => 'bbp_toggle_topic_stick' ), remove_query_arg( array( 'bbp_topic_toggle_notice', 'topic_id', 'failed', 'super' ) ) ), 'stick-topic_' . $topic->ID );
1012
  if ( bbp_is_topic_sticky( $topic->ID ) ) {
1019
 
1020
  // Spam
1021
  $spam_uri = wp_nonce_url( add_query_arg( array( 'topic_id' => $topic->ID, 'action' => 'bbp_toggle_topic_spam' ), remove_query_arg( array( 'bbp_topic_toggle_notice', 'topic_id', 'failed', 'super' ) ) ), 'spam-topic_' . $topic->ID );
1022
+ if ( ! bbp_is_topic_spam( $topic->ID ) ) {
 
 
1023
  $actions['spam'] = '<a href="' . esc_url( $spam_uri ) . '" title="' . esc_attr__( 'Mark this topic as spam', 'bbpress' ) . '">' . esc_html__( 'Spam', 'bbpress' ) . '</a>';
1024
+ } else {
1025
+ $actions['unspam'] = '<a href="' . esc_url( $spam_uri ) . '" title="' . esc_attr__( 'Mark the topic as not spam', 'bbpress' ) . '">' . esc_html__( 'Not Spam', 'bbpress' ) . '</a>';
1026
  }
1027
  }
1028
 
1039
 
1040
  if ( ( bbp_get_trash_status_id() === $topic->post_status ) || empty( $trash_days ) ) {
1041
  $actions['delete'] = "<a class='submitdelete' title='" . esc_attr__( 'Delete this item permanently', 'bbpress' ) . "' href='" . esc_url( get_delete_post_link( $topic->ID, '', true ) ) . "'>" . esc_html__( 'Delete Permanently', 'bbpress' ) . "</a>";
 
 
1042
  }
1043
  }
1044
 
1045
+ // Sort & return
1046
+ return $this->sort_row_actions( $actions );
1047
+ }
1048
+
1049
+ /**
1050
+ * Sort row actions by key
1051
+ *
1052
+ * @since 2.6.0
1053
+ *
1054
+ * @param array $actions
1055
+ *
1056
+ * @return array
1057
+ */
1058
+ private function sort_row_actions( $actions = array() ) {
1059
+
1060
+ // Return value
1061
+ $retval = array();
1062
+
1063
+ // Known row actions, in sort order
1064
+ $known_actions = $this->get_row_action_sort_order();
1065
+
1066
+ // Sort known actions, and keep any unknown ones
1067
+ foreach ( $known_actions as $key ) {
1068
+ if ( isset( $actions[ $key ] ) ) {
1069
+ $retval[ $key ] = $actions[ $key ];
1070
+ unset( $actions[ $key ] );
1071
+ }
1072
+ }
1073
+
1074
+ // Combine & return
1075
+ return $retval + $actions;
1076
  }
1077
 
1078
  /**
1084
  */
1085
  public function filter_dropdown() {
1086
 
 
 
 
 
 
 
 
 
 
 
 
1087
  // Get which forum is selected
1088
  $selected = ! empty( $_GET['bbp_forum_id'] )
1089
  ? (int) $_GET['bbp_forum_id']
1096
  ) );
1097
  }
1098
 
1099
+ /**
1100
+ * Add "Empty Spam" button for moderators
1101
+ *
1102
+ * @since 2.6.0 bbPress (r6791)
1103
+ */
1104
+ public function filter_empty_spam() {
1105
+
1106
+ // Bail if not viewing spam
1107
+ if ( empty( $_GET['post_status'] ) || ( bbp_get_spam_status_id() !== $_GET['post_status'] ) && current_user_can( 'moderate' ) ) {
1108
+ return;
1109
+ }
1110
+
1111
+ ?>
1112
+
1113
+ <div class="alignleft actions"><?php
1114
+
1115
+ // Output the nonce & button
1116
+ wp_nonce_field( 'bulk-destroy', '_destroy_nonce' );
1117
+ submit_button(
1118
+ esc_attr__( 'Empty Spam', 'bbpress' ),
1119
+ 'button-secondary apply',
1120
+ 'delete_all',
1121
+ false
1122
+ );
1123
+
1124
+ ?></div><?php
1125
+ }
1126
+
1127
  /**
1128
  * Adjust the request query and include the forum id
1129
  *
1172
  // Updated
1173
  1 => sprintf(
1174
  '%1$s <a href="%2$s">%3$s</a>',
1175
+ esc_html__( 'Topic updated.', 'bbpress' ),
1176
  $topic_url,
1177
+ esc_html__( 'View topic', 'bbpress' )
1178
  ),
1179
 
1180
  // Custom field updated
1181
+ 2 => esc_html__( 'Custom field updated.', 'bbpress' ),
1182
 
1183
  // Custom field deleted
1184
+ 3 => esc_html__( 'Custom field deleted.', 'bbpress' ),
1185
 
1186
  // Topic updated
1187
+ 4 => esc_html__( 'Topic updated.', 'bbpress' ),
1188
 
1189
  // Restored from revision
1190
  // translators: %s: date and time of the revision
1191
  5 => isset( $_GET['revision'] )
1192
+ ? sprintf( esc_html__( 'Topic restored to revision from %s', 'bbpress' ), wp_post_revision_title( (int) $_GET['revision'], false ) )
1193
  : false,
1194
 
1195
  // Topic created
1196
  6 => sprintf(
1197
  '%1$s <a href="%2$s">%3$s</a>',
1198
+ esc_html__( 'Topic created.', 'bbpress' ),
1199
  $topic_url,
1200
+ esc_html__( 'View topic', 'bbpress' )
1201
  ),
1202
 
1203
  // Topic saved
1204
+ 7 => esc_html__( 'Topic saved.', 'bbpress' ),
1205
 
1206
  // Topic submitted
1207
  8 => sprintf(
1208
  '%1$s <a href="%2$s" target="_blank">%3$s</a>',
1209
+ esc_html__( 'Topic submitted.', 'bbpress' ),
1210
  esc_url( add_query_arg( 'preview', 'true', $topic_url ) ),
1211
+ esc_html__( 'Preview topic', 'bbpress' )
1212
  ),
1213
 
1214
  // Topic scheduled
1215
  9 => sprintf(
1216
  '%1$s <a target="_blank" href="%2$s">%3$s</a>',
1217
  sprintf(
1218
+ esc_html__( 'Topic scheduled for: %s.', 'bbpress' ),
1219
  // translators: Publish box date format, see http://php.net/date
1220
  '<strong>' . date_i18n( __( 'M j, Y @ G:i', 'bbpress' ), strtotime( $post_date ) ) . '</strong>'
1221
  ),
1222
  $topic_url,
1223
+ esc_html__( 'Preview topic', 'bbpress' )
1224
  ),
1225
 
1226
  // Topic draft updated
1227
  10 => sprintf(
1228
  '%1$s <a href="%2$s" target="_blank">%3$s</a>',
1229
+ esc_html__( 'Topic draft updated.', 'bbpress' ),
1230
  esc_url( add_query_arg( 'preview', 'true', $topic_url ) ),
1231
+ esc_html__( 'Preview topic', 'bbpress' )
1232
  ),
1233
  );
1234
 
1255
  }
1256
 
1257
  // Init the topics admin
1258
+ bbp_admin()->topics = new BBP_Topics_Admin();
1259
  }
includes/admin/users.php CHANGED
@@ -167,7 +167,7 @@ class BBP_Users_Admin {
167
  <?php foreach ( $dynamic_roles as $role => $details ) : ?>
168
  <option value="<?php echo esc_attr( $role ); ?>"><?php echo bbp_translate_user_role( $details['name'] ); ?></option>
169
  <?php endforeach; ?>
170
- </select><?php submit_button( __( 'Change', 'bbpress' ), 'secondary', $button_id, false );
171
 
172
  wp_nonce_field( 'bbp-bulk-users', 'bbp-bulk-users-nonce' );
173
  }
@@ -273,10 +273,22 @@ class BBP_Users_Admin {
273
  * @return array $columns
274
  */
275
  public static function user_role_column( $columns = array() ) {
276
- $columns['role'] = __( 'Site Role', 'bbpress' );
277
- $columns['bbp_user_role'] = __( 'Forum Role', 'bbpress' );
278
 
279
- return $columns;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
280
  }
281
 
282
  /**
167
  <?php foreach ( $dynamic_roles as $role => $details ) : ?>
168
  <option value="<?php echo esc_attr( $role ); ?>"><?php echo bbp_translate_user_role( $details['name'] ); ?></option>
169
  <?php endforeach; ?>
170
+ </select><?php submit_button( esc_html__( 'Change', 'bbpress' ), 'secondary', $button_id, false );
171
 
172
  wp_nonce_field( 'bbp-bulk-users', 'bbp-bulk-users-nonce' );
173
  }
273
  * @return array $columns
274
  */
275
  public static function user_role_column( $columns = array() ) {
 
 
276
 
277
+ // New title for old Role column
278
+ $columns['role'] = esc_html__( 'Site Role', 'bbpress' );
279
+
280
+ // New column
281
+ $bbp_user_role = array(
282
+ 'bbp_user_role' => esc_html__( 'Forum Role', 'bbpress' )
283
+ );
284
+
285
+ // Make sure role columns are next to each other
286
+ $role_pos = array_search( 'role', array_keys( $columns ), true );
287
+ $result = array_slice( $columns, 0, $role_pos + 1 );
288
+ $result = array_merge( $result, $bbp_user_role );
289
+
290
+ // Merge and return
291
+ return array_merge( $result, array_slice( $columns, $role_pos ) );
292
  }
293
 
294
  /**
includes/common/ajax.php CHANGED
@@ -32,7 +32,9 @@ function bbp_ajax_url() {
32
  function bbp_get_ajax_url() {
33
  global $wp;
34
 
35
- $base_url = home_url( trailingslashit( $wp->request ), ( is_ssl() ? 'https' : 'http' ) );
 
 
36
  $ajaxurl = add_query_arg( array( 'bbp-ajax' => 'true' ), $base_url );
37
 
38
  // Filter & return
@@ -54,13 +56,18 @@ function bbp_is_ajax() {
54
  * Hooked to the 'bbp_template_redirect' action, this is also the custom
55
  * theme-side AJAX handler.
56
  *
 
 
 
57
  * @since 2.3.0 bbPress (r4543)
58
  *
 
 
59
  * @return If not a bbPress AJAX request
60
  */
61
- function bbp_do_ajax() {
62
 
63
- // Bail if not an AJAX request
64
  if ( ! bbp_is_ajax() ) {
65
  return;
66
  }
@@ -68,24 +75,55 @@ function bbp_do_ajax() {
68
  // Set WordPress core AJAX constant
69
  define( 'DOING_AJAX', true );
70
 
71
- // Set the header content type
72
- @header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) );
73
 
74
- // Disable content sniffing in browsers that support it
75
- send_nosniff_header();
 
 
 
 
 
 
 
 
 
 
76
 
77
  // Everything is 200 OK.
78
  bbp_set_200();
79
 
80
- // Perform custom bbPress ajax
81
- do_action( 'bbp_ajax_' . sanitize_key( $_REQUEST['action'] ) );
82
 
83
  // All done
84
  wp_die( '0' );
85
  }
86
 
87
  /**
88
- * Helper method to return JSON response for the AJAX calls
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  *
90
  * @since 2.3.0 bbPress (r4542)
91
  *
32
  function bbp_get_ajax_url() {
33
  global $wp;
34
 
35
+ $ssl = bbp_get_url_scheme();
36
+ $url = trailingslashit( $wp->request );
37
+ $base_url = home_url( $url, $ssl );
38
  $ajaxurl = add_query_arg( array( 'bbp-ajax' => 'true' ), $base_url );
39
 
40
  // Filter & return
56
  * Hooked to the 'bbp_template_redirect' action, this is also the custom
57
  * theme-side AJAX handler.
58
  *
59
+ * This is largely taken from admin-ajax.php, but adapted specifically for
60
+ * theme-side bbPress-only AJAX requests.
61
+ *
62
  * @since 2.3.0 bbPress (r4543)
63
  *
64
+ * @param string $action Sanitized action from bbp_post_request/bbp_get_request
65
+ *
66
  * @return If not a bbPress AJAX request
67
  */
68
+ function bbp_do_ajax( $action = '' ) {
69
 
70
+ // Bail if not a bbPress specific AJAX request
71
  if ( ! bbp_is_ajax() ) {
72
  return;
73
  }
75
  // Set WordPress core AJAX constant
76
  define( 'DOING_AJAX', true );
77
 
78
+ // Setup AJAX headers
79
+ bbp_ajax_headers();
80
 
81
+ // Compat for targeted action hooks (without $action param)
82
+ $action = empty( $action )
83
+ ? sanitize_key( $_REQUEST['action'] ) // isset checked by bbp_is_ajax()
84
+ : $action;
85
+
86
+ // Setup action key
87
+ $key = "bbp_ajax_{$action}";
88
+
89
+ // Bail if no action is registered
90
+ if ( empty( $action ) || ! has_action( $key ) ) {
91
+ wp_die( '0', 400 );
92
+ }
93
 
94
  // Everything is 200 OK.
95
  bbp_set_200();
96
 
97
+ // Execute custom bbPress AJAX action
98
+ do_action( $key );
99
 
100
  // All done
101
  wp_die( '0' );
102
  }
103
 
104
  /**
105
+ * Send headers for AJAX specific requests
106
+ *
107
+ * This was abstracted from bbp_do_ajax() for use in custom theme-side AJAX
108
+ * implementations.
109
+ *
110
+ * @since 2.6.0 bbPress (r6757)
111
+ */
112
+ function bbp_ajax_headers() {
113
+
114
+ // Set the header content type
115
+ @header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) );
116
+ @header( 'X-Robots-Tag: noindex' );
117
+
118
+ // Disable content sniffing in browsers that support it
119
+ send_nosniff_header();
120
+
121
+ // Disable browser caching for all AJAX requests
122
+ nocache_headers();
123
+ }
124
+
125
+ /**
126
+ * Helper method to return JSON response for bbPress AJAX calls
127
  *
128
  * @since 2.3.0 bbPress (r4542)
129
  *
includes/common/engagements.php ADDED
@@ -0,0 +1,783 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * bbPress Common Engagements
5
+ *
6
+ * This file contains the common classes and functions for interacting with the
7
+ * bbPress engagements API. See `includes/users/engagements.php` for more.
8
+ *
9
+ * @package bbPress
10
+ * @subpackage Common
11
+ */
12
+
13
+ // Exit if accessed directly
14
+ defined( 'ABSPATH' ) || exit;
15
+
16
+ /**
17
+ * Return the strategy used for storing user engagements
18
+ *
19
+ * @since 2.6.0 bbPress (r6722)
20
+ *
21
+ * @param string $rel_key The key used to index this relationship
22
+ * @param string $rel_type The type of meta to look in
23
+ *
24
+ * @return string
25
+ */
26
+ function bbp_user_engagements_interface( $rel_key = '', $rel_type = 'post' ) {
27
+ return apply_filters( 'bbp_user_engagements_interface', bbpress()->engagements, $rel_key, $rel_type );
28
+ }
29
+
30
+ /**
31
+ * Meta strategy for interfacing with User Engagements
32
+ *
33
+ * @since 2.6.0 bbPress (r6722)
34
+ */
35
+ class BBP_User_Engagements_Base {
36
+
37
+ /**
38
+ * Type of strategy being used.
39
+ *
40
+ * @since 2.6.0 bbPress (r6737)
41
+ *
42
+ * @var string
43
+ */
44
+ public $type = '';
45
+
46
+ /**
47
+ * Add a user id to an object
48
+ *
49
+ * @since 2.6.0 bbPress (r6722)
50
+ *
51
+ * @param int $object_id The object id
52
+ * @param int $user_id The user id
53
+ * @param string $meta_key The relationship key
54
+ * @param string $meta_type The relationship type (usually 'post')
55
+ * @param bool $unique Whether meta key should be unique to the object
56
+ *
57
+ * @return bool Returns true on success, false on failure
58
+ */
59
+ public function add_user_to_object( $object_id = 0, $user_id = 0, $meta_key = '', $meta_type = 'post', $unique = false ) {
60
+
61
+ }
62
+
63
+ /**
64
+ * Remove a user id from an object
65
+ *
66
+ * @since 2.6.0 bbPress (r6722)
67
+ *
68
+ * @param int $object_id The object id
69
+ * @param int $user_id The user id
70
+ * @param string $meta_key The relationship key
71
+ * @param string $meta_type The relationship type (usually 'post')
72
+ *
73
+ * @return bool Returns true on success, false on failure
74
+ */
75
+ public function remove_user_from_object( $object_id = 0, $user_id = 0, $meta_key = '', $meta_type = 'post' ) {
76
+
77
+ }
78
+
79
+ /**
80
+ * Remove a user id from all objects
81
+ *
82
+ * @since 2.6.0 bbPress (r6722)
83
+ *
84
+ * @param int $user_id The user id
85
+ * @param string $meta_key The relationship key
86
+ * @param string $meta_type The relationship type (usually 'post')
87
+ *
88
+ * @return bool Returns true on success, false on failure
89
+ */
90
+ public function remove_user_from_all_objects( $user_id = 0, $meta_key = '', $meta_type = 'post' ) {
91
+
92
+ }
93
+
94
+ /**
95
+ * Remove an object from all users
96
+ *
97
+ * @since 2.6.0 bbPress (r6722)
98
+ *
99
+ * @param int $object_id The object id
100
+ * @param int $user_id The user id
101
+ * @param string $meta_key The relationship key
102
+ * @param string $meta_type The relationship type (usually 'post')
103
+ *
104
+ * @return bool Returns true on success, false on failure
105
+ */
106
+ public function remove_object_from_all_users( $object_id = 0, $meta_key = '', $meta_type = 'post' ) {
107
+
108
+ }
109
+
110
+ /**
111
+ * Remove all users from all objects
112
+ *
113
+ * @since 2.6.0 bbPress (r6722)
114
+ *
115
+ * @param string $meta_key The relationship key
116
+ * @param string $meta_type The relationship type (usually 'post')
117
+ *
118
+ * @return bool Returns true on success, false on failure
119
+ */
120
+ public function remove_all_users_from_all_objects( $meta_key = '', $meta_type = 'post' ) {
121
+
122
+ }
123
+
124
+ /**
125
+ * Get users of an object
126
+ *
127
+ * @since 2.6.0 bbPress (r6722)
128
+ *
129
+ * @param int $object_id The object id
130
+ * @param string $meta_key The key used to index this relationship
131
+ * @param string $meta_type The type of meta to look in
132
+ *
133
+ * @return array Returns ids of users
134
+ */
135
+ public function get_users_for_object( $object_id = 0, $meta_key = '', $meta_type = 'post' ) {
136
+
137
+ }
138
+
139
+ /**
140
+ * Get the part of the query responsible for JOINing objects to relationships.
141
+ *
142
+ * @since 2.6.0 bbPress (r6737)
143
+ *
144
+ * @param array $args
145
+ * @param string $meta_key
146
+ * @param string $meta_type
147
+ *
148
+ * @return array
149
+ */
150
+ public function get_query( $args = array(), $context_key = '', $meta_key = '', $meta_type = 'post' ) {
151
+
152
+ }
153
+ }
154
+
155
+ /**
156
+ * Meta strategy for interfacing with User Engagements
157
+ *
158
+ * @since 2.6.0 bbPress (r6722)
159
+ */
160
+ class BBP_User_Engagements_Meta extends BBP_User_Engagements_Base {
161
+
162
+ /**
163
+ * Type of strategy being used.
164
+ *
165
+ * @since 2.6.0 bbPress (r6737)
166
+ *
167
+ * @var string
168
+ */
169
+ public $type = 'meta';
170
+
171
+ /**
172
+ * Add a user id to an object
173
+ *
174
+ * @since 2.6.0 bbPress (r6722)
175
+ *
176
+ * @param int $object_id The object id
177
+ * @param int $user_id The user id
178
+ * @param string $meta_key The relationship key
179
+ * @param string $meta_type The relationship type (usually 'post')
180
+ * @param bool $unique Whether meta key should be unique to the object
181
+ *
182
+ * @return bool Returns true on success, false on failure
183
+ */
184
+ public function add_user_to_object( $object_id = 0, $user_id = 0, $meta_key = '', $meta_type = 'post', $unique = false ) {
185
+ return add_metadata( $meta_type, $object_id, $meta_key, $user_id, $unique );
186
+ }
187
+
188
+ /**
189
+ * Remove a user id from an object
190
+ *
191
+ * @since 2.6.0 bbPress (r6722)
192
+ *
193
+ * @param int $object_id The object id
194
+ * @param int $user_id The user id
195
+ * @param string $meta_key The relationship key
196
+ * @param string $meta_type The relationship type (usually 'post')
197
+ *
198
+ * @return bool Returns true on success, false on failure
199
+ */
200
+ public function remove_user_from_object( $object_id = 0, $user_id = 0, $meta_key = '', $meta_type = 'post' ) {
201
+ return delete_metadata( $meta_type, $object_id, $meta_key, $user_id, false );
202
+ }
203
+
204
+ /**
205
+ * Remove a user id from all objects
206
+ *
207
+ * @since 2.6.0 bbPress (r6722)
208
+ *
209
+ * @param int $user_id The user id
210
+ * @param string $meta_key The relationship key
211
+ * @param string $meta_type The relationship type (usually 'post')
212
+ *
213
+ * @return bool Returns true on success, false on failure
214
+ */
215
+ public function remove_user_from_all_objects( $user_id = 0, $meta_key = '', $meta_type = 'post' ) {
216
+ return delete_metadata( $meta_type, null, $meta_key, $user_id, true );
217
+ }
218
+
219
+ /**
220
+ * Remove an object from all users
221
+ *
222
+ * @since 2.6.0 bbPress (r6722)
223
+ *
224
+ * @param int $object_id The object id
225
+ * @param int $user_id The user id
226
+ * @param string $meta_key The relationship key
227
+ * @param string $meta_type The relationship type (usually 'post')
228
+ *
229
+ * @return bool Returns true on success, false on failure
230
+ */
231
+ public function remove_object_from_all_users( $object_id = 0, $meta_key = '', $meta_type = 'post' ) {
232
+ return delete_metadata( $meta_type, $object_id, $meta_key, null, false );
233
+ }
234
+
235
+ /**
236
+ * Remove all users from all objects
237
+ *
238
+ * @since 2.6.0 bbPress (r6722)
239
+ *
240
+ * @param string $meta_key The relationship key
241
+ * @param string $meta_type The relationship type (usually 'post')
242
+ *
243
+ * @return bool Returns true on success, false on failure
244
+ */
245
+ public function remove_all_users_from_all_objects( $meta_key = '', $meta_type = 'post' ) {
246
+ return delete_metadata( $meta_type, null, $meta_key, null, true );
247
+ }
248
+
249
+ /**
250
+ * Get users of an object
251
+ *
252
+ * @since 2.6.0 bbPress (r6722)
253
+ *
254
+ * @param int $object_id The object id
255
+ * @param string $meta_key The key used to index this relationship
256
+ * @param string $meta_type The type of meta to look in
257
+ *
258
+ * @return array Returns ids of users
259
+ */
260
+ public function get_users_for_object( $object_id = 0, $meta_key = '', $meta_type = 'post' ) {
261
+ return wp_parse_id_list( get_metadata( $meta_type, $object_id, $meta_key, false ) );
262
+ }
263
+
264
+ /**
265
+ * Get the part of the query responsible for JOINing objects to relationships.
266
+ *
267
+ * @since 2.6.0 bbPress (r6737)
268
+ *
269
+ * @param array $args
270
+ * @param string $meta_key
271
+ * @param string $meta_type
272
+ *
273
+ * @return array
274
+ */
275
+ public function get_query( $args = array(), $context_key = '', $meta_key = '', $meta_type = 'post' ) {
276
+
277
+ // Backwards compat for pre-2.6.0
278
+ if ( is_numeric( $args ) ) {
279
+ $args = array(
280
+ 'meta_query' => array( array(
281
+ 'key' => $meta_key,
282
+ 'value' => bbp_get_user_id( $args, false, false ),
283
+ 'compare' => 'NUMERIC'
284
+ ) )
285
+ );
286
+ }
287
+
288
+ // Default arguments
289
+ $defaults = array(
290
+ 'meta_query' => array( array(
291
+ 'key' => $meta_key,
292
+ 'value' => bbp_get_displayed_user_id(),
293
+ 'compare' => 'NUMERIC'
294
+ ) )
295
+ );
296
+
297
+ // Parse arguments
298
+ return bbp_parse_args( $args, $defaults, $context_key );
299
+ }
300
+ }
301
+
302
+ /**
303
+ * Term strategy for interfacing with User Engagements
304
+ *
305
+ * @since 2.6.0 bbPress (r6737)
306
+ */
307
+ class BBP_User_Engagements_Term extends BBP_User_Engagements_Base {
308
+
309
+ /**
310
+ * Type of strategy being used.
311
+ *
312
+ * @since 2.6.0 bbPress (r6737)
313
+ *
314
+ * @var string
315
+ */
316
+ public $type = 'term';
317
+
318
+ /**
319
+ * Register an engagement taxonomy just-in-time for immediate use
320
+ *
321
+ * @since 2.6.0 bbPress (r6737)
322
+ *
323
+ * @param string $tax_key
324
+ * @param string $object_type
325
+ */
326
+ private function jit_taxonomy( $tax_key = '', $object_type = 'user' ) {
327
+
328
+ // Bail if taxonomy already exists
329
+ if ( taxonomy_exists( $tax_key ) ) {
330
+ return;
331
+ }
332
+
333
+ // Register the taxonomy
334
+ register_taxonomy( $tax_key, 'bbp_' . $object_type, array(
335
+ 'labels' => array(),
336
+ 'description' => '',
337
+ 'public' => false,
338
+ 'publicly_queryable' => false,
339
+ 'hierarchical' => false,
340
+ 'show_ui' => false,
341
+ 'show_in_menu' => false,
342
+ 'show_in_nav_menus' => false,
343
+ 'show_tagcloud' => false,
344
+ 'show_in_quick_edit' => false,
345
+ 'show_admin_column' => false,
346
+ 'meta_box_cb' => false,
347
+ 'capabilities' => array(),
348
+ 'rewrite' => false,
349
+ 'query_var' => '',
350
+ 'update_count_callback' => '',
351
+ 'show_in_rest' => false,
352
+ 'rest_base' => false,
353
+ 'rest_controller_class' => false,
354
+ '_builtin' => false
355
+ ) );
356
+ }
357
+
358
+ /**
359
+ * Add a user id to an object
360
+ *
361
+ * @since 2.6.0 bbPress (r6737)
362
+ *
363
+ * @param int $object_id The object id
364
+ * @param int $user_id The user id
365
+ * @param string $meta_key The relationship key
366
+ * @param string $meta_type The relationship type (usually 'post')
367
+ * @param bool $unique Whether meta key should be unique to the object
368
+ *
369
+ * @return bool Returns true on success, false on failure
370
+ */
371
+ public function add_user_to_object( $object_id = 0, $user_id = 0, $meta_key = '', $meta_type = 'post', $unique = false ) {
372
+ $user_key = "{$meta_key}_user_id_{$user_id}";
373
+ $tax_key = "{$meta_key}_{$meta_type}";
374
+ $this->jit_taxonomy( $tax_key );
375
+
376
+ return wp_add_object_terms( $object_id, $user_key, $tax_key );
377
+ }
378
+
379
+ /**
380
+ * Remove a user id from an object
381
+ *
382
+ * @since 2.6.0 bbPress (r6737)
383
+ *
384
+ * @param int $object_id The object id
385
+ * @param int $user_id The user id
386
+ * @param string $meta_key The relationship key
387
+ * @param string $meta_type The relationship type (usually 'post')
388
+ *
389
+ * @return bool Returns true on success, false on failure
390
+ */
391
+ public function remove_user_from_object( $object_id = 0, $user_id = 0, $meta_key = '', $meta_type = 'post' ) {
392
+ $user_key = "{$meta_key}_user_id_{$user_id}";
393
+ $tax_key = "{$meta_key}_{$meta_type}";
394
+ $this->jit_taxonomy( $tax_key );
395
+
396
+ return wp_remove_object_terms( $object_id, $user_key, $tax_key );
397
+ }
398
+
399
+ /**
400
+ * Remove a user id from all objects
401
+ *
402
+ * @since 2.6.0 bbPress (r6737)
403
+ *
404
+ * @param int $user_id The user id
405
+ * @param string $meta_key The relationship key
406
+ * @param string $meta_type The relationship type (usually 'post')
407
+ *
408
+ * @return bool Returns true on success, false on failure
409
+ */
410
+ public function remove_user_from_all_objects( $user_id = 0, $meta_key = '', $meta_type = 'post' ) {
411
+ $user_key = "{$meta_key}_user_id_{$user_id}";
412
+ $tax_key = "{$meta_key}_{$meta_type}";
413
+ $this->jit_taxonomy( $tax_key );
414
+ $term = get_term_by( 'slug', $user_key, $tax_key );
415
+
416
+ return wp_delete_term( $term->term_id, $tax_key );
417
+ }
418
+
419
+ /**
420
+ * Remove an object from all users
421
+ *
422
+ * @since 2.6.0 bbPress (r6737)
423
+ *
424
+ * @param int $object_id The object id
425
+ * @param int $user_id The user id
426
+ * @param string $meta_key The relationship key
427
+ * @param string $meta_type The relationship type (usually 'post')
428
+ *
429
+ * @return bool Returns true on success, false on failure
430
+ */
431
+ public function remove_object_from_all_users( $object_id = 0, $meta_key = '', $meta_type = 'post' ) {
432
+ return wp_delete_object_term_relationships( $object_id, get_object_taxonomies( 'bbp_user' ) );
433
+ }
434
+
435
+ /**
436
+ * Remove all users from all objects
437
+ *
438
+ * @since 2.6.0 bbPress (r6737)
439
+ *
440
+ * @param string $meta_key The relationship key
441
+ * @param string $meta_type The relationship type (usually 'post')
442
+ *
443
+ * @return bool Returns true on success, false on failure
444
+ */
445
+ public function remove_all_users_from_all_objects( $meta_key = '', $meta_type = 'post' ) {
446
+ // TODO
447
+ }
448
+
449
+ /**
450
+ * Get users of an object
451
+ *
452
+ * @since 2.6.0 bbPress (r6737)
453
+ *
454
+ * @param int $object_id The object id
455
+ * @param string $meta_key The key used to index this relationship
456
+ * @param string $meta_type The type of meta to look in
457
+ *
458
+ * @return array Returns ids of users
459
+ */
460
+ public function get_users_for_object( $object_id = 0, $meta_key = '', $meta_type = 'post' ) {
461
+ $user_key = "{$meta_key}_user_id_";
462
+ $tax_key = "{$meta_key}_{$meta_type}";
463
+ $this->jit_taxonomy( $tax_key );
464
+
465
+ // Get terms
466
+ $terms = get_terms( array(
467
+ 'object_ids' => $object_id,
468
+ 'taxonomy' => $tax_key
469
+ ) );
470
+
471
+ // Slug part to replace
472
+ $user_ids = array();
473
+
474
+ // Loop through terms and get the user ID
475
+ foreach ( $terms as $term ) {
476
+ $user_ids[] = str_replace( $user_key, '', $term->slug );
477
+ }
478
+
479
+ // Parse & return
480
+ return wp_parse_id_list( $user_ids );
481
+ }
482
+
483
+ /**
484
+ * Get the part of the query responsible for JOINing objects to relationships.
485
+ *
486
+ * @since 2.6.0 bbPress (r6737)
487
+ *
488
+ * @param array $args
489
+ * @param string $meta_key
490
+ * @param string $meta_type
491
+ *
492
+ * @return array
493
+ */
494
+ public function get_query( $args = array(), $context_key = '', $meta_key = '', $meta_type = 'post' ) {
495
+ $tax_key = "{$meta_key}_{$meta_type}";
496
+ $user_key = "{$meta_key}_user_id_";
497
+
498
+ // Make sure the taxonomy is registered
499
+ $this->jit_taxonomy( $tax_key );
500
+
501
+ // Backwards compat for pre-2.6.0
502
+ if ( is_numeric( $args ) ) {
503
+ $args = array(
504
+ 'tax_query' => array( array(
505
+ 'taxonomy' => $tax_key,
506
+ 'terms' => $user_key . bbp_get_user_id( $args, false, false ),
507
+ 'field' => 'slug'
508
+ ) )
509
+ );
510
+ }
511
+
512
+ // Default arguments
513
+ $defaults = array(
514
+ 'tax_query' => array( array(
515
+ 'taxonomy' => $tax_key,
516
+ 'terms' => $user_key . bbp_get_displayed_user_id(),
517
+ 'field' => 'slug'
518
+ ) )
519
+ );
520
+
521
+ // Parse arguments
522
+ return bbp_parse_args( $args, $defaults, $context_key );
523
+ }
524
+ }
525
+
526
+ /**
527
+ * Backwards compatibility strategy for interfacing with User Engagements
528
+ *
529
+ * @since 2.6.0 bbPress (r6844)
530
+ */
531
+ class BBP_User_Engagements_Back_Compat extends BBP_User_Engagements_Base {
532
+
533
+ /**
534
+ * Type of strategy being used.
535
+ *
536
+ * @since 2.6.0 bbPress (r6844)
537
+ *
538
+ * @var string
539
+ */
540
+ public $type = 'compat';
541
+
542
+ /**
543
+ * Private function to map 2.6 meta keys to 2.5 user-option keys.
544
+ *
545
+ * @since 2.6.0 bbPress (r6844)
546
+ *
547
+ * @param string $meta_key
548
+ *
549
+ * @return string
550
+ */
551
+ private function get_user_option_key( $meta_key = '', $object_id = 0 ) {
552
+ switch ( $meta_key ) {
553
+
554
+ // Favorites
555
+ case '_bbp_favorite' :
556
+ $key = '_bbp_favorites';
557
+ break;
558
+
559
+ // Subscriptions
560
+ case '_bbp_subscription' :
561
+
562
+ // Maybe guess at post type
563
+ $post_type = ! empty( $object_id )
564
+ ? get_post_type( $object_id )
565
+ : bbp_get_topic_post_type();
566
+
567
+ // Forums & Topics used different keys :/
568
+ $key = ( bbp_get_forum_post_type() === $post_type )
569
+ ? '_bbp_forum_subscriptions'
570
+ : '_bbp_subscriptions';
571
+
572
+ break;
573
+
574
+ // Unknown, so pluralize
575
+ default :
576
+ $key = "{$meta_key}s";
577
+ break;
578
+ }
579
+
580
+ // Return the old (pluralized) user option key
581
+ return $key;
582
+ }
583
+
584
+ /**
585
+ * Turn a comma-separated string into an array of integers
586
+ *
587
+ * @since 2.6.0 bbPress (r6844)
588
+ *
589
+ * @param string $results
590
+ * @return array
591
+ */
592
+ private function format_results( $results = '' ) {
593
+ return wp_parse_id_list( array_filter( $results ) );
594
+ }
595
+
596
+ /**
597
+ * Add a user id to an object
598
+ *
599
+ * @since 2.6.0 bbPress (r6844)
600
+ *
601
+ * @param int $object_id The object id
602
+ * @param int $user_id The user id
603
+ * @param string $meta_key The relationship key
604
+ * @param string $meta_type The relationship type (usually 'post')
605
+ * @param bool $unique Whether meta key should be unique to the object
606
+ *
607
+ * @return bool Returns true on success, false on failure
608
+ */
609
+ public function add_user_to_object( $object_id = 0, $user_id = 0, $meta_key = '', $meta_type = 'post', $unique = false ) {
610
+ $retval = false;
611
+ $option_key = $this->get_user_option_key( $meta_key, $object_id );
612
+ $object_ids = $this->format_results( get_user_option( $option_key, $user_id ) );
613
+
614
+ // Not already added, so add it
615
+ if ( ! in_array( $object_id, $object_ids, true ) ) {
616
+ $object_ids[] = $object_id;
617
+ $object_ids = implode( ',', $this->format_results( $object_ids ) );
618
+ $retval = update_user_option( $user_id, $option_key, $object_ids );
619
+ }
620
+
621
+ // Return true if added, or false if not
622
+ return $retval;
623
+ }
624
+
625
+ /**
626
+ * Remove a user id from an object
627
+ *
628
+ * @since 2.6.0 bbPress (r6844)
629
+ *
630
+ * @param int $object_id The object id
631
+ * @param int $user_id The user id
632
+ * @param string $meta_key The relationship key
633
+ * @param string $meta_type The relationship type (usually 'post')
634
+ *
635
+ * @return bool Returns true on success, false on failure
636
+ */
637
+ public function remove_user_from_object( $object_id = 0, $user_id = 0, $meta_key = '', $meta_type = 'post' ) {
638
+ $retval = false;
639
+ $option_key = $this->get_user_option_key( $meta_key, $object_id );
640
+ $object_ids = $this->format_results( get_user_option( $option_key, $user_id ) );
641
+
642
+ // Exists, so remove it
643
+ if ( in_array( $object_id, $object_ids, true ) ) {
644
+ unset( $object_ids[ $object_id ] );
645
+
646
+ $object_ids = implode( ',', $this->format_results( $object_ids ) );
647
+ $retval = update_user_option( $user_id, $option_key, $object_ids );
648
+ }
649
+
650
+ // Return true if removed, or false if not
651
+ return $retval;
652
+ }
653
+
654
+ /**
655
+ * Remove a user id from all objects
656
+ *
657
+ * @since 2.6.0 bbPress (r6844)
658
+ *
659
+ * @param int $user_id The user id
660
+ * @param string $meta_key The relationship key
661
+ * @param string $meta_type The relationship type (usually 'post')
662
+ *
663
+ * @return bool Returns true on success, false on failure
664
+ */
665
+ public function remove_user_from_all_objects( $user_id = 0, $meta_key = '', $meta_type = 'post' ) {
666
+ $option_key = $this->get_user_option_key( $meta_key );
667
+ return delete_user_option( $user_id, $option_key );
668
+ }
669
+
670
+ /**
671
+ * Remove an object from all users
672
+ *
673
+ * @since 2.6.0 bbPress (r6844)
674
+ *
675
+ * @param int $object_id The object id
676
+ * @param int $user_id The user id
677
+ * @param string $meta_key The relationship key
678
+ * @param string $meta_type The relationship type (usually 'post')
679
+ *
680
+ * @return bool Returns true on success, false on failure
681
+ */
682
+ public function remove_object_from_all_users( $object_id = 0, $meta_key = '', $meta_type = 'post' ) {
683
+
684
+ // Query for users
685
+ $user_ids = $this->get_users_for_object( $object_id, $meta_key, $meta_type );
686
+ $u_count = count( $user_ids );
687
+
688
+ // Count number of removals
689
+ $removed = array();
690
+ $r_count = 0;
691
+
692
+ // Users have engaged, so remove them
693
+ if ( ! empty( $u_count ) ) {
694
+
695
+ // Loop through users and remove them from the object
696
+ foreach ( $user_ids as $user_id ) {
697
+ $removed[] = $this->remove_user_from_object( $object_id, $user_id, $meta_key, $meta_type );
698
+ }
699
+
700
+ // Count the removed users
701
+ $r_count = count( $removed );
702
+ }
703
+
704
+ // Return true if successfully removed from all users
705
+ return ( $r_count === $u_count );
706
+ }
707
+
708
+ /**
709
+ * Remove all users from all objects
710
+ *
711
+ * @since 2.6.0 bbPress (r6844)
712
+ *
713
+ * @param string $meta_key The relationship key
714
+ * @param string $meta_type The relationship type (usually 'post')
715
+ *
716
+ * @return bool Returns true on success, false on failure
717
+ */
718
+ public function remove_all_users_from_all_objects( $meta_key = '', $meta_type = 'post' ) {
719
+
720
+ // Query for users
721
+ $option_key = $this->get_user_option_key( $meta_key );
722
+ $bbp_db = bbp_db();
723
+ $user_ids = $bbp_db->get_col( "SELECT user_id FROM {$bbp_db->usermeta} WHERE meta_key = '{$option_key}'" );
724
+ $u_count = count( $user_ids );
725
+
726
+ // Count number of removals
727
+ $removed = array();
728
+ $r_count = 0;
729
+
730
+ // Users have engaged, so remove them
731
+ if ( ! empty( $u_count ) ) {
732
+
733
+ // Loop through users and remove their user options
734
+ foreach ( $user_ids as $user_id ) {
735
+ $removed[] = delete_user_option( $user_id, $option_key );
736
+ }
737
+
738
+ // Count the removed users
739
+ $r_count = count( $removed );
740
+ }
741
+
742
+ // Return true if successfully removed from all users
743
+ return ( $r_count === $u_count );
744
+ }
745
+
746
+ /**
747
+ * Get users of an object
748
+ *
749
+ * The database queries in this function were cached in bbPress versions
750
+ * older than 2.6, but no longer are to avoid cache pollution.
751
+ *
752
+ * @since 2.6.0 bbPress (r6844)
753
+ *
754
+ * @param int $object_id The object id
755
+ * @param string $meta_key The key used to index this relationship
756
+ * @param string $meta_type The type of meta to look in
757
+ *
758
+ * @return array Returns ids of users
759
+ */
760
+ public function get_users_for_object( $object_id = 0, $meta_key = '', $meta_type = 'post' ) {
761
+ $option_key = $this->get_user_option_key( $meta_key, $object_id );
762
+ $bbp_db = bbp_db();
763
+ $user_ids = $bbp_db->get_col( "SELECT user_id FROM {$bbp_db->usermeta} WHERE meta_key = '{$option_key}' and FIND_IN_SET('{$object_id}', meta_value) > 0" );
764
+
765
+ return wp_parse_id_list( $user_ids );
766
+ }
767
+
768
+ /**
769
+ * Get the part of the query responsible for JOINing objects to relationships.
770
+ *
771
+ * @since 2.6.0 bbPress (r6844)
772
+ *
773
+ * @param array $args
774
+ * @param string $meta_key
775
+ * @param string $meta_type
776
+ *
777
+ * @return array
778
+ */
779
+ public function get_query( $args = array(), $context_key = '', $meta_key = '', $meta_type = 'post' ) {
780
+ // TODO
781
+ return array();
782
+ }
783
+ }
includes/common/formatting.php CHANGED
@@ -272,9 +272,10 @@ function bbp_encode_empty_callback( &$content = '', $key = '', $preg = '' ) {
272
  * @since 2.3.0 bbPress (r4641)
273
  *
274
  * @internal Used by bbp_encode_bad()
275
- * @param type $content
276
- * @param type $key
277
- * @param type $preg
 
278
  */
279
  function bbp_encode_normal_callback( &$content = '', $key = '', $preg = '') {
280
  if ( strpos( $content, '`' ) !== 0 ) {
@@ -728,7 +729,7 @@ function bbp_time_since( $older_date, $newer_date = false, $gmt = false ) {
728
  function bbp_format_revision_reason( $reason = '' ) {
729
  $reason = (string) $reason;
730
 
731
- // Format reason for proper display
732
  if ( empty( $reason ) ) {
733
  return $reason;
734
  }
@@ -746,4 +747,3 @@ function bbp_format_revision_reason( $reason = '' ) {
746
 
747
  return $reason;
748
  }
749
-
272
  * @since 2.3.0 bbPress (r4641)
273
  *
274
  * @internal Used by bbp_encode_bad()
275
+ *
276
+ * @param string $content
277
+ * @param string $key
278
+ * @param string $preg
279
  */
280
  function bbp_encode_normal_callback( &$content = '', $key = '', $preg = '') {
281
  if ( strpos( $content, '`' ) !== 0 ) {
729
  function bbp_format_revision_reason( $reason = '' ) {
730
  $reason = (string) $reason;
731
 
732
+ // Bail if reason is empty
733
  if ( empty( $reason ) ) {
734
  return $reason;
735
  }
747
 
748
  return $reason;
749
  }
 
includes/common/functions.php CHANGED
@@ -13,6 +13,17 @@
13
  // Exit if accessed directly
14
  defined( 'ABSPATH' ) || exit;
15
 
 
 
 
 
 
 
 
 
 
 
 
16
  /** URLs **********************************************************************/
17
 
18
  /**
@@ -75,13 +86,15 @@ function bbp_remove_view_all( $original_link = '' ) {
75
  *
76
  * @since 2.0.0 bbPress (r3325)
77
  *
 
 
78
  * @return bool Whether current user can and is viewing all
79
  */
80
  function bbp_get_view_all( $cap = 'moderate' ) {
81
  $retval = ( ( ! empty( $_GET['view'] ) && ( 'all' === $_GET['view'] ) && current_user_can( $cap ) ) );
82
 
83
  // Filter & return
84
- return apply_filters( 'bbp_get_view_all', (bool) $retval );
85
  }
86
 
87
  /**
@@ -179,32 +192,28 @@ function bbp_past_edit_lock( $post_date_gmt = '' ) {
179
  // Default value
180
  $retval = false;
181
 
 
 
 
 
 
 
 
 
 
 
 
 
182
  // Check if date and editing is allowed
183
  if ( ! empty( $post_date_gmt ) && bbp_allow_content_edit() ) {
184
 
185
- // Get number of minutes to allow editing for
186
- $minutes = (int) get_option( '_bbp_edit_lock', 5 );
187
-
188
  // "0" minutes set, so allow forever
189
  if ( 0 === $minutes ) {
190
  $retval = true;
191
 
192
  // Not "0" so compare
193
- } else {
194
-
195
- // Period of time
196
- $lockable = "+{$minutes} minutes";
197
-
198
- // Now
199
- $cur_time = current_time( 'timestamp', true );
200
-
201
- // Add lockable time to post time
202
- $lock_time = strtotime( $lockable, strtotime( $post_date_gmt ) );
203
-
204
- // Compare
205
- if ( $cur_time >= $lock_time ) {
206
- $retval = true;
207
- }
208
  }
209
  }
210
 
@@ -277,26 +286,38 @@ function bbp_get_statistics( $args = array() ) {
277
 
278
  // Parse arguments against default values
279
  $r = bbp_parse_args( $args, array(
 
 
280
  'count_users' => true,
 
 
281
  'count_forums' => true,
 
 
282
  'count_topics' => true,
283
  'count_pending_topics' => true,
284
  'count_private_topics' => true,
285
  'count_spammed_topics' => true,
286
  'count_trashed_topics' => true,
 
 
287
  'count_replies' => true,
288
  'count_pending_replies' => true,
289
  'count_private_replies' => true,
290
  'count_spammed_replies' => true,
291
  'count_trashed_replies' => true,
 
 
292
  'count_tags' => true,
293
  'count_empty_tags' => true
 
294
  ), 'get_statistics' );
295
 
296
  // Defaults
297
  $topic_count = $topic_count_hidden = 0;
298
  $reply_count = $reply_count_hidden = 0;
299
  $topic_tag_count = $empty_topic_tag_count = 0;
 
300
 
301
  // Users
302
  $user_count = ! empty( $r['count_users'] )
@@ -464,8 +485,8 @@ function bbp_get_statistics( $args = array() ) {
464
 
465
  // Add the hidden (topic/reply) count title attribute strings because we
466
  // don't need to run the math functions on these (see above)
467
- $statistics['hidden_topic_title'] = isset( $hidden_topic_title ) ? $hidden_topic_title : '';
468
- $statistics['hidden_reply_title'] = isset( $hidden_reply_title ) ? $hidden_reply_title : '';
469
 
470
  // Filter & return
471
  return (array) apply_filters( 'bbp_get_statistics', $statistics, $r, $args );
@@ -505,13 +526,13 @@ function bbp_filter_anonymous_post_data( $args = array() ) {
505
  // Filter name
506
  $r['bbp_anonymous_name'] = apply_filters( 'bbp_pre_anonymous_post_author_name', $r['bbp_anonymous_name'] );
507
  if ( empty( $r['bbp_anonymous_name'] ) ) {
508
- bbp_add_error( 'bbp_anonymous_name', esc_html__( '<strong>ERROR</strong>: Invalid author name.', 'bbpress' ) );
509
  }
510
 
511
  // Filter email address
512
  $r['bbp_anonymous_email'] = apply_filters( 'bbp_pre_anonymous_post_author_email', $r['bbp_anonymous_email'] );
513
  if ( empty( $r['bbp_anonymous_email'] ) ) {
514
- bbp_add_error( 'bbp_anonymous_email', esc_html__( '<strong>ERROR</strong>: Invalid email address.', 'bbpress' ) );
515
  }
516
 
517
  // Website is optional (can be empty)
@@ -610,11 +631,6 @@ function bbp_update_anonymous_post_author( $post_id = 0, $anonymous_data = array
610
  */
611
  function bbp_check_for_duplicate( $post_data = array() ) {
612
 
613
- // No duplicate checks for those who can throttle
614
- if ( current_user_can( 'throttle' ) ) {
615
- return true;
616
- }
617
-
618
  // Parse arguments against default values
619
  $r = bbp_parse_args( $post_data, array(
620
  'post_author' => 0,
@@ -625,6 +641,11 @@ function bbp_check_for_duplicate( $post_data = array() ) {
625
  'anonymous_data' => array()
626
  ), 'check_for_duplicate' );
627
 
 
 
 
 
 
628
  // Get the DB
629
  $bbp_db = bbp_db();
630
 
@@ -648,7 +669,9 @@ function bbp_check_for_duplicate( $post_data = array() ) {
648
 
649
  // Set clauses
650
  $join = $clauses['join'];
651
- $where = $clauses['where'];
 
 
652
  }
653
  }
654
 
@@ -659,16 +682,22 @@ function bbp_check_for_duplicate( $post_data = array() ) {
659
  $r = wp_unslash( $r );
660
 
661
  // Prepare duplicate check query
662
- $query = $bbp_db->prepare( "SELECT ID FROM {$bbp_db->posts} {$join} WHERE post_type = %s AND post_status != %s AND post_author = %d AND post_content = %s {$where}", $r['post_type'], $r['post_status'], $r['post_author'], $r['post_content'] );
663
- $query .= ! empty( $r['post_parent'] ) ? $bbp_db->prepare( " AND post_parent = %d", $r['post_parent'] ) : '';
 
 
 
 
664
  $query .= " LIMIT 1";
665
  $dupe = apply_filters( 'bbp_check_for_duplicate_query', $query, $r );
666
 
 
667
  if ( $bbp_db->get_var( $dupe ) ) {
668
  do_action( 'bbp_check_for_duplicate_trigger', $post_data );
669
  return false;
670
  }
671
 
 
672
  return true;
673
  }
674
 
@@ -736,10 +765,21 @@ function bbp_check_for_flood( $anonymous_data = array(), $author_id = 0 ) {
736
  * @param string $content The content being posted
737
  * @return bool True if test is passed, false if fail
738
  */
739
- function bbp_check_for_moderation( $anonymous_data = array(), $author_id = 0, $title = '', $content = '' ) {
 
 
 
 
 
 
 
 
 
 
 
740
 
741
  // Allow for moderation check to be skipped
742
- if ( apply_filters( 'bbp_bypass_check_for_moderation', false, $anonymous_data, $author_id, $title, $content ) ) {
743
  return true;
744
  }
745
 
@@ -755,20 +795,23 @@ function bbp_check_for_moderation( $anonymous_data = array(), $author_id = 0, $t
755
 
756
  /** Max Links *************************************************************/
757
 
758
- $max_links = get_option( 'comment_max_links' );
759
- if ( ! empty( $max_links ) ) {
 
 
760
 
761
- // How many links?
762
- $num_links = preg_match_all( '/(http|ftp|https):\/\//i', $content, $match_out );
763
 
764
- // Allow for bumping the max to include the user's URL
765
- if ( ! empty( $_post['url'] ) ) {
766
- $num_links = apply_filters( 'comment_max_links_url', $num_links, $_post['url'] );
767
- }
768
 
769
- // Das ist zu viele links!
770
- if ( $num_links >= $max_links ) {
771
- return false;
 
772
  }
773
  }
774
 
@@ -781,9 +824,9 @@ function bbp_check_for_moderation( $anonymous_data = array(), $author_id = 0, $t
781
  *
782
  * @param string $moderation List of moderation keys. One per new line.
783
  */
784
- $moderation = apply_filters( 'bbp_moderation_keys', trim( get_option( 'moderation_keys' ) ) );
785
 
786
- // Bail if blacklist is empty
787
  if ( empty( $moderation ) ) {
788
  return true;
789
  }
@@ -840,7 +883,7 @@ function bbp_check_for_moderation( $anonymous_data = array(), $author_id = 0, $t
840
  // Do some escaping magic so that '#' chars in the
841
  // spam words don't break things:
842
  $word = preg_quote( $word, '#' );
843
- $pattern = "#$word#i";
844
 
845
  // Loop through post data
846
  foreach ( $_post as $post_data ) {
@@ -859,115 +902,14 @@ function bbp_check_for_moderation( $anonymous_data = array(), $author_id = 0, $t
859
  }
860
 
861
  /**
862
- * Checks topics and replies against the discussion blacklist of blocked keys
863
  *
864
  * @since 2.0.0 bbPress (r3446)
865
- *
866
- * @param array $anonymous_data Optional - if it's an anonymous post. Do not
867
- * supply if supplying $author_id. Should be
868
- * sanitized (see {@link bbp_filter_anonymous_post_data()}
869
- * @param int $author_id Topic or reply author ID
870
- * @param string $title The title of the content
871
- * @param string $content The content being posted
872
- * @return bool True if test is passed, false if fail
873
  */
874
  function bbp_check_for_blacklist( $anonymous_data = array(), $author_id = 0, $title = '', $content = '' ) {
875
-
876
- // Allow for blacklist check to be skipped
877
- if ( apply_filters( 'bbp_bypass_check_for_blacklist', false, $anonymous_data, $author_id, $title, $content ) ) {
878
- return true;
879
- }
880
-
881
- // Bail if keymaster is author
882
- if ( ! empty( $author_id ) && bbp_is_user_keymaster( $author_id ) ) {
883
- return true;
884
- }
885
-
886
- /** Blacklist *************************************************************/
887
-
888
- /**
889
- * Filters the bbPress blacklist keys.
890
- *
891
- * @since 2.6.0 bbPress (r6050)
892
- *
893
- * @param string $blacklist List of blacklist keys. One per new line.
894
- */
895
- $blacklist = apply_filters( 'bbp_blacklist_keys', trim( get_option( 'blacklist_keys' ) ) );
896
-
897
- // Bail if blacklist is empty
898
- if ( empty( $blacklist ) ) {
899
- return true;
900
- }
901
-
902
- /** User Data *************************************************************/
903
-
904
- // Define local variable
905
- $_post = array();
906
-
907
- // Map anonymous user data
908
- if ( ! empty( $anonymous_data ) ) {
909
- $_post['author'] = $anonymous_data['bbp_anonymous_name'];
910
- $_post['email'] = $anonymous_data['bbp_anonymous_email'];
911
- $_post['url'] = $anonymous_data['bbp_anonymous_website'];
912
-
913
- // Map current user data
914
- } elseif ( ! empty( $author_id ) ) {
915
-
916
- // Get author data
917
- $user = get_userdata( $author_id );
918
-
919
- // If data exists, map it
920
- if ( ! empty( $user ) ) {
921
- $_post['author'] = $user->display_name;
922
- $_post['email'] = $user->user_email;
923
- $_post['url'] = $user->user_url;
924
- }
925
- }
926
-
927
- // Current user IP and user agent
928
- $_post['user_ip'] = bbp_current_author_ip();
929
- $_post['user_ua'] = bbp_current_author_ua();
930
-
931
- // Post title and content
932
- $_post['title'] = $title;
933
- $_post['content'] = $content;
934
-
935
- // Ensure HTML tags are not being used to bypass the blacklist.
936
- $_post['comment_without_html'] = wp_strip_all_tags( $content );
937
-
938
- /** Words *****************************************************************/
939
-
940
- // Get words separated by new lines
941
- $words = explode( "\n", $blacklist );
942
-
943
- // Loop through words
944
- foreach ( (array) $words as $word ) {
945
-
946
- // Trim the whitespace from the word
947
- $word = trim( $word );
948
-
949
- // Skip empty lines
950
- if ( empty( $word ) ) { continue; }
951
-
952
- // Do some escaping magic so that '#' chars in the
953
- // spam words don't break things:
954
- $word = preg_quote( $word, '#' );
955
- $pattern = "#$word#i";
956
-
957
- // Loop through post data
958
- foreach ( $_post as $post_data ) {
959
-
960
- // Check each user data for current word
961
- if ( preg_match( $pattern, $post_data ) ) {
962
-
963
- // Post does not pass
964
- return false;
965
- }
966
- }
967
- }
968
-
969
- // Check passed successfully
970
- return true;
971
  }
972
 
973
  /** Subscriptions *************************************************************/
@@ -1059,23 +1001,26 @@ function bbp_notify_topic_subscribers( $reply_id = 0, $topic_id = 0, $forum_id =
1059
  // Get topic subscribers and bail if empty
1060
  $user_ids = bbp_get_subscribers( $topic_id );
1061
 
1062
- // Dedicated filter to manipulate user ID's to send emails to
1063
- $user_ids = (array) apply_filters( 'bbp_topic_subscription_user_ids', $user_ids );
1064
- if ( empty( $user_ids ) ) {
1065
- return false;
1066
- }
1067
-
1068
  // Remove the reply author from the list.
1069
  $reply_author_key = array_search( (int) $reply_author, $user_ids, true );
1070
  if ( false !== $reply_author_key ) {
1071
  unset( $user_ids[ $reply_author_key ] );
1072
  }
1073
 
 
 
 
1074
  // Bail of the reply author was the only one subscribed.
1075
  if ( empty( $user_ids ) ) {
1076
  return false;
1077
  }
1078
 
 
 
 
 
 
 
1079
  /** Mail ******************************************************************/
1080
 
1081
  // Remove filters from reply content and topic title to prevent content
@@ -1130,9 +1075,9 @@ Login and visit the topic to unsubscribe from these emails.', 'bbpress' ),
1130
  // Setup the From header
1131
  $headers = array( 'From: ' . get_bloginfo( 'name' ) . ' <' . $from_email . '>' );
1132
 
1133
- // Loop through users
1134
- foreach ( (array) $user_ids as $user_id ) {
1135
- $headers[] = 'Bcc: ' . get_userdata( $user_id )->user_email;
1136
  }
1137
 
1138
  /** Send it ***************************************************************/
@@ -1212,23 +1157,26 @@ function bbp_notify_forum_subscribers( $topic_id = 0, $forum_id = 0, $anonymous_
1212
  // Get topic subscribers and bail if empty
1213
  $user_ids = bbp_get_subscribers( $forum_id );
1214
 
1215
- // Dedicated filter to manipulate user ID's to send emails to
1216
- $user_ids = (array) apply_filters( 'bbp_forum_subscription_user_ids', $user_ids );
1217
- if ( empty( $user_ids ) ) {
1218
- return false;
1219
- }
1220
-
1221
  // Remove the topic author from the list.
1222
  $topic_author_key = array_search( (int) $topic_author, $user_ids, true );
1223
  if ( false !== $topic_author_key ) {
1224
  unset( $user_ids[ $topic_author_key ] );
1225
  }
1226
 
1227
- // Bail of the topic author was the only one subscribed.
 
 
 
1228
  if ( empty( $user_ids ) ) {
1229
  return false;
1230
  }
1231
 
 
 
 
 
 
 
1232
  /** Mail ******************************************************************/
1233
 
1234
  // Remove filters from reply content and topic title to prevent content
@@ -1283,9 +1231,9 @@ Login and visit the topic to unsubscribe from these emails.', 'bbpress' ),
1283
  // Setup the From header
1284
  $headers = array( 'From: ' . get_bloginfo( 'name' ) . ' <' . $from_email . '>' );
1285
 
1286
- // Loop through users
1287
- foreach ( (array) $user_ids as $user_id ) {
1288
- $headers[] = 'Bcc: ' . get_userdata( $user_id )->user_email;
1289
  }
1290
 
1291
  /** Send it ***************************************************************/
@@ -1332,6 +1280,72 @@ function bbp_notify_subscribers( $reply_id = 0, $topic_id = 0, $forum_id = 0, $a
1332
  return bbp_notify_topic_subscribers( $reply_id, $topic_id, $forum_id, $anonymous_data, $reply_author );
1333
  }
1334
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1335
  /** Login *********************************************************************/
1336
 
1337
  /**
@@ -1344,18 +1358,21 @@ function bbp_notify_subscribers( $reply_id = 0, $topic_id = 0, $forum_id = 0, $a
1344
  function bbp_logout_url( $url = '', $redirect_to = '' ) {
1345
 
1346
  // Make sure we are directing somewhere
1347
- if ( empty( $redirect_to ) && !strstr( $url, 'redirect_to' ) ) {
1348
 
1349
  // Rejig the $redirect_to
1350
  if ( ! isset( $_SERVER['REDIRECT_URL'] ) || ( $redirect_to !== home_url( $_SERVER['REDIRECT_URL'] ) ) ) {
1351
- $redirect_to = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : '';
 
 
1352
  }
1353
 
1354
- $redirect_to = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
 
1355
 
1356
  // Sanitize $redirect_to and add it to full $url
1357
- $redirect_to = add_query_arg( array( 'loggedout' => 'true' ), esc_url( $redirect_to ) );
1358
- $url = add_query_arg( array( 'redirect_to' => urlencode( $redirect_to ) ), $url );
1359
  }
1360
 
1361
  // Filter & return
@@ -1392,7 +1409,7 @@ function bbp_parse_args( $args, $defaults = array(), $filter_key = '' ) {
1392
 
1393
  // Passively filter the args before the parse
1394
  if ( ! empty( $filter_key ) ) {
1395
- $r = apply_filters( 'bbp_before_' . $filter_key . '_parse_args', $r );
1396
  }
1397
 
1398
  // Parse
@@ -1402,7 +1419,7 @@ function bbp_parse_args( $args, $defaults = array(), $filter_key = '' ) {
1402
 
1403
  // Aggressively filter the args after the parse
1404
  if ( ! empty( $filter_key ) ) {
1405
- $r = apply_filters( 'bbp_after_' . $filter_key . '_parse_args', $r );
1406
  }
1407
 
1408
  // Return the parsed results
@@ -1507,6 +1524,110 @@ function bbp_get_public_child_last_id( $parent_id = 0, $post_type = 'post' ) {
1507
  return (int) apply_filters( 'bbp_get_public_child_last_id', $child_id, $parent_id, $post_type );
1508
  }
1509
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1510
  /**
1511
  * Query the DB and get a count of public children
1512
  *
@@ -1520,39 +1641,85 @@ function bbp_get_public_child_last_id( $parent_id = 0, $post_type = 'post' ) {
1520
  function bbp_get_public_child_count( $parent_id = 0, $post_type = 'post' ) {
1521
 
1522
  // Bail if nothing passed
1523
- if ( empty( $parent_id ) || empty( $post_type ) ) {
1524
  return false;
1525
  }
1526
 
1527
- // Check the public post status
1528
- $post_status = array( bbp_get_public_status_id() );
1529
 
1530
- // Add closed status if topic post type
1531
- if ( bbp_get_topic_post_type() === $post_type ) {
1532
- $post_status[] = bbp_get_closed_status_id();
1533
- }
1534
 
1535
- $query = new WP_Query( array(
1536
- 'fields' => 'ids',
1537
- 'post_parent' => $parent_id,
1538
- 'post_status' => $post_status,
1539
- 'post_type' => $post_type,
1540
- 'posts_per_page' => -1,
1541
 
1542
- // Performance
1543
- 'nopaging' => true,
1544
- 'suppress_filters' => true,
1545
- 'update_post_term_cache' => false,
1546
- 'update_post_meta_cache' => false,
1547
- 'ignore_sticky_posts' => true,
1548
- 'no_found_rows' => true
1549
- ) );
1550
- $child_count = $query->post_count;
1551
- unset( $query );
 
 
1552
 
1553
  // Filter & return
1554
  return (int) apply_filters( 'bbp_get_public_child_count', $child_count, $parent_id, $post_type );
1555
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1556
 
1557
  /**
1558
  * Query the DB and get the child id's of public children
@@ -1691,6 +1858,11 @@ function bbp_update_post_family_caches( $objects = array() ) {
1691
  foreach ( $objects as $object ) {
1692
  $object = get_post( $object );
1693
 
 
 
 
 
 
1694
  // Meta IDs
1695
  foreach ( $ids as $key ) {
1696
  $post_ids[] = get_post_meta( $object->ID, $key, true );
@@ -1743,10 +1915,17 @@ function bbp_update_post_author_caches( $objects = array() ) {
1743
  // Default value
1744
  $user_ids = array();
1745
 
1746
- // Get the user IDs
1747
  foreach ( $objects as $object ) {
1748
- $object = get_post( $object );
1749
- $user_ids[] = get_post_field( 'post_author', $object->ID );
 
 
 
 
 
 
 
1750
  }
1751
 
1752
  // Unique, non-zero values
@@ -1829,7 +2008,7 @@ function bbp_verify_nonce_request( $action = '', $query_arg = '_wpnonce' ) {
1829
  }
1830
 
1831
  // Build the currently requested URL
1832
- $scheme = is_ssl() ? 'https://' : 'http://';
1833
  $requested_url = strtolower( $scheme . $request_host . $_SERVER['REQUEST_URI'] );
1834
 
1835
  /** Look for match ********************************************************/
@@ -1846,7 +2025,9 @@ function bbp_verify_nonce_request( $action = '', $query_arg = '_wpnonce' ) {
1846
  $matched_url = apply_filters( 'bbp_verify_nonce_request_url', $requested_url );
1847
 
1848
  // Check the nonce
1849
- $result = isset( $_REQUEST[ $query_arg ] ) ? wp_verify_nonce( $_REQUEST[ $query_arg ], $action ) : false;
 
 
1850
 
1851
  // Nonce check failed
1852
  if ( empty( $result ) || empty( $action ) || ( strpos( $matched_url, $home_url ) !== 0 ) ) {
@@ -1963,7 +2144,7 @@ function bbp_request_feed_trap( $query_vars = array() ) {
1963
  'feed' => true,
1964
  'post_type' => bbp_get_reply_post_type(),
1965
  'post_parent' => 'any',
1966
- 'post_status' => bbp_get_public_topic_statuses(),
1967
  'posts_per_page' => bbp_get_replies_per_rss_page(),
1968
  'order' => 'DESC',
1969
  'meta_query' => $meta_query
@@ -2179,6 +2360,7 @@ function bbp_pre_handle_404( $override = false, $wp_query = false ) {
2179
  : bbp_set_200();
2180
  }
2181
 
 
2182
  return $override;
2183
  }
2184
 
@@ -2205,3 +2387,35 @@ function bbp_posts_pre_query( $posts = null, $wp_query = false ) {
2205
  // Return, maybe overridden
2206
  return $posts;
2207
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  // Exit if accessed directly
14
  defined( 'ABSPATH' ) || exit;
15
 
16
+ /**
17
+ * Return array of bbPress registered post types
18
+ *
19
+ * @since 2.6.0 bbPress (r6813)
20
+ *
21
+ * @return array
22
+ */
23
+ function bbp_get_post_types() {
24
+ return get_post_types( array( 'source' => 'bbpress' ) );
25
+ }
26
+
27
  /** URLs **********************************************************************/
28
 
29
  /**
86
  *
87
  * @since 2.0.0 bbPress (r3325)
88
  *
89
+ * @param string $cap Capability used to ensure user can view all
90
+ *
91
  * @return bool Whether current user can and is viewing all
92
  */
93
  function bbp_get_view_all( $cap = 'moderate' ) {
94
  $retval = ( ( ! empty( $_GET['view'] ) && ( 'all' === $_GET['view'] ) && current_user_can( $cap ) ) );
95
 
96
  // Filter & return
97
+ return (bool) apply_filters( 'bbp_get_view_all', (bool) $retval, $cap );
98
  }
99
 
100
  /**
192
  // Default value
193
  $retval = false;
194
 
195
+ // Get number of minutes to allow editing for
196
+ $minutes = (int) get_option( '_bbp_edit_lock', 5 );
197
+
198
+ // Now
199
+ $cur_time = current_time( 'timestamp', true );
200
+
201
+ // Period of time
202
+ $lockable = "+{$minutes} minutes";
203
+
204
+ // Add lockable time to post time
205
+ $lock_time = strtotime( $lockable, strtotime( $post_date_gmt ) );
206
+
207
  // Check if date and editing is allowed
208
  if ( ! empty( $post_date_gmt ) && bbp_allow_content_edit() ) {
209
 
 
 
 
210
  // "0" minutes set, so allow forever
211
  if ( 0 === $minutes ) {
212
  $retval = true;
213
 
214
  // Not "0" so compare
215
+ } elseif ( $cur_time >= $lock_time ) {
216
+ $retval = true;
 
 
 
 
 
 
 
 
 
 
 
 
 
217
  }
218
  }
219
 
286
 
287
  // Parse arguments against default values
288
  $r = bbp_parse_args( $args, array(
289
+
290
+ // Users
291
  'count_users' => true,
292
+
293
+ // Forums
294
  'count_forums' => true,
295
+
296
+ // Topics
297
  'count_topics' => true,
298
  'count_pending_topics' => true,
299
  'count_private_topics' => true,
300
  'count_spammed_topics' => true,
301
  'count_trashed_topics' => true,
302
+
303
+ // Replies
304
  'count_replies' => true,
305
  'count_pending_replies' => true,
306
  'count_private_replies' => true,
307
  'count_spammed_replies' => true,
308
  'count_trashed_replies' => true,
309
+
310
+ // Topic tags
311
  'count_tags' => true,
312
  'count_empty_tags' => true
313
+
314
  ), 'get_statistics' );
315
 
316
  // Defaults
317
  $topic_count = $topic_count_hidden = 0;
318
  $reply_count = $reply_count_hidden = 0;
319
  $topic_tag_count = $empty_topic_tag_count = 0;
320
+ $hidden_topic_title = $hidden_reply_title = '';
321
 
322
  // Users
323
  $user_count = ! empty( $r['count_users'] )
485
 
486
  // Add the hidden (topic/reply) count title attribute strings because we
487
  // don't need to run the math functions on these (see above)
488
+ $statistics['hidden_topic_title'] = $hidden_topic_title;
489
+ $statistics['hidden_reply_title'] = $hidden_reply_title;
490
 
491
  // Filter & return
492
  return (array) apply_filters( 'bbp_get_statistics', $statistics, $r, $args );
526
  // Filter name
527
  $r['bbp_anonymous_name'] = apply_filters( 'bbp_pre_anonymous_post_author_name', $r['bbp_anonymous_name'] );
528
  if ( empty( $r['bbp_anonymous_name'] ) ) {
529
+ bbp_add_error( 'bbp_anonymous_name', __( '<strong>ERROR</strong>: Invalid author name.', 'bbpress' ) );
530
  }
531
 
532
  // Filter email address
533
  $r['bbp_anonymous_email'] = apply_filters( 'bbp_pre_anonymous_post_author_email', $r['bbp_anonymous_email'] );
534
  if ( empty( $r['bbp_anonymous_email'] ) ) {
535
+ bbp_add_error( 'bbp_anonymous_email', __( '<strong>ERROR</strong>: Invalid email address.', 'bbpress' ) );
536
  }
537
 
538
  // Website is optional (can be empty)
631
  */
632
  function bbp_check_for_duplicate( $post_data = array() ) {
633
 
 
 
 
 
 
634
  // Parse arguments against default values
635
  $r = bbp_parse_args( $post_data, array(
636
  'post_author' => 0,
641
  'anonymous_data' => array()
642
  ), 'check_for_duplicate' );
643
 
644
+ // No duplicate checks for those who can throttle
645
+ if ( user_can( (int) $r['post_author'], 'throttle' ) ) {
646
+ return true;
647
+ }
648
+
649
  // Get the DB
650
  $bbp_db = bbp_db();
651
 
669
 
670
  // Set clauses
671
  $join = $clauses['join'];
672
+
673
+ // "'", "%", "$" and are valid characters in email addresses
674
+ $where = $bbp_db->remove_placeholder_escape( $clauses['where'] );
675
  }
676
  }
677
 
682
  $r = wp_unslash( $r );
683
 
684
  // Prepare duplicate check query
685
+ $query = "SELECT ID FROM {$bbp_db->posts} {$join}";
686
+ $query .= $bbp_db->prepare( "WHERE post_type = %s AND post_status != %s AND post_author = %d AND post_content = %s", $r['post_type'], $r['post_status'], $r['post_author'], $r['post_content'] );
687
+ $query .= ! empty( $r['post_parent'] )
688
+ ? $bbp_db->prepare( " AND post_parent = %d", $r['post_parent'] )
689
+ : '';
690
+ $query .= $where;
691
  $query .= " LIMIT 1";
692
  $dupe = apply_filters( 'bbp_check_for_duplicate_query', $query, $r );
693
 
694
+ // Dupe found
695
  if ( $bbp_db->get_var( $dupe ) ) {
696
  do_action( 'bbp_check_for_duplicate_trigger', $post_data );
697
  return false;
698
  }
699
 
700
+ // Dupe not found
701
  return true;
702
  }
703
 
765
  * @param string $content The content being posted
766
  * @return bool True if test is passed, false if fail
767
  */
768
+ function bbp_check_for_moderation( $anonymous_data = array(), $author_id = 0, $title = '', $content = '', $strict = false ) {
769
+
770
+ // Strict mode uses WordPress "blacklist" settings
771
+ if ( true === $strict ) {
772
+ $hook_name = 'blacklist';
773
+ $option_name = 'blacklist_keys';
774
+
775
+ // Non-strict uses WordPress "moderation" settings
776
+ } else {
777
+ $hook_name = 'moderation';
778
+ $option_name = 'moderation_keys';
779
+ }
780
 
781
  // Allow for moderation check to be skipped
782
+ if ( apply_filters( "bbp_bypass_check_for_{$hook_name}", false, $anonymous_data, $author_id, $title, $content, $strict ) ) {
783
  return true;
784
  }
785
 
795
 
796
  /** Max Links *************************************************************/
797
 
798
+ // Only check max_links when not being strict
799
+ if ( false === $strict ) {
800
+ $max_links = get_option( 'comment_max_links' );
801
+ if ( ! empty( $max_links ) ) {
802
 
803
+ // How many links?
804
+ $num_links = preg_match_all( '/(http|ftp|https):\/\//i', $content, $match_out );
805
 
806
+ // Allow for bumping the max to include the user's URL
807
+ if ( ! empty( $_post['url'] ) ) {
808
+ $num_links = apply_filters( 'comment_max_links_url', $num_links, $_post['url'], $content );
809
+ }
810
 
811
+ // Das ist zu viele links!
812
+ if ( $num_links >= $max_links ) {
813
+ return false;
814
+ }
815
  }
816
  }
817
 
824
  *
825
  * @param string $moderation List of moderation keys. One per new line.
826
  */
827
+ $moderation = apply_filters( "bbp_{$hook_name}_keys", trim( get_option( $option_name ) ) );
828
 
829
+ // Bail if no words to look for
830
  if ( empty( $moderation ) ) {
831
  return true;
832
  }
883
  // Do some escaping magic so that '#' chars in the
884
  // spam words don't break things:
885
  $word = preg_quote( $word, '#' );
886
+ $pattern = "#{$word}#i";
887
 
888
  // Loop through post data
889
  foreach ( $_post as $post_data ) {
902
  }
903
 
904
  /**
905
+ * Deprecated. Use bbp_check_for_moderation() with strict flag set.
906
  *
907
  * @since 2.0.0 bbPress (r3446)
908
+ * @since 2.6.0 bbPress (r6854)
909
+ * @deprecated 2.6.0 Use bbp_check_for_moderation() with strict flag set
 
 
 
 
 
 
910
  */
911
  function bbp_check_for_blacklist( $anonymous_data = array(), $author_id = 0, $title = '', $content = '' ) {
912
+ return bbp_check_for_moderation( $anonymous_data, $author_id, $title, $content, false );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
913
  }
914
 
915
  /** Subscriptions *************************************************************/
1001
  // Get topic subscribers and bail if empty
1002
  $user_ids = bbp_get_subscribers( $topic_id );
1003
 
 
 
 
 
 
 
1004
  // Remove the reply author from the list.
1005
  $reply_author_key = array_search( (int) $reply_author, $user_ids, true );
1006
  if ( false !== $reply_author_key ) {
1007
  unset( $user_ids[ $reply_author_key ] );
1008
  }
1009
 
1010
+ // Dedicated filter to manipulate user ID's to send emails to
1011
+ $user_ids = (array) apply_filters( 'bbp_topic_subscription_user_ids', $user_ids );
1012
+
1013
  // Bail of the reply author was the only one subscribed.
1014
  if ( empty( $user_ids ) ) {
1015
  return false;
1016
  }
1017
 
1018
+ // Get email addresses, bail if empty
1019
+ $email_addresses = bbp_get_email_addresses_from_user_ids( $user_ids );
1020
+ if ( empty( $email_addresses ) ) {
1021
+ return false;
1022
+ }
1023
+
1024
  /** Mail ******************************************************************/
1025
 
1026
  // Remove filters from reply content and topic title to prevent content
1075
  // Setup the From header
1076
  $headers = array( 'From: ' . get_bloginfo( 'name' ) . ' <' . $from_email . '>' );
1077
 
1078
+ // Loop through addresses
1079
+ foreach ( (array) $email_addresses as $address ) {
1080
+ $headers[] = 'Bcc: ' . $address;
1081
  }
1082
 
1083
  /** Send it ***************************************************************/
1157
  // Get topic subscribers and bail if empty
1158
  $user_ids = bbp_get_subscribers( $forum_id );
1159
 
 
 
 
 
 
 
1160
  // Remove the topic author from the list.
1161
  $topic_author_key = array_search( (int) $topic_author, $user_ids, true );
1162
  if ( false !== $topic_author_key ) {
1163
  unset( $user_ids[ $topic_author_key ] );
1164
  }
1165
 
1166
+ // Dedicated filter to manipulate user ID's to send emails to
1167
+ $user_ids = (array) apply_filters( 'bbp_forum_subscription_user_ids', $user_ids );
1168
+
1169
+ // Bail of the reply author was the only one subscribed.
1170
  if ( empty( $user_ids ) ) {
1171
  return false;
1172
  }
1173
 
1174
+ // Get email addresses, bail if empty
1175
+ $email_addresses = bbp_get_email_addresses_from_user_ids( $user_ids );
1176
+ if ( empty( $email_addresses ) ) {
1177
+ return false;
1178
+ }
1179
+
1180
  /** Mail ******************************************************************/
1181
 
1182
  // Remove filters from reply content and topic title to prevent content
1231
  // Setup the From header
1232
  $headers = array( 'From: ' . get_bloginfo( 'name' ) . ' <' . $from_email . '>' );
1233
 
1234
+ // Loop through addresses
1235
+ foreach ( (array) $email_addresses as $address ) {
1236
+ $headers[] = 'Bcc: ' . $address;
1237
  }
1238
 
1239
  /** Send it ***************************************************************/
1280
  return bbp_notify_topic_subscribers( $reply_id, $topic_id, $forum_id, $anonymous_data, $reply_author );
1281
  }
1282
 
1283
+ /**
1284
+ * Return an array of user email addresses from an array of user IDs
1285
+ *
1286
+ * @since 2.6.0 bbPress (r6722)
1287
+ *
1288
+ * @param array $user_ids
1289
+ * @return array
1290
+ */
1291
+ function bbp_get_email_addresses_from_user_ids( $user_ids = array() ) {
1292
+
1293
+ // Default return value
1294
+ $retval = array();
1295
+
1296
+ // Maximum number of users to get per database query
1297
+ $limit = apply_filters( 'bbp_get_users_chunk_limit', 100 );
1298
+
1299
+ // Only do the work if there are user IDs to query for
1300
+ if ( ! empty( $user_ids ) ) {
1301
+
1302
+ // Get total number of sets
1303
+ $steps = ceil( count( $user_ids ) / $limit );
1304
+ $range = array_map( 'intval', range( 1, $steps ) );
1305
+
1306
+ // Loop through users
1307
+ foreach ( $range as $loop ) {
1308
+
1309
+ // Initial loop has no offset
1310
+ $offset = ( 1 === $loop )
1311
+ ? 0
1312
+ : $limit * $loop;
1313
+
1314
+ // Calculate user IDs to include
1315
+ $loop_ids = array_slice( $user_ids, $offset, $limit );
1316
+
1317
+ // Skip if something went wrong
1318
+ if ( empty( $loop_ids ) ) {
1319
+ continue;
1320
+ }
1321
+
1322
+ // Call get_users() in a way that users are cached
1323
+ $loop_users = get_users( array(
1324
+ 'blog_id' => 0,
1325
+ 'fields' => 'all_with_meta',
1326
+ 'include' => $loop_ids
1327
+ ) );
1328
+
1329
+ // Pluck emails from users
1330
+ $loop_emails = wp_list_pluck( $loop_users, 'user_email' );
1331
+
1332
+ // Clean-up memory, for big user sets
1333
+ unset( $loop_users );
1334
+
1335
+ // Merge users into return value
1336
+ if ( ! empty( $loop_emails ) ) {
1337
+ $retval = array_merge( $retval, $loop_emails );
1338
+ }
1339
+ }
1340
+
1341
+ // No duplicates
1342
+ $retval = bbp_get_unique_array_values( $retval );
1343
+ }
1344
+
1345
+ // Filter & return
1346
+ return apply_filters( 'bbp_get_email_addresses_from_user_ids', $retval, $user_ids, $limit );
1347
+ }
1348
+
1349
  /** Login *********************************************************************/
1350
 
1351
  /**
1358
  function bbp_logout_url( $url = '', $redirect_to = '' ) {
1359
 
1360
  // Make sure we are directing somewhere
1361
+ if ( empty( $redirect_to ) && ! strstr( $url, 'redirect_to' ) ) {
1362
 
1363
  // Rejig the $redirect_to
1364
  if ( ! isset( $_SERVER['REDIRECT_URL'] ) || ( $redirect_to !== home_url( $_SERVER['REDIRECT_URL'] ) ) ) {
1365
+ $redirect_to = isset( $_SERVER['HTTP_REFERER'] )
1366
+ ? $_SERVER['HTTP_REFERER']
1367
+ : '';
1368
  }
1369
 
1370
+ // Rebuild a basic redirect URL
1371
+ $redirect_to = bbp_get_url_scheme() . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
1372
 
1373
  // Sanitize $redirect_to and add it to full $url
1374
+ $redirect_to = add_query_arg( array( 'loggedout' => 'true' ), $redirect_to );
1375
+ $url = add_query_arg( array( 'redirect_to' => urlencode( $redirect_to ) ), $url );
1376
  }
1377
 
1378
  // Filter & return
1409
 
1410
  // Passively filter the args before the parse
1411
  if ( ! empty( $filter_key ) ) {
1412
+ $r = apply_filters( "bbp_before_{$filter_key}_parse_args", $r, $args, $defaults );
1413
  }
1414
 
1415
  // Parse
1419
 
1420
  // Aggressively filter the args after the parse
1421
  if ( ! empty( $filter_key ) ) {
1422
+ $r = apply_filters( "bbp_after_{$filter_key}_parse_args", $r, $args, $defaults );
1423
  }
1424
 
1425
  // Return the parsed results
1524
  return (int) apply_filters( 'bbp_get_public_child_last_id', $child_id, $parent_id, $post_type );
1525
  }
1526
 
1527
+ /**
1528
+ * Query the database for child counts, grouped by type & status
1529
+ *
1530
+ * @since 2.6.0 bbPress (r6826)
1531
+ *
1532
+ * @param int $parent_id
1533
+ */
1534
+ function bbp_get_child_counts( $parent_id = 0 ) {
1535
+
1536
+ // Create cache key
1537
+ $parent_id = absint( $parent_id );
1538
+ $key = md5( serialize( array( 'parent_id' => $parent_id, 'post_type' => bbp_get_post_types() ) ) );
1539
+ $last_changed = wp_cache_get_last_changed( 'bbpress_posts' );
1540
+ $cache_key = "bbp_child_counts:{$key}:{$last_changed}";
1541
+
1542
+ // Check for cache and set if needed
1543
+ $retval = wp_cache_get( $cache_key, 'bbpress_posts' );
1544
+ if ( false === $retval ) {
1545
+
1546
+ // Setup the DB & query
1547
+ $bbp_db = bbp_db();
1548
+ $sql = "SELECT
1549
+ p.post_type AS type,
1550
+ p.post_status AS status,
1551
+ COUNT( * ) AS count
1552
+ FROM {$bbp_db->posts} AS p
1553
+ LEFT JOIN {$bbp_db->postmeta} AS pm
1554
+ ON p.ID = pm.post_id
1555
+ AND pm.meta_key = %s
1556
+ WHERE pm.meta_value = %d
1557
+ GROUP BY p.post_status, p.post_type";
1558
+
1559
+ // Get prepare vars
1560
+ $post_type = get_post_type( $parent_id );
1561
+ $meta_key = "_bbp_{$post_type}_id";
1562
+
1563
+ // Prepare & get results
1564
+ $query = $bbp_db->prepare( $sql, $meta_key, $parent_id );
1565
+ $results = $bbp_db->get_results( $query, ARRAY_A );
1566
+
1567
+ // Setup return value
1568
+ $retval = wp_list_pluck( $results, 'type', 'type' );
1569
+ $statuses = get_post_stati();
1570
+
1571
+ // Loop through results
1572
+ foreach ( $results as $row ) {
1573
+
1574
+ // Setup empties
1575
+ if ( ! is_array( $retval[ $row['type'] ] ) ) {
1576
+ $retval[ $row['type'] ] = array_fill_keys( $statuses, 0 );
1577
+ }
1578
+
1579
+ // Set statuses
1580
+ $retval[ $row['type'] ][ $row['status'] ] = bbp_number_not_negative( $row['count'] );
1581
+ }
1582
+
1583
+ // Always cache the results
1584
+ wp_cache_set( $cache_key, $retval, 'bbpress_posts' );
1585
+ }
1586
+
1587
+ // Make sure results are INTs
1588
+ return (array) apply_filters( 'bbp_get_child_counts', $retval, $parent_id );
1589
+ }
1590
+
1591
+ /**
1592
+ * Filter a list of child counts, from `bbp_get_child_counts()`
1593
+ *
1594
+ * @since 2.6.0 bbPress (r6826)
1595
+ *
1596
+ * @param int $parent_id ID of post to get child counts from
1597
+ * @param array $types Optional. An array of post types to filter by
1598
+ * @param array $statuses Optional. An array of post statuses to filter by
1599
+ *
1600
+ * @return array A list of objects or object fields.
1601
+ */
1602
+ function bbp_filter_child_counts_list( $parent_id = 0, $types = array( 'post' ), $statuses = array() ) {
1603
+
1604
+ // Setup local vars
1605
+ $retval = array();
1606
+ $types = array_flip( (array) $types );
1607
+ $statuses = array_flip( (array) $statuses );
1608
+ $counts = bbp_get_child_counts( $parent_id );
1609
+
1610
+ // Loop through counts by type
1611
+ foreach ( $counts as $type => $type_counts ) {
1612
+
1613
+ // Skip if not this type
1614
+ if ( ! isset( $types[ $type ] ) ) {
1615
+ continue;
1616
+ }
1617
+
1618
+ // Maybe filter statuses
1619
+ if ( ! empty( $statuses ) ) {
1620
+ $type_counts = array_intersect_key( $type_counts, $statuses );
1621
+ }
1622
+
1623
+ // Add type counts to return array
1624
+ $retval[ $type ] = $type_counts;
1625
+ }
1626
+
1627
+ // Filter & return
1628
+ return (array) apply_filters( 'bbp_filter_child_counts_list', $retval, $parent_id, $types, $statuses );
1629
+ }
1630
+
1631
  /**
1632
  * Query the DB and get a count of public children
1633
  *
1641
  function bbp_get_public_child_count( $parent_id = 0, $post_type = 'post' ) {
1642
 
1643
  // Bail if nothing passed
1644
+ if ( empty( $post_type ) ) {
1645
  return false;
1646
  }
1647
 
1648
+ // Which statuses
1649
+ switch ( $post_type ) {
1650
 
1651
+ // Forum
1652
+ case bbp_get_forum_post_type() :
1653
+ $post_status = array( bbp_get_public_status_id() );
1654
+ break;
1655
 
1656
+ // Topic
1657
+ case bbp_get_topic_post_type() :
1658
+ $post_status = bbp_get_public_topic_statuses();
1659
+ break;
 
 
1660
 
1661
+ // Reply
1662
+ case bbp_get_reply_post_type() :
1663
+ default :
1664
+ $post_status = bbp_get_public_reply_statuses();
1665
+ break;
1666
+ }
1667
+
1668
+ // Get counts
1669
+ $counts = bbp_filter_child_counts_list( $parent_id, $post_type, $post_status );
1670
+ $child_count = isset( $counts[ $post_type ] )
1671
+ ? bbp_number_not_negative( array_sum( array_values( $counts[ $post_type ] ) ) )
1672
+ : 0;
1673
 
1674
  // Filter & return
1675
  return (int) apply_filters( 'bbp_get_public_child_count', $child_count, $parent_id, $post_type );
1676
  }
1677
+ /**
1678
+ * Query the DB and get a count of public children
1679
+ *
1680
+ * @since 2.0.0 bbPress (r2868)
1681
+ * @since 2.6.0 bbPress (r5954) Replace direct queries with WP_Query() objects
1682
+ *
1683
+ * @param int $parent_id Parent id.
1684
+ * @param string $post_type Post type. Defaults to 'post'.
1685
+ * @return int The number of children
1686
+ */
1687
+ function bbp_get_non_public_child_count( $parent_id = 0, $post_type = 'post' ) {
1688
+
1689
+ // Bail if nothing passed
1690
+ if ( empty( $parent_id ) || empty( $post_type ) ) {
1691
+ return false;
1692
+ }
1693
+
1694
+ // Which statuses
1695
+ switch ( $post_type ) {
1696
+
1697
+ // Forum
1698
+ case bbp_get_forum_post_type() :
1699
+ $post_status = array( bbp_get_private_status_id(), bbp_get_hidden_status_id() );
1700
+ break;
1701
+
1702
+ // Topic
1703
+ case bbp_get_topic_post_type() :
1704
+ $post_status = bbp_get_non_public_topic_statuses();
1705
+ break;
1706
+
1707
+ // Reply
1708
+ case bbp_get_reply_post_type() :
1709
+ default :
1710
+ $post_status = bbp_get_non_public_reply_statuses();
1711
+ break;
1712
+ }
1713
+
1714
+ // Get counts
1715
+ $counts = bbp_filter_child_counts_list( $parent_id, $post_type, $post_status );
1716
+ $child_count = isset( $counts[ $post_type ] )
1717
+ ? bbp_number_not_negative( array_sum( array_values( $counts[ $post_type ] ) ) )
1718
+ : 0;
1719
+
1720
+ // Filter & return
1721
+ return (int) apply_filters( 'bbp_get_non_public_child_count', $child_count, $parent_id, $post_type );
1722
+ }
1723
 
1724
  /**
1725
  * Query the DB and get the child id's of public children
1858
  foreach ( $objects as $object ) {
1859
  $object = get_post( $object );
1860
 
1861
+ // Skip if post ID is empty.
1862
+ if ( empty( $object->ID ) ) {
1863
+ continue;
1864
+ }
1865
+
1866
  // Meta IDs
1867
  foreach ( $ids as $key ) {
1868
  $post_ids[] = get_post_meta( $object->ID, $key, true );
1915
  // Default value
1916
  $user_ids = array();
1917
 
1918
+ // Get the user IDs (could use wp_list_pluck() if this is ever a bottleneck)
1919
  foreach ( $objects as $object ) {
1920
+ $object = get_post( $object );
1921
+
1922
+ // Skip if post does not have an author ID.
1923
+ if ( empty( $object->post_author ) ) {
1924
+ continue;
1925
+ }
1926
+
1927
+ // If post exists, add post author to the array.
1928
+ $user_ids[] = (int) $object->post_author;
1929
  }
1930
 
1931
  // Unique, non-zero values
2008
  }
2009
 
2010
  // Build the currently requested URL
2011
+ $scheme = bbp_get_url_scheme();
2012
  $requested_url = strtolower( $scheme . $request_host . $_SERVER['REQUEST_URI'] );
2013
 
2014
  /** Look for match ********************************************************/
2025
  $matched_url = apply_filters( 'bbp_verify_nonce_request_url', $requested_url );
2026
 
2027
  // Check the nonce
2028
+ $result = isset( $_REQUEST[ $query_arg ] )
2029
+ ? wp_verify_nonce( $_REQUEST[ $query_arg ], $action )
2030
+ : false;
2031
 
2032
  // Nonce check failed
2033
  if ( empty( $result ) || empty( $action ) || ( strpos( $matched_url, $home_url ) !== 0 ) ) {
2144
  'feed' => true,
2145
  'post_type' => bbp_get_reply_post_type(),
2146
  'post_parent' => 'any',
2147
+ 'post_status' => bbp_get_public_reply_statuses(),
2148
  'posts_per_page' => bbp_get_replies_per_rss_page(),
2149
  'order' => 'DESC',
2150
  'meta_query' => $meta_query
2360
  : bbp_set_200();
2361
  }
2362
 
2363
+ // Return, maybe overridden
2364
  return $override;
2365
  }
2366
 
2387
  // Return, maybe overridden
2388
  return $posts;
2389
  }
2390
+
2391
+ /**
2392
+ * Get scheme for a URL based on is_ssl() results.
2393
+ *
2394
+ * @since 2.6.0 bbPress (r6759)
2395
+ *
2396
+ * @return string https:// if is_ssl(), otherwise http://
2397
+ */
2398
+ function bbp_get_url_scheme() {
2399
+ return is_ssl()
2400
+ ? 'https://'
2401
+ : 'http://';
2402
+ }
2403
+
2404
+ /** Titles ********************************************************************/
2405
+
2406
+ /**
2407
+ * Is a title longer that the maximum title length?
2408
+ *
2409
+ * @since 2.6.0 bbPress (r6783)
2410
+ *
2411
+ * @param string $title
2412
+ * @return bool
2413
+ */
2414
+ function bbp_is_title_too_long( $title = '' ) {
2415
+ $max = bbp_get_title_max_length();
2416
+ $len = mb_strlen( $title, '8bit' );
2417
+ $result = ( $len > $max );
2418
+
2419
+ // Filter & return
2420
+ return (bool) apply_filters( 'bbp_is_title_too_long', $result, $title, $max, $len );
2421
+ }
includes/common/shortcodes.php CHANGED
@@ -442,12 +442,12 @@ class BBP_Shortcodes {
442
 
443
  $bbp = bbpress();
444
 
445
- // Reset necessary forum_query attributes for replys loop to function
446
  $bbp->forum_query->query_vars['post_type'] = bbp_get_forum_post_type();
447
  $bbp->forum_query->in_the_loop = true;
448
  $bbp->forum_query->post = get_post( $forum_id );
449
 
450
- // Reset necessary reply_query attributes for replys loop to function
451
  $bbp->reply_query->query_vars['post_type'] = bbp_get_reply_post_type();
452
  $bbp->reply_query->in_the_loop = true;
453
  $bbp->reply_query->post = get_post( $reply_id );
442
 
443
  $bbp = bbpress();
444
 
445
+ // Reset necessary forum_query attributes for reply loop to function
446
  $bbp->forum_query->query_vars['post_type'] = bbp_get_forum_post_type();
447
  $bbp->forum_query->in_the_loop = true;
448
  $bbp->forum_query->post = get_post( $forum_id );
449
 
450
+ // Reset necessary reply_query attributes for reply loop to function
451
  $bbp->reply_query->query_vars['post_type'] = bbp_get_reply_post_type();
452
  $bbp->reply_query->in_the_loop = true;
453
  $bbp->reply_query->post = get_post( $reply_id );
includes/common/template.php CHANGED
@@ -96,7 +96,9 @@ function bbp_is_site_public( $site_id = 0 ) {
96
  }
97
 
98
  // Get the site visibility setting
99
- $public = get_blog_option( $site_id, 'blog_public', 1 );
 
 
100
 
101
  // Filter & return
102
  return (bool) apply_filters( 'bbp_is_site_public', $public, $site_id );
@@ -1252,7 +1254,7 @@ function bbp_redirect_to_field( $redirect_to = '' ) {
1252
  // Make sure we are directing somewhere
1253
  if ( empty( $redirect_to ) ) {
1254
  if ( isset( $_SERVER['REQUEST_URI'] ) ) {
1255
- $redirect_to = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
1256
  } else {
1257
  $redirect_to = wp_get_referer();
1258
  }
@@ -1696,7 +1698,8 @@ function bbp_reply_form_fields() {
1696
 
1697
  // Show redirect field if not viewing a specific topic
1698
  if ( bbp_is_query_name( 'bbp_single_topic' ) ) :
1699
- bbp_redirect_to_field( get_permalink() );
 
1700
  endif;
1701
  endif;
1702
  }
@@ -2052,6 +2055,8 @@ function bbp_view_url( $view = false ) {
2052
 
2053
  // Pretty permalinks
2054
  if ( bbp_use_pretty_urls() ) {
 
 
2055
  $url = trailingslashit( bbp_get_root_url() . bbp_get_view_slug() ) . $view;
2056
  $url = user_trailingslashit( $url );
2057
  $url = home_url( $url );
@@ -2176,7 +2181,7 @@ function bbp_breadcrumb( $args = array() ) {
2176
 
2177
  // Default to 'Home'
2178
  } else {
2179
- $pre_front_text = __( 'Home', 'bbpress' );
2180
  }
2181
  }
2182
 
@@ -2250,11 +2255,11 @@ function bbp_breadcrumb( $args = array() ) {
2250
  }
2251
 
2252
  // Implode the results of the tag data
2253
- $pre_current_text = sprintf( __( 'Topic Tag: %s', 'bbpress' ), implode( ' ', $tag_data ) );
2254
 
2255
  // Edit Topic Tag
2256
  } elseif ( bbp_is_topic_tag_edit() ) {
2257
- $pre_current_text = __( 'Edit', 'bbpress' );
2258
 
2259
  // Single
2260
  } else {
@@ -2304,7 +2309,7 @@ function bbp_breadcrumb( $args = array() ) {
2304
 
2305
  // Do we want to include a link to home?
2306
  if ( ! empty( $r['include_home'] ) || empty( $r['home_text'] ) ) {
2307
- $crumbs[] = '<a href="' . trailingslashit( home_url() ) . '" class="bbp-breadcrumb-home">' . $r['home_text'] . '</a>';
2308
  }
2309
 
2310
  // Do we want to include a link to the forum root?
@@ -2365,7 +2370,7 @@ function bbp_breadcrumb( $args = array() ) {
2365
 
2366
  // Edit topic tag
2367
  } elseif ( bbp_is_topic_tag_edit() ) {
2368
- $crumbs[] = '<a href="' . esc_url( 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>';
2369
 
2370
  // Search
2371
  } elseif ( bbp_is_search() && bbp_get_search_terms() ) {
96
  }
97
 
98
  // Get the site visibility setting
99
+ $public = is_multisite()
100
+ ? get_blog_option( $site_id, 'blog_public', 1 )
101
+ : get_option( 'blog_public', 1 );
102
 
103
  // Filter & return
104
  return (bool) apply_filters( 'bbp_is_site_public', $public, $site_id );
1254
  // Make sure we are directing somewhere
1255
  if ( empty( $redirect_to ) ) {
1256
  if ( isset( $_SERVER['REQUEST_URI'] ) ) {
1257
+ $redirect_to = bbp_get_url_scheme() . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
1258
  } else {
1259
  $redirect_to = wp_get_referer();
1260
  }
1698
 
1699
  // Show redirect field if not viewing a specific topic
1700
  if ( bbp_is_query_name( 'bbp_single_topic' ) ) :
1701
+ $redirect_to = apply_filters( 'bbp_reply_form_redirect_to', get_permalink() );
1702
+ bbp_redirect_to_field( $redirect_to );
1703
  endif;
1704
  endif;
1705
  }
2055
 
2056
  // Pretty permalinks
2057
  if ( bbp_use_pretty_urls() ) {
2058
+
2059
+ // Run through home_url()
2060
  $url = trailingslashit( bbp_get_root_url() . bbp_get_view_slug() ) . $view;
2061
  $url = user_trailingslashit( $url );
2062
  $url = home_url( $url );
2181
 
2182
  // Default to 'Home'
2183
  } else {
2184
+ $pre_front_text = esc_html__( 'Home', 'bbpress' );
2185
  }
2186
  }
2187
 
2255
  }
2256
 
2257
  // Implode the results of the tag data
2258
+ $pre_current_text = sprintf( esc_html__( 'Topic Tag: %s', 'bbpress' ), implode( ' ', $tag_data ) );
2259
 
2260
  // Edit Topic Tag
2261
  } elseif ( bbp_is_topic_tag_edit() ) {
2262
+ $pre_current_text = esc_html__( 'Edit', 'bbpress' );
2263
 
2264
  // Single
2265
  } else {
2309
 
2310
  // Do we want to include a link to home?
2311
  if ( ! empty( $r['include_home'] ) || empty( $r['home_text'] ) ) {
2312
+ $crumbs[] = '<a href="' . esc_url( home_url() ) . '" class="bbp-breadcrumb-home">' . $r['home_text'] . '</a>';
2313
  }
2314
 
2315
  // Do we want to include a link to the forum root?
2370
 
2371
  // Edit topic tag
2372
  } elseif ( bbp_is_topic_tag_edit() ) {
2373
+ $crumbs[] = '<a href="' . esc_url( get_term_link( bbp_get_topic_tag_id(), bbp_get_topic_tag_tax_id() ) ) . '" class="bbp-breadcrumb-topic-tag">' . sprintf( esc_html__( 'Topic Tag: %s', 'bbpress' ), bbp_get_topic_tag_name() ) . '</a>';
2374
 
2375
  // Search
2376
  } elseif ( bbp_is_search() && bbp_get_search_terms() ) {
includes/common/widgets.php CHANGED
@@ -30,8 +30,9 @@ class BBP_Login_Widget extends WP_Widget {
30
  */
31
  public function __construct() {
32
  $widget_ops = apply_filters( 'bbp_login_widget_options', array(
33
- 'classname' => 'bbp_widget_login',
34
- 'description' => esc_html__( 'A simple login form with optional links to sign-up and lost password pages.', 'bbpress' )
 
35
  ) );
36
 
37
  parent::__construct( false, esc_html__( '(bbPress) Login Widget', 'bbpress' ), $widget_ops );
@@ -76,12 +77,12 @@ class BBP_Login_Widget extends WP_Widget {
76
  if ( ! is_user_logged_in() ) : ?>
77
 
78
  <form method="post" action="<?php bbp_wp_login_action( array( 'context' => 'login_post' ) ); ?>" class="bbp-login-form">
79
- <fieldset>
80
  <legend><?php esc_html_e( 'Log In', 'bbpress' ); ?></legend>
81
 
82
  <div class="bbp-username">
83
  <label for="user_login"><?php esc_html_e( 'Username', 'bbpress' ); ?>: </label>
84
- <input type="text" name="log" value="<?php bbp_sanitize_val( 'user_login', 'text' ); ?>" size="20" id="user_login" />
85
  </div>
86
 
87
  <div class="bbp-password">
@@ -90,13 +91,13 @@ class BBP_Login_Widget extends WP_Widget {
90
  </div>
91
 
92
  <div class="bbp-remember-me">
93
- <input type="checkbox" name="rememberme" value="forever" <?php checked( bbp_get_sanitize_val( 'rememberme', 'checkbox' ), true, true ); ?> id="rememberme" />
94
- <label for="rememberme"><?php esc_html_e( 'Remember Me', 'bbpress' ); ?></label>
95
  </div>
96
 
97
- <div class="bbp-submit-wrapper">
98
 
99
- <?php do_action( 'login_form' ); ?>
100
 
101
  <button type="submit" name="user-submit" id="user-submit" class="button submit user-submit"><?php esc_html_e( 'Log In', 'bbpress' ); ?></button>
102
 
@@ -222,8 +223,9 @@ class BBP_Views_Widget extends WP_Widget {
222
  */
223
  public function __construct() {
224
  $widget_ops = apply_filters( 'bbp_views_widget_options', array(
225
- 'classname' => 'widget_display_views',
226
- 'description' => esc_html__( 'A list of registered optional topic views.', 'bbpress' )
 
227
  ) );
228
 
229
  parent::__construct( false, esc_html__( '(bbPress) Topic Views List', 'bbpress' ), $widget_ops );
@@ -355,8 +357,9 @@ class BBP_Search_Widget extends WP_Widget {
355
  */
356
  public function __construct() {
357
  $widget_ops = apply_filters( 'bbp_search_widget_options', array(
358
- 'classname' => 'widget_display_search',
359
- 'description' => esc_html__( 'The bbPress forum search form.', 'bbpress' )
 
360
  ) );
361
 
362
  parent::__construct( false, esc_html__( '(bbPress) Forum Search Form', 'bbpress' ), $widget_ops );
@@ -471,8 +474,9 @@ class BBP_Forums_Widget extends WP_Widget {
471
  */
472
  public function __construct() {
473
  $widget_ops = apply_filters( 'bbp_forums_widget_options', array(
474
- 'classname' => 'widget_display_forums',
475
- 'description' => esc_html__( 'A list of forums with an option to set the parent.', 'bbpress' )
 
476
  ) );
477
 
478
  parent::__construct( false, esc_html__( '(bbPress) Forums List', 'bbpress' ), $widget_ops );
@@ -643,8 +647,9 @@ class BBP_Topics_Widget extends WP_Widget {
643
  */
644
  public function __construct() {
645
  $widget_ops = apply_filters( 'bbp_topics_widget_options', array(
646
- 'classname' => 'widget_display_topics',
647
- 'description' => esc_html__( 'A list of recent topics, sorted by: newness, popularity, or recent replies.', 'bbpress' )
 
648
  ) );
649
 
650
  parent::__construct( false, esc_html__( '(bbPress) Recent Topics', 'bbpress' ), $widget_ops );
@@ -928,8 +933,9 @@ class BBP_Stats_Widget extends WP_Widget {
928
  */
929
  public function __construct() {
930
  $widget_ops = apply_filters( 'bbp_stats_widget_options', array(
931
- 'classname' => 'widget_display_stats',
932
- 'description' => esc_html__( 'Some statistics from your forum.', 'bbpress' )
 
933
  ) );
934
 
935
  parent::__construct( false, esc_html__( '(bbPress) Statistics', 'bbpress' ), $widget_ops );
@@ -1046,8 +1052,9 @@ class BBP_Replies_Widget extends WP_Widget {
1046
  */
1047
  public function __construct() {
1048
  $widget_ops = apply_filters( 'bbp_replies_widget_options', array(
1049
- 'classname' => 'widget_display_replies',
1050
- 'description' => esc_html__( 'A list of the most recent replies.', 'bbpress' )
 
1051
  ) );
1052
 
1053
  parent::__construct( false, esc_html__( '(bbPress) Recent Replies', 'bbpress' ), $widget_ops );
@@ -1087,7 +1094,7 @@ class BBP_Replies_Widget extends WP_Widget {
1087
 
1088
  // What and when
1089
  'post_type' => bbp_get_reply_post_type(),
1090
- 'post_status' => bbp_get_public_topic_statuses(),
1091
  'posts_per_page' => (int) $settings['max_shown'],
1092
 
1093
  // Performance
@@ -1121,7 +1128,9 @@ class BBP_Replies_Widget extends WP_Widget {
1121
 
1122
  // Verify the reply ID
1123
  $reply_id = bbp_get_reply_id( $widget_query->post->ID );
1124
- $reply_link = '<a class="bbp-reply-topic-title" href="' . esc_url( bbp_get_reply_url( $reply_id ) ) . '" title="' . esc_attr( bbp_get_reply_excerpt( $reply_id, 50 ) ) . '">' . bbp_get_reply_topic_title( $reply_id ) . '</a>';
 
 
1125
 
1126
  // Only query user if showing them
1127
  if ( ! empty( $settings['show_user'] ) ) :
@@ -1134,26 +1143,21 @@ class BBP_Replies_Widget extends WP_Widget {
1134
  if ( ! empty( $settings['show_date'] ) && ! empty( $author_link ) ) :
1135
 
1136
  // translators: 1: reply author, 2: reply link, 3: reply timestamp
1137
- printf( esc_html_x( '%1$s on %2$s %3$s', 'widgets', 'bbpress' ), $author_link, $reply_link, '<div>' . bbp_get_time_since( get_the_time( 'U' ) ) . '</div>' );
1138
 
1139
  // Reply link and timestamp
1140
  elseif ( ! empty( $settings['show_date'] ) ) :
1141
-
1142
- // translators: 1: reply link, 2: reply timestamp
1143
- printf( esc_html_x( '%1$s %2$s', 'widgets', 'bbpress' ), $reply_link, '<div>' . bbp_get_time_since( get_the_time( 'U' ) ) . '</div>' );
1144
 
1145
  // Reply author and title
1146
  elseif ( ! empty( $author_link ) ) :
1147
 
1148
  // translators: 1: reply author, 2: reply link
1149
- printf( esc_html_x( '%1$s on %2$s', 'widgets', 'bbpress' ), $author_link, $reply_link );
1150
 
1151
  // Only the reply title
1152
  else :
1153
-
1154
- // translators: 1: reply link
1155
- printf( esc_html_x( '%1$s', 'widgets', 'bbpress' ), $reply_link );
1156
-
1157
  endif;
1158
 
1159
  ?>
30
  */
31
  public function __construct() {
32
  $widget_ops = apply_filters( 'bbp_login_widget_options', array(
33
+ 'classname' => 'bbp_widget_login',
34
+ 'description' => esc_html__( 'A simple login form with optional links to sign-up and lost password pages.', 'bbpress' ),
35
+ 'customize_selective_refresh' => true
36
  ) );
37
 
38
  parent::__construct( false, esc_html__( '(bbPress) Login Widget', 'bbpress' ), $widget_ops );
77
  if ( ! is_user_logged_in() ) : ?>
78
 
79
  <form method="post" action="<?php bbp_wp_login_action( array( 'context' => 'login_post' ) ); ?>" class="bbp-login-form">
80
+ <fieldset class="bbp-form">
81
  <legend><?php esc_html_e( 'Log In', 'bbpress' ); ?></legend>
82
 
83
  <div class="bbp-username">
84
  <label for="user_login"><?php esc_html_e( 'Username', 'bbpress' ); ?>: </label>
85
+ <input type="text" name="log" value="<?php bbp_sanitize_val( 'user_login', 'text' ); ?>" size="20" maxlength="100" id="user_login" autocomplete="off" />
86
  </div>
87
 
88
  <div class="bbp-password">
91
  </div>
92
 
93
  <div class="bbp-remember-me">
94
+ <input type="checkbox" name="rememberme" value="forever" <?php checked( bbp_get_sanitize_val( 'rememberme', 'checkbox' ) ); ?> id="rememberme" />
95
+ <label for="rememberme"><?php esc_html_e( 'Keep me signed in', 'bbpress' ); ?></label>
96
  </div>
97
 
98
+ <?php do_action( 'login_form' ); ?>
99
 
100
+ <div class="bbp-submit-wrapper">
101
 
102
  <button type="submit" name="user-submit" id="user-submit" class="button submit user-submit"><?php esc_html_e( 'Log In', 'bbpress' ); ?></button>
103
 
223
  */
224
  public function __construct() {
225
  $widget_ops = apply_filters( 'bbp_views_widget_options', array(
226
+ 'classname' => 'widget_display_views',
227
+ 'description' => esc_html__( 'A list of registered optional topic views.', 'bbpress' ),
228
+ 'customize_selective_refresh' => true
229
  ) );
230
 
231
  parent::__construct( false, esc_html__( '(bbPress) Topic Views List', 'bbpress' ), $widget_ops );
357
  */
358
  public function __construct() {
359
  $widget_ops = apply_filters( 'bbp_search_widget_options', array(
360
+ 'classname' => 'widget_display_search',
361
+ 'description' => esc_html__( 'The bbPress forum search form.', 'bbpress' ),
362
+ 'customize_selective_refresh' => true
363
  ) );
364
 
365
  parent::__construct( false, esc_html__( '(bbPress) Forum Search Form', 'bbpress' ), $widget_ops );
474
  */
475
  public function __construct() {
476
  $widget_ops = apply_filters( 'bbp_forums_widget_options', array(
477
+ 'classname' => 'widget_display_forums',
478
+ 'description' => esc_html__( 'A list of forums with an option to set the parent.', 'bbpress' ),
479
+ 'customize_selective_refresh' => true
480
  ) );
481
 
482
  parent::__construct( false, esc_html__( '(bbPress) Forums List', 'bbpress' ), $widget_ops );
647
  */
648
  public function __construct() {
649
  $widget_ops = apply_filters( 'bbp_topics_widget_options', array(
650
+ 'classname' => 'widget_display_topics',
651
+ 'description' => esc_html__( 'A list of recent topics, sorted by: newness, popularity, or recent replies.', 'bbpress' ),
652
+ 'customize_selective_refresh' => true
653
  ) );
654
 
655
  parent::__construct( false, esc_html__( '(bbPress) Recent Topics', 'bbpress' ), $widget_ops );
933
  */
934
  public function __construct() {
935
  $widget_ops = apply_filters( 'bbp_stats_widget_options', array(
936
+ 'classname' => 'widget_display_stats',
937
+ 'description' => esc_html__( 'Some statistics from your forum.', 'bbpress' ),
938
+ 'customize_selective_refresh' => true
939
  ) );
940
 
941
  parent::__construct( false, esc_html__( '(bbPress) Statistics', 'bbpress' ), $widget_ops );
1052
  */
1053
  public function __construct() {
1054
  $widget_ops = apply_filters( 'bbp_replies_widget_options', array(
1055
+ 'classname' => 'widget_display_replies',
1056
+ 'description' => esc_html__( 'A list of the most recent replies.', 'bbpress' ),
1057
+ 'customize_selective_refresh' => true
1058
  ) );
1059
 
1060
  parent::__construct( false, esc_html__( '(bbPress) Recent Replies', 'bbpress' ), $widget_ops );
1094
 
1095
  // What and when
1096
  'post_type' => bbp_get_reply_post_type(),
1097
+ 'post_status' => bbp_get_public_reply_statuses(),
1098
  'posts_per_page' => (int) $settings['max_shown'],
1099
 
1100
  // Performance
1128
 
1129
  // Verify the reply ID
1130
  $reply_id = bbp_get_reply_id( $widget_query->post->ID );
1131
+ $reply_link = '<a class="bbp-reply-topic-title" href="' . esc_url( bbp_get_reply_url( $reply_id ) ) . '" title="' . esc_attr( bbp_get_reply_excerpt( $reply_id, 50 ) ) . '">' . esc_html( bbp_get_reply_topic_title( $reply_id ) ) . '</a>';
1132
+ $time = get_the_time( 'U', $reply_id );
1133
+ $show_date = '<time datetime="' . gmdate( 'Y-m-d H:i:s', $time ) . '">' . esc_html( bbp_get_time_since( $time ) ) . '</time>';
1134
 
1135
  // Only query user if showing them
1136
  if ( ! empty( $settings['show_user'] ) ) :
1143
  if ( ! empty( $settings['show_date'] ) && ! empty( $author_link ) ) :
1144
 
1145
  // translators: 1: reply author, 2: reply link, 3: reply timestamp
1146
+ printf( esc_html_x( '%1$s on %2$s %3$s', 'widgets', 'bbpress' ), $author_link, $reply_link, $show_date );
1147
 
1148
  // Reply link and timestamp
1149
  elseif ( ! empty( $settings['show_date'] ) ) :
1150
+ echo $reply_link . ' ' . $show_date;
 
 
1151
 
1152
  // Reply author and title
1153
  elseif ( ! empty( $author_link ) ) :
1154
 
1155
  // translators: 1: reply author, 2: reply link
1156
+ printf( esc_html_x( '%1$s on %2$s', 'widgets', 'bbpress' ), $author_link, $reply_link );
1157
 
1158
  // Only the reply title
1159
  else :
1160
+ echo $reply_link;
 
 
 
1161
  endif;
1162
 
1163
  ?>
includes/core/abstraction.php CHANGED
@@ -59,9 +59,11 @@ function bbp_setup_converter() {
59
  // Skip if already setup
60
  if ( empty( $bbp_admin->converter ) ) {
61
 
62
- // Require the converter classes
63
- require_once $bbp_admin->admin_dir . 'classes/class-bbp-converter-base.php';
64
  require_once $bbp_admin->admin_dir . 'classes/class-bbp-converter.php';
 
 
65
 
66
  // Setup
67
  $bbp_admin->converter = class_exists( 'BBP_Converter' )
@@ -73,6 +75,8 @@ function bbp_setup_converter() {
73
  return $bbp_admin->converter;
74
  }
75
 
 
 
76
  /**
77
  * Lookup and return a global variable
78
  *
@@ -144,6 +148,8 @@ function bbp_db() {
144
  return bbp_get_global_object( 'wpdb', 'WPDB' );
145
  }
146
 
 
 
147
  /**
148
  * Return the rewrite rules class being used to interact with URLs.
149
  *
@@ -301,6 +307,8 @@ function bbp_get_major_wp_version() {
301
  return (float) $wp_version;
302
  }
303
 
 
 
304
  /**
305
  * Is this a large bbPress installation?
306
  *
@@ -333,3 +341,119 @@ function bbp_get_total_users() {
333
  // Filter & return
334
  return (int) apply_filters( 'bbp_get_total_users', (int) $count );
335
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  // Skip if already setup
60
  if ( empty( $bbp_admin->converter ) ) {
61
 
62
+ // Require the converter files
63
+ require_once $bbp_admin->admin_dir . 'tools/converter.php';
64
  require_once $bbp_admin->admin_dir . 'classes/class-bbp-converter.php';
65
+ require_once $bbp_admin->admin_dir . 'classes/class-bbp-converter-db.php';
66
+ require_once $bbp_admin->admin_dir . 'classes/class-bbp-converter-base.php';
67
 
68
  // Setup
69
  $bbp_admin->converter = class_exists( 'BBP_Converter' )
75
  return $bbp_admin->converter;
76
  }
77
 
78
+ /** Globals *******************************************************************/
79
+
80
  /**
81
  * Lookup and return a global variable
82
  *
148
  return bbp_get_global_object( 'wpdb', 'WPDB' );
149
  }
150
 
151
+ /** Pagination ****************************************************************/
152
+
153
  /**
154
  * Return the rewrite rules class being used to interact with URLs.
155
  *
307
  return (float) $wp_version;
308
  }
309
 
310
+ /** Multisite *****************************************************************/
311
+
312
  /**
313
  * Is this a large bbPress installation?
314
  *
341
  // Filter & return
342
  return (int) apply_filters( 'bbp_get_total_users', (int) $count );
343
  }
344
+
345
+ /**
346
+ * Switch to a site in a multisite installation.
347
+ *
348
+ * If not a multisite installation, no switching will occur.
349
+ *
350
+ * @since 2.6.0 bbPress (r6733)
351
+ *
352
+ * @param int $site_id
353
+ */
354
+ function bbp_switch_to_site( $site_id = 0 ) {
355
+
356
+ // Switch to a specific site
357
+ if ( is_multisite() ) {
358
+ switch_to_blog( $site_id );
359
+ }
360
+ }
361
+
362
+ /**
363
+ * Switch back to the original site in a multisite installation.
364
+ *
365
+ * If not a multisite installation, no switching will occur.
366
+ *
367
+ * @since 2.6.0 bbPress (r6733)
368
+ */
369
+ function bbp_restore_current_site() {
370
+
371
+ // Switch back to the original site
372
+ if ( is_multisite() ) {
373
+ restore_current_blog();
374
+ }
375
+ }
376
+
377
+ /** Interception **************************************************************/
378
+
379
+ /**
380
+ * Generate a default intercept value.
381
+ *
382
+ * @since 2.6.0
383
+ *
384
+ * @staticvar mixed $rand Null by default, random string on first call
385
+ *
386
+ * @return string
387
+ */
388
+ function bbp_default_intercept() {
389
+ static $rand = null;
390
+
391
+ // Generate a new random and unique string
392
+ if ( null === $rand ) {
393
+
394
+ // If ext/hash is not present, compat.php's hash_hmac() does not support sha256.
395
+ $algo = function_exists( 'hash' )
396
+ ? 'sha256'
397
+ : 'sha1';
398
+
399
+ // Old WP installs may not have AUTH_SALT defined.
400
+ $salt = defined( 'AUTH_SALT' ) && AUTH_SALT
401
+ ? AUTH_SALT
402
+ : (string) wp_rand();
403
+
404
+ // Create unique ID
405
+ $rand = hash_hmac( $algo, uniqid( $salt, true ), $salt );
406
+ }
407
+
408
+ // Return random string (from locally static variable)
409
+ return $rand;
410
+ }
411
+
412
+ /**
413
+ * Whether a value has been intercepted
414
+ *
415
+ * @since 2.6.0
416
+ *
417
+ * @param bool $value
418
+ */
419
+ function bbp_is_intercepted( $value = '' ) {
420
+ return ( bbp_default_intercept() !== $value );
421
+ }
422
+
423
+ /**
424
+ * Allow interception of a method or function call.
425
+ *
426
+ * @since 2.6.0
427
+ *
428
+ * @param string $action Typically the name of the caller function
429
+ * @param array $args Typically the results of caller function func_get_args()
430
+ *
431
+ * @return mixed Intercept results. Default bbp_default_intercept().
432
+ */
433
+ function bbp_maybe_intercept( $action = '', $args = array() ) {
434
+
435
+ // Backwards compatibility juggle
436
+ $hook = ( false === strpos( $action, 'pre_' ) )
437
+ ? "pre_{$action}"
438
+ : $action;
439
+
440
+ // Default value
441
+ $default = bbp_default_intercept();
442
+
443
+ // Parse args
444
+ $r = bbp_parse_args( (array) $args, array(), 'maybe_intercept' );
445
+
446
+ // Bail if no args
447
+ if ( empty( $r ) ) {
448
+ return $default;
449
+ }
450
+
451
+ // Filter
452
+ $args = array_merge( array( $hook ), $r );
453
+ $filtered = call_user_func_array( 'apply_filters', $args );
454
+
455
+ // Return filtered value, or default if not intercepted
456
+ return ( $filtered === reset( $r ) )
457
+ ? $default
458
+ : $filtered;
459
+ }
includes/core/actions.php CHANGED
@@ -53,6 +53,7 @@ add_action( 'wp_roles_init', 'bbp_roles_init', 10 );
53
  add_action( 'wp_enqueue_scripts', 'bbp_enqueue_scripts', 10 );
54
  add_action( 'wp_head', 'bbp_head', 10 );
55
  add_action( 'wp_footer', 'bbp_footer', 10 );
 
56
 
57
  /**
58
  * bbp_loaded - Attached to 'plugins_loaded' above
@@ -149,19 +150,17 @@ add_action( 'bbp_widgets_init', array( 'BBP_Topics_Widget', 'register_widget' )
149
  add_action( 'bbp_widgets_init', array( 'BBP_Replies_Widget', 'register_widget' ), 10 );
150
  add_action( 'bbp_widgets_init', array( 'BBP_Stats_Widget', 'register_widget' ), 10 );
151
 
152
- // Notices (loaded after bbp_init for translations)
153
- add_action( 'bbp_head', 'bbp_login_notices' );
154
- add_action( 'bbp_head', 'bbp_topic_notices' );
155
- add_action( 'bbp_template_notices', 'bbp_template_notices' );
 
 
 
156
 
157
  // Always exclude private/hidden forums if needed
158
  add_action( 'pre_get_posts', 'bbp_pre_get_posts_normalize_forum_visibility', 4 );
159
 
160
- // Profile Page Messages
161
- add_action( 'bbp_template_notices', 'bbp_notice_edit_user_success' );
162
- add_action( 'bbp_template_notices', 'bbp_notice_edit_user_pending_email' );
163
- add_action( 'bbp_template_notices', 'bbp_notice_edit_user_is_super_admin', 2 );
164
-
165
  // Before Delete/Trash/Untrash Forum
166
  add_action( 'wp_trash_post', 'bbp_trash_forum' );
167
  add_action( 'trash_post', 'bbp_trash_forum' );
@@ -437,5 +436,3 @@ add_action( 'bbp_get_request', 'bbp_search_results_redirect', 10 );
437
 
438
  // Maybe convert the users password
439
  add_action( 'bbp_login_form_login', 'bbp_user_maybe_convert_pass' );
440
-
441
- add_action( 'bbp_activation', 'bbp_add_activation_redirect' );
53
  add_action( 'wp_enqueue_scripts', 'bbp_enqueue_scripts', 10 );
54
  add_action( 'wp_head', 'bbp_head', 10 );
55
  add_action( 'wp_footer', 'bbp_footer', 10 );
56
+ add_action( 'transition_post_status', 'bbp_transition_post_status', 10, 3 );
57
 
58
  /**
59
  * bbp_loaded - Attached to 'plugins_loaded' above
150
  add_action( 'bbp_widgets_init', array( 'BBP_Replies_Widget', 'register_widget' ), 10 );
151
  add_action( 'bbp_widgets_init', array( 'BBP_Stats_Widget', 'register_widget' ), 10 );
152
 
153
+ // Notices
154
+ add_action( 'bbp_template_notices', 'bbp_template_notices', 20 );
155
+ add_action( 'bbp_template_notices', 'bbp_login_notices' );
156
+ add_action( 'bbp_template_notices', 'bbp_topic_notices' );
157
+ add_action( 'bbp_template_notices', 'bbp_notice_edit_user_success' );
158
+ add_action( 'bbp_template_notices', 'bbp_notice_edit_user_pending_email' );
159
+ add_action( 'bbp_template_notices', 'bbp_notice_edit_user_is_super_admin', 2 );
160
 
161
  // Always exclude private/hidden forums if needed
162
  add_action( 'pre_get_posts', 'bbp_pre_get_posts_normalize_forum_visibility', 4 );
163
 
 
 
 
 
 
164
  // Before Delete/Trash/Untrash Forum
165
  add_action( 'wp_trash_post', 'bbp_trash_forum' );
166
  add_action( 'trash_post', 'bbp_trash_forum' );
436
 
437
  // Maybe convert the users password
438
  add_action( 'bbp_login_form_login', 'bbp_user_maybe_convert_pass' );
 
 
includes/core/capabilities.php CHANGED
@@ -325,8 +325,8 @@ function bbp_filter_user_roles_option() {
325
  * Also note that if using the $wp_user_roles global non-database approach,
326
  * bbPress does not have an intercept point to add its dynamic roles.
327
  *
328
- * @see switch_to_blog()
329
- * @see restore_current_blog()
330
  * @see WP_Roles::_init()
331
  *
332
  * @since 2.2.0 bbPress (r4363)
@@ -498,7 +498,7 @@ function bbp_get_blocked_role() {
498
  * @deprecated 2.2.0 bbPress (r4164)
499
  */
500
  function bbp_add_roles() {
501
- _doing_it_wrong( 'bbp_add_roles', __( 'Editable forum roles no longer exist.', 'bbpress' ), '2.2' );
502
  }
503
 
504
  /**
325
  * Also note that if using the $wp_user_roles global non-database approach,
326
  * bbPress does not have an intercept point to add its dynamic roles.
327
  *
328
+ * @see bbp_switch_to_site()
329
+ * @see bbp_restore_current_site()
330
  * @see WP_Roles::_init()
331
  *
332
  * @since 2.2.0 bbPress (r4363)
498
  * @deprecated 2.2.0 bbPress (r4164)
499
  */
500
  function bbp_add_roles() {
501
+ _doing_it_wrong( 'bbp_add_roles', esc_html__( 'Editable forum roles no longer exist.', 'bbpress' ), '2.2' );
502
  }
503
 
504
  /**
includes/core/filters.php CHANGED
@@ -235,20 +235,34 @@ add_filter( 'bbp_get_forum_topic_count_hidden', 'bbp_number_format', 10 );
235
  add_filter( 'bbp_get_topic_reply_count_hidden', 'bbp_number_format', 10 );
236
 
237
  // Add number-not-negative filter to values that can never be negative numbers
238
- add_filter( 'bbp_get_user_topic_count_int', 'bbp_number_not_negative', 10 );
239
- add_filter( 'bbp_get_user_reply_count_int', 'bbp_number_not_negative', 10 );
240
- add_filter( 'bbp_get_user_post_count_int', 'bbp_number_not_negative', 10 );
241
- add_filter( 'bbp_get_forum_subforum_count_int', 'bbp_number_not_negative', 10 );
242
- add_filter( 'bbp_get_forum_topic_count_int', 'bbp_number_not_negative', 10 );
243
- add_filter( 'bbp_get_forum_reply_count_int', 'bbp_number_not_negative', 10 );
244
- add_filter( 'bbp_get_forum_post_count_int', 'bbp_number_not_negative', 10 );
245
- add_filter( 'bbp_get_topic_voice_count_int', 'bbp_number_not_negative', 10 );
246
- add_filter( 'bbp_get_topic_reply_count_int', 'bbp_number_not_negative', 10 );
247
- add_filter( 'bbp_get_topic_post_count_int', 'bbp_number_not_negative', 10 );
248
- add_filter( 'bbp_get_forum_topic_count_hidden_int', 'bbp_number_not_negative', 10 );
249
- add_filter( 'bbp_get_topic_reply_count_hidden_int', 'bbp_number_not_negative', 10 );
250
- add_filter( 'bbp_get_topic_revision_count_int', 'bbp_number_not_negative', 10 );
251
- add_filter( 'bbp_get_reply_revision_count_int', 'bbp_number_not_negative', 10 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
252
 
253
  // Sanitize displayed user data
254
  add_filter( 'bbp_get_displayed_user_field', 'bbp_sanitize_displayed_user_field', 10, 3 );
235
  add_filter( 'bbp_get_topic_reply_count_hidden', 'bbp_number_format', 10 );
236
 
237
  // Add number-not-negative filter to values that can never be negative numbers
238
+ add_filter( 'bbp_get_user_topic_count', 'bbp_number_not_negative', 8 );
239
+ add_filter( 'bbp_get_user_reply_count', 'bbp_number_not_negative', 8 );
240
+ add_filter( 'bbp_get_user_post_count', 'bbp_number_not_negative', 8 );
241
+ add_filter( 'bbp_get_forum_subforum_count', 'bbp_number_not_negative', 8 );
242
+ add_filter( 'bbp_get_forum_topic_count', 'bbp_number_not_negative', 8 );
243
+ add_filter( 'bbp_get_forum_reply_count', 'bbp_number_not_negative', 8 );
244
+ add_filter( 'bbp_get_forum_post_count', 'bbp_number_not_negative', 8 );
245
+ add_filter( 'bbp_get_topic_voice_count', 'bbp_number_not_negative', 8 );
246
+ add_filter( 'bbp_get_topic_reply_count', 'bbp_number_not_negative', 8 );
247
+ add_filter( 'bbp_get_topic_post_count', 'bbp_number_not_negative', 8 );
248
+ add_filter( 'bbp_get_forum_topic_count_hidden', 'bbp_number_not_negative', 8 );
249
+ add_filter( 'bbp_get_topic_reply_count_hidden', 'bbp_number_not_negative', 8 );
250
+ add_filter( 'bbp_get_topic_revision_count', 'bbp_number_not_negative', 8 );
251
+ add_filter( 'bbp_get_reply_revision_count', 'bbp_number_not_negative', 8 );
252
+ add_filter( 'bbp_get_user_topic_count_int', 'bbp_number_not_negative', 8 );
253
+ add_filter( 'bbp_get_user_reply_count_int', 'bbp_number_not_negative', 8 );
254
+ add_filter( 'bbp_get_user_post_count_int', 'bbp_number_not_negative', 8 );
255
+ add_filter( 'bbp_get_forum_subforum_count_int', 'bbp_number_not_negative', 8 );
256
+ add_filter( 'bbp_get_forum_topic_count_int', 'bbp_number_not_negative', 8 );
257
+ add_filter( 'bbp_get_forum_reply_count_int', 'bbp_number_not_negative', 8 );
258
+ add_filter( 'bbp_get_forum_post_count_int', 'bbp_number_not_negative', 8 );
259
+ add_filter( 'bbp_get_topic_voice_count_int', 'bbp_number_not_negative', 8 );
260
+ add_filter( 'bbp_get_topic_reply_count_int', 'bbp_number_not_negative', 8 );
261
+ add_filter( 'bbp_get_topic_post_count_int', 'bbp_number_not_negative', 8 );
262
+ add_filter( 'bbp_get_forum_topic_count_hidden_int', 'bbp_number_not_negative', 8 );
263
+ add_filter( 'bbp_get_topic_reply_count_hidden_int', 'bbp_number_not_negative', 8 );
264
+ add_filter( 'bbp_get_topic_revision_count_int', 'bbp_number_not_negative', 8 );
265
+ add_filter( 'bbp_get_reply_revision_count_int', 'bbp_number_not_negative', 8 );
266
 
267
  // Sanitize displayed user data
268
  add_filter( 'bbp_get_displayed_user_field', 'bbp_sanitize_displayed_user_field', 10, 3 );
includes/core/options.php CHANGED
@@ -20,127 +20,137 @@ defined( 'ABSPATH' ) || exit;
20
  * @return array Filtered option names and values
21
  */
22
  function bbp_get_default_options() {
 
23
 
24
- // Use the participant role for the default-default role
25
- $role = bbp_get_participant_role();
26
 
27
- // Filter & return
28
- return (array) apply_filters( 'bbp_get_default_options', array(
 
 
 
29
 
30
- /** DB Version ********************************************************/
 
31
 
32
- '_bbp_db_version' => 0, // Database version
33
- '_bbp_db_upgrade_skipped' => 0, // Database upgrade skipped
34
 
35
- /** Features **********************************************************/
36
 
37
- '_bbp_enable_favorites' => 1, // Enable favorites
38
- '_bbp_enable_subscriptions' => 1, // Enable subscriptions
39
- '_bbp_enable_engagements' => 1, // Enable engagements
40
- '_bbp_allow_content_edit' => 1, // Allow content edit
41
- '_bbp_allow_content_throttle' => 1, // Allow content throttle
42
- '_bbp_allow_revisions' => 1, // Allow revisions
43
- '_bbp_allow_topic_tags' => 1, // Allow topic tagging
44
- '_bbp_allow_search' => 1, // Allow forum-wide search
45
- '_bbp_allow_forum_mods' => 1, // Allow per-forum moderation
46
- '_bbp_allow_global_access' => 1, // Allow users from all sites to post
47
- '_bbp_allow_anonymous' => 0, // Allow anonymous posting
48
- '_bbp_allow_super_mods' => 0, // Allow mods to edit users
49
- '_bbp_allow_threaded_replies' => 0, // Allow threaded replies
50
- '_bbp_use_wp_editor' => 1, // Use the WordPress editor if available
51
- '_bbp_use_autoembed' => 0, // Use oEmbed in topics and replies
52
 
53
- /** Settings **********************************************************/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
 
55
- '_bbp_default_role' => $role, // Default forums role
56
- '_bbp_edit_lock' => 5, // Lock post editing after 5 minutes
57
- '_bbp_throttle_time' => 10, // Throttle post time to 10 seconds
58
- '_bbp_thread_replies_depth' => 2, // Thread replies depth
59
- '_bbp_theme_package_id' => 'default', // The ID for the current theme package
60
- '_bbp_settings_integration' => 'basic', // How to integrate into wp-admin
61
 
62
- /** Per Page **********************************************************/
 
 
 
 
 
63
 
64
- '_bbp_topics_per_page' => 15, // Topics per page
65
- '_bbp_replies_per_page' => 15, // Replies per page
66
- '_bbp_forums_per_page' => 50, // Forums per page
67
- '_bbp_topics_per_rss_page' => 25, // Topics per RSS page
68
- '_bbp_replies_per_rss_page' => 25, // Replies per RSS page
69
 
70
- /** Page For **********************************************************/
 
 
 
 
71
 
72
- '_bbp_page_for_forums' => 0, // Page for forums
73
- '_bbp_page_for_topics' => 0, // Page for forums
74
- '_bbp_page_for_login' => 0, // Page for login
75
- '_bbp_page_for_register' => 0, // Page for register
76
- '_bbp_page_for_lost_pass' => 0, // Page for lost-pass
77
 
78
- /** Forum Root ********************************************************/
 
 
 
 
79
 
80
- '_bbp_root_slug' => 'forums', // Forum archive slug
81
- '_bbp_show_on_root' => 'forums', // What to show on root (forums|topics)
82
- '_bbp_include_root' => 1, // Include forum-archive before single slugs
83
 
84
- /** Single Slugs ******************************************************/
 
 
85
 
86
- '_bbp_forum_slug' => 'forum', // Forum slug
87
- '_bbp_topic_slug' => 'topic', // Topic slug
88
- '_bbp_reply_slug' => 'reply', // Reply slug
89
- '_bbp_topic_tag_slug' => 'topic-tag', // Topic tag slug
90
 
91
- /** User Slugs ********************************************************/
 
 
 
92
 
93
- '_bbp_user_slug' => 'users', // User profile slug
94
- '_bbp_user_engs_slug' => 'engagements', // User engagements slug
95
- '_bbp_user_favs_slug' => 'favorites', // User favorites slug
96
- '_bbp_user_subs_slug' => 'subscriptions', // User subscriptions slug
97
- '_bbp_topic_archive_slug' => 'topics', // Topic archive slug
98
- '_bbp_reply_archive_slug' => 'replies', // Reply archive slug
99
 
100
- /** Other Slugs *******************************************************/
 
 
 
 
 
101
 
102
- '_bbp_view_slug' => 'view', // View slug
103
- '_bbp_search_slug' => 'search', // Search slug
104
 
105
- /** Topics ************************************************************/
 
106
 
107
- '_bbp_title_max_length' => 80, // Title Max Length
108
- '_bbp_super_sticky_topics' => '', // Super stickies
109
 
110
- /** Forums ************************************************************/
 
111
 
112
- '_bbp_private_forums' => '', // Private forums
113
- '_bbp_hidden_forums' => '', // Hidden forums
114
 
115
- /** BuddyPress ********************************************************/
 
116
 
117
- '_bbp_enable_group_forums' => 1, // Enable BuddyPress Group Extension
118
- '_bbp_group_forums_root_id' => 0, // Group Forums parent forum id
119
 
120
- /** Akismet ***********************************************************/
 
121
 
122
- '_bbp_enable_akismet' => 1, // Users from all sites can post
123
 
124
- /** Converter *********************************************************/
125
 
126
- // Connection
127
- '_bbp_converter_db_user' => '', // Database User
128
- '_bbp_converter_db_pass' => '', // Database Password
129
- '_bbp_converter_db_name' => '', // Database Name
130
- '_bbp_converter_db_port' => 3306, // Database Port
131
- '_bbp_converter_db_server' => 'localhost', // Database Server/IP
132
- '_bbp_converter_db_prefix' => '', // Database table prefix
133
 
134
- // Options
135
- '_bbp_converter_rows' => 100, // Number of rows to query
136
- '_bbp_converter_delay_time' => 2, // Seconds to wait between queries
137
- '_bbp_converter_step' => false, // Current converter step
138
- '_bbp_converter_start' => false, // Step to start at
139
- '_bbp_converter_convert_users' => false, // Whether to convert users
140
- '_bbp_converter_halt' => false, // Halt on errors
141
- '_bbp_converter_platform' => false, // Which platform to use
142
- '_bbp_converter_query' => false // Last query
143
- ) );
 
 
 
 
 
 
 
 
 
 
 
 
144
  }
145
 
146
  /**
@@ -262,10 +272,11 @@ function bbp_pre_load_options() {
262
  return;
263
  }
264
 
265
- // Bail if strategy is overloaded to false|null
266
- $strategy = apply_filters( 'bbp_pre_load_options', 'notoptions' );
267
- if ( empty( $strategy ) ) {
268
- return;
 
269
  }
270
 
271
  // Get variables
20
  * @return array Filtered option names and values
21
  */
22
  function bbp_get_default_options() {
23
+ static $options = null;
24
 
25
+ // Store these to avoid recreating them
26
+ if ( is_null( $options ) ) {
27
 
28
+ // Use the participant role for the default-default role
29
+ $role = bbp_get_participant_role();
30
+ $options = array(
31
+
32
+ /** DB Version ********************************************************/
33
 
34
+ '_bbp_db_version' => 0, // Database version
35
+ '_bbp_db_upgrade_skipped' => 0, // Database upgrade skipped
36
 
37
+ /** Flags *************************************************************/
 
38
 
39
+ '_bbp_flag_initial_content' => 1, // Flag to indicate initial content was created
40
 
41
+ /** Features **********************************************************/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
+ '_bbp_enable_favorites' => 1, // Enable favorites
44
+ '_bbp_enable_subscriptions' => 1, // Enable subscriptions
45
+ '_bbp_enable_engagements' => 1, // Enable engagements
46
+ '_bbp_allow_content_edit' => 1, // Allow content edit
47
+ '_bbp_allow_content_throttle' => 1, // Allow content throttle
48
+ '_bbp_allow_revisions' => 1, // Allow revisions
49
+ '_bbp_allow_topic_tags' => 1, // Allow topic tagging
50
+ '_bbp_allow_search' => 1, // Allow forum-wide search
51
+ '_bbp_allow_forum_mods' => 1, // Allow per-forum moderation
52
+ '_bbp_allow_global_access' => 1, // Allow users from all sites to post
53
+ '_bbp_allow_anonymous' => 0, // Allow anonymous posting
54
+ '_bbp_allow_super_mods' => 0, // Allow mods to edit users
55
+ '_bbp_allow_threaded_replies' => 0, // Allow threaded replies
56
+ '_bbp_use_wp_editor' => 1, // Use the WordPress editor if available
57
+ '_bbp_use_autoembed' => 0, // Use oEmbed in topics and replies
58
 
59
+ /** Settings **********************************************************/
 
 
 
 
 
60
 
61
+ '_bbp_default_role' => $role, // Default forums role
62
+ '_bbp_edit_lock' => 5, // Lock post editing after 5 minutes
63
+ '_bbp_throttle_time' => 10, // Throttle post time to 10 seconds
64
+ '_bbp_thread_replies_depth' => 2, // Thread replies depth
65
+ '_bbp_theme_package_id' => 'default', // The ID for the current theme package
66
+ '_bbp_settings_integration' => 'basic', // How to integrate into wp-admin
67
 
68
+ /** Per Page **********************************************************/
 
 
 
 
69
 
70
+ '_bbp_topics_per_page' => 15, // Topics per page
71
+ '_bbp_replies_per_page' => 15, // Replies per page
72
+ '_bbp_forums_per_page' => 50, // Forums per page
73
+ '_bbp_topics_per_rss_page' => 25, // Topics per RSS page
74
+ '_bbp_replies_per_rss_page' => 25, // Replies per RSS page
75
 
76
+ /** Page For **********************************************************/
 
 
 
 
77
 
78
+ '_bbp_page_for_forums' => 0, // Page for forums
79
+ '_bbp_page_for_topics' => 0, // Page for forums
80
+ '_bbp_page_for_login' => 0, // Page for login
81
+ '_bbp_page_for_register' => 0, // Page for register
82
+ '_bbp_page_for_lost_pass' => 0, // Page for lost-pass
83
 
84
+ /** Forum Root ********************************************************/
 
 
85
 
86
+ '_bbp_root_slug' => 'forums', // Forum archive slug
87
+ '_bbp_show_on_root' => 'forums', // What to show on root (forums|topics)
88
+ '_bbp_include_root' => 1, // Include forum-archive before single slugs
89
 
90
+ /** Single Slugs ******************************************************/
 
 
 
91
 
92
+ '_bbp_forum_slug' => 'forum', // Forum slug
93
+ '_bbp_topic_slug' => 'topic', // Topic slug
94
+ '_bbp_reply_slug' => 'reply', // Reply slug
95
+ '_bbp_topic_tag_slug' => 'topic-tag', // Topic tag slug
96
 
97
+ /** User Slugs ********************************************************/
 
 
 
 
 
98
 
99
+ '_bbp_user_slug' => 'users', // User profile slug
100
+ '_bbp_user_engs_slug' => 'engagements', // User engagements slug
101
+ '_bbp_user_favs_slug' => 'favorites', // User favorites slug
102
+ '_bbp_user_subs_slug' => 'subscriptions', // User subscriptions slug
103
+ '_bbp_topic_archive_slug' => 'topics', // Topic archive slug
104
+ '_bbp_reply_archive_slug' => 'replies', // Reply archive slug
105
 
106
+ /** Other Slugs *******************************************************/
 
107
 
108
+ '_bbp_view_slug' => 'view', // View slug
109
+ '_bbp_search_slug' => 'search', // Search slug
110
 
111
+ /** Topics ************************************************************/
 
112
 
113
+ '_bbp_title_max_length' => 80, // Title Max Length
114
+ '_bbp_super_sticky_topics' => '', // Super stickies
115
 
116
+ /** Forums ************************************************************/
 
117
 
118
+ '_bbp_private_forums' => '', // Private forums
119
+ '_bbp_hidden_forums' => '', // Hidden forums
120
 
121
+ /** BuddyPress ********************************************************/
 
122
 
123
+ '_bbp_enable_group_forums' => 1, // Enable BuddyPress Group Extension
124
+ '_bbp_group_forums_root_id' => 0, // Group Forums parent forum id
125
 
126
+ /** Akismet ***********************************************************/
127
 
128
+ '_bbp_enable_akismet' => 1, // Users from all sites can post
129
 
130
+ /** Converter *********************************************************/
 
 
 
 
 
 
131
 
132
+ // Connection
133
+ '_bbp_converter_db_user' => '', // Database User
134
+ '_bbp_converter_db_pass' => '', // Database Password
135
+ '_bbp_converter_db_name' => '', // Database Name
136
+ '_bbp_converter_db_port' => 3306, // Database Port
137
+ '_bbp_converter_db_server' => 'localhost', // Database Server/IP
138
+ '_bbp_converter_db_prefix' => '', // Database table prefix
139
+
140
+ // Options
141
+ '_bbp_converter_rows' => 100, // Number of rows to query
142
+ '_bbp_converter_delay_time' => 2, // Seconds to wait between queries
143
+ '_bbp_converter_step' => false, // Current converter step
144
+ '_bbp_converter_start' => false, // Step to start at
145
+ '_bbp_converter_convert_users' => false, // Whether to convert users
146
+ '_bbp_converter_halt' => false, // Halt on errors
147
+ '_bbp_converter_platform' => false, // Which platform to use
148
+ '_bbp_converter_query' => false // Last query
149
+ );
150
+ }
151
+
152
+ // Filter & return
153
+ return (array) apply_filters( 'bbp_get_default_options', $options );
154
  }
155
 
156
  /**
272
  return;
273
  }
274
 
275
+ // Maybe intercept
276
+ $strategy = apply_filters( 'bbp_pre_load_options_strategy', 'notoptions' );
277
+ $intercept = bbp_maybe_intercept( __FUNCTION__, $strategy );
278
+ if ( bbp_is_intercepted( $intercept ) ) {
279
+ return $intercept;
280
  }
281
 
282
  // Get variables
includes/core/sub-actions.php CHANGED
@@ -256,6 +256,31 @@ function bbp_login_form_login() {
256
  do_action( 'bbp_login_form_login' );
257
  }
258
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
259
  /** User Actions **************************************************************/
260
 
261
  /**
@@ -353,6 +378,11 @@ function bbp_post_request() {
353
  // Sanitize the POST action
354
  $action = sanitize_key( $_POST['action'] );
355
 
 
 
 
 
 
356
  // This dynamic action is probably the one you want to use. It narrows down
357
  // the scope of the 'action' without needing to check it in your function.
358
  do_action( 'bbp_post_request_' . $action );
@@ -381,6 +411,11 @@ function bbp_get_request() {
381
  // Sanitize the GET action
382
  $action = sanitize_key( $_GET['action'] );
383
 
 
 
 
 
 
384
  // This dynamic action is probably the one you want to use. It narrows down
385
  // the scope of the 'action' without needing to check it in your function.
386
  do_action( 'bbp_get_request_' . $action );
256
  do_action( 'bbp_login_form_login' );
257
  }
258
 
259
+
260
+ /**
261
+ * Add the bbPress-specific post status transition action
262
+ *
263
+ * @since 2.6.0 bbPress (r6792)
264
+ *
265
+ * @param string $new_status New post status
266
+ * @param string $old_status Old post status
267
+ * @param WP_Post $post Post object
268
+ */
269
+ function bbp_transition_post_status( $new_status = '', $old_status = '', $post = false ) {
270
+
271
+ // Get bbPress post types
272
+ $post_type = get_post_type( $post );
273
+ $types = bbp_get_post_types();
274
+
275
+ // Bail if post is not a bbPress post type
276
+ if ( ! in_array( $post_type, $types, true ) ) {
277
+ return;
278
+ }
279
+
280
+ // Do the action
281
+ do_action( 'bbp_transition_post_status', $new_status, $old_status, $post );
282
+ }
283
+
284
  /** User Actions **************************************************************/
285
 
286
  /**
378
  // Sanitize the POST action
379
  $action = sanitize_key( $_POST['action'] );
380
 
381
+ // Bail if action was totally invalid
382
+ if ( empty( $action ) ) {
383
+ return;
384
+ }
385
+
386
  // This dynamic action is probably the one you want to use. It narrows down
387
  // the scope of the 'action' without needing to check it in your function.
388
  do_action( 'bbp_post_request_' . $action );
411
  // Sanitize the GET action
412
  $action = sanitize_key( $_GET['action'] );
413
 
414
+ // Bail if action was totally invalid
415
+ if ( empty( $action ) ) {
416
+ return;
417
+ }
418
+
419
  // This dynamic action is probably the one you want to use. It narrows down
420
  // the scope of the 'action' without needing to check it in your function.
421
  do_action( 'bbp_get_request_' . $action );
includes/core/template-functions.php CHANGED
@@ -112,7 +112,6 @@ function bbp_locate_template( $template_names, $load = false, $require_once = tr
112
  * Registers the style if file provided (does NOT overwrite) and enqueues.
113
  *
114
  * @since 2.5.0 bbPress (r5180)
115
- * @since 2.6.0 bbPress (r6640) Bail early if not a bbPress page/shortcode
116
  *
117
  * @param string $handle Name of the stylesheet.
118
  * @param string|bool $file Relative path to stylesheet. Example: '/css/mystyle.css'.
@@ -128,11 +127,6 @@ function bbp_locate_template( $template_names, $load = false, $require_once = tr
128
  */
129
  function bbp_enqueue_style( $handle = '', $file = '', $deps = array(), $ver = false, $media = 'all' ) {
130
 
131
- // Bail if not on a bbPress page or shortcode
132
- if ( ! is_bbpress() ) {
133
- return;
134
- }
135
-
136
  // No file found yet
137
  $located = false;
138
 
@@ -190,7 +184,6 @@ function bbp_enqueue_style( $handle = '', $file = '', $deps = array(), $ver = fa
190
  * Registers the style if file provided (does NOT overwrite) and enqueues.
191
  *
192
  * @since 2.5.0 bbPress (r5180)
193
- * @since 2.6.0 bbPress (r6640) Bail early if not a bbPress page/shortcode
194
  *
195
  * @param string $handle Name of the script.
196
  * @param string|bool $file Relative path to the script. Example: '/js/myscript.js'.
@@ -205,11 +198,6 @@ function bbp_enqueue_style( $handle = '', $file = '', $deps = array(), $ver = fa
205
  */
206
  function bbp_enqueue_script( $handle = '', $file = '', $deps = array(), $ver = false, $in_footer = false ) {
207
 
208
- // Bail if not on a bbPress page or shortcode
209
- if ( ! is_bbpress() ) {
210
- return;
211
- }
212
-
213
  // No file found yet
214
  $located = false;
215
 
112
  * Registers the style if file provided (does NOT overwrite) and enqueues.
113
  *
114
  * @since 2.5.0 bbPress (r5180)
 
115
  *
116
  * @param string $handle Name of the stylesheet.
117
  * @param string|bool $file Relative path to stylesheet. Example: '/css/mystyle.css'.
127
  */
128
  function bbp_enqueue_style( $handle = '', $file = '', $deps = array(), $ver = false, $media = 'all' ) {
129
 
 
 
 
 
 
130
  // No file found yet
131
  $located = false;
132
 
184
  * Registers the style if file provided (does NOT overwrite) and enqueues.
185
  *
186
  * @since 2.5.0 bbPress (r5180)
 
187
  *
188
  * @param string $handle Name of the script.
189
  * @param string|bool $file Relative path to the script. Example: '/js/myscript.js'.
198
  */
199
  function bbp_enqueue_script( $handle = '', $file = '', $deps = array(), $ver = false, $in_footer = false ) {
200
 
 
 
 
 
 
201
  // No file found yet
202
  $located = false;
203
 
includes/core/theme-compat.php CHANGED
@@ -691,7 +691,7 @@ function bbp_template_include_theme_compat( $template = '' ) {
691
  // Reset post
692
  bbp_theme_compat_reset_post( array(
693
  'ID' => 0,
694
- 'post_title' => __( 'Replies', 'bbpress' ),
695
  'post_author' => 0,
696
  'post_date' => 0,
697
  'post_content' => $bbp_shortcodes->display_reply_index(),
@@ -791,7 +791,7 @@ function bbp_template_include_theme_compat( $template = '' ) {
791
  'post_date' => 0,
792
  'post_content' => $new_content,
793
  'post_type' => '',
794
- 'post_title' => sprintf( __( 'Topic Tag: %s', 'bbpress' ), '<span>' . bbp_get_topic_tag_name() . '</span>' ),
795
  'post_status' => bbp_get_public_status_id(),
796
  'is_tax' => true,
797
  'is_archive' => true,
@@ -1010,21 +1010,17 @@ function bbp_restore_all_filters( $tag, $priority = false ) {
1010
  * @param int $post_id ID of the post to check
1011
  * @return bool True if open, false if closed
1012
  */
1013
- function bbp_force_comment_status( $open, $post_id = 0 ) {
1014
-
1015
- // Get the post type of the post ID
1016
- $post_type = get_post_type( $post_id );
1017
 
1018
  // Default return value is what is passed in $open
1019
  $retval = (bool) $open;
1020
 
 
 
 
1021
  // Only force for bbPress post types
1022
- switch ( $post_type ) {
1023
- case bbp_get_forum_post_type() :
1024
- case bbp_get_topic_post_type() :
1025
- case bbp_get_reply_post_type() :
1026
- $retval = false;
1027
- break;
1028
  }
1029
 
1030
  // Filter & return
691
  // Reset post
692
  bbp_theme_compat_reset_post( array(
693
  'ID' => 0,
694
+ 'post_title' => esc_html__( 'Replies', 'bbpress' ),
695
  'post_author' => 0,
696
  'post_date' => 0,
697
  'post_content' => $bbp_shortcodes->display_reply_index(),
791
  'post_date' => 0,
792
  'post_content' => $new_content,
793
  'post_type' => '',
794
+ 'post_title' => sprintf( esc_html__( 'Topic Tag: %s', 'bbpress' ), '<span>' . bbp_get_topic_tag_name() . '</span>' ),
795
  'post_status' => bbp_get_public_status_id(),
796
  'is_tax' => true,
797
  'is_archive' => true,
1010
  * @param int $post_id ID of the post to check
1011
  * @return bool True if open, false if closed
1012
  */
1013
+ function bbp_force_comment_status( $open = false, $post_id = 0 ) {
 
 
 
1014
 
1015
  // Default return value is what is passed in $open
1016
  $retval = (bool) $open;
1017
 
1018
+ // Get the post type of the post ID
1019
+ $post_type = get_post_type( $post_id );
1020
+
1021
  // Only force for bbPress post types
1022
+ if ( in_array( $post_type, bbp_get_post_types(), true ) ) {
1023
+ $retval = false;
 
 
 
 
1024
  }
1025
 
1026
  // Filter & return
includes/core/update.php CHANGED
@@ -163,6 +163,30 @@ function bbp_setup_updater() {
163
  bbp_version_updater();
164
  }
165
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
  /**
167
  * Create a default forum, topic, and reply
168
  *
@@ -172,23 +196,23 @@ function bbp_setup_updater() {
172
  */
173
  function bbp_create_initial_content( $args = array() ) {
174
 
175
- // Current user ID
176
- $user_id = bbp_get_current_user_id();
177
 
178
  // Parse arguments against default values
179
  $r = bbp_parse_args( $args, array(
180
  'forum_author' => $user_id,
181
  'forum_parent' => 0,
182
  'forum_status' => 'publish',
183
- 'forum_title' => __( 'General', 'bbpress' ),
184
- 'forum_content' => __( 'General chit-chat', 'bbpress' ),
185
 
186
  'topic_author' => $user_id,
187
- 'topic_title' => __( 'Hello World!', 'bbpress' ),
188
- 'topic_content' => __( 'I am the first topic in your new forums.', 'bbpress' ),
189
 
190
  'reply_author' => $user_id,
191
- 'reply_content' => __( 'Oh, and this is what a reply looks like.', 'bbpress' ),
192
  ), 'create_initial_content' );
193
 
194
  // Use the same time for each post
@@ -372,8 +396,41 @@ function bbp_add_activation_redirect() {
372
  return;
373
  }
374
 
375
- // Add the transient to redirect
376
- set_transient( '_bbp_activation_redirect', true, 30 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
377
  }
378
 
379
  /**
@@ -389,12 +446,22 @@ function bbp_add_activation_redirect() {
389
  */
390
  function bbp_make_current_user_keymaster() {
391
 
 
 
 
 
 
 
 
 
 
 
392
  // Bail if the current user can't activate plugins since previous pageload
393
  if ( ! current_user_can( 'activate_plugins' ) ) {
394
  return;
395
  }
396
 
397
- // Cannot use bbp_get_current_user_id() here, during activation process
398
  $user_id = get_current_user_id();
399
 
400
  // Get the current blog ID, to know if they should be promoted here
163
  bbp_version_updater();
164
  }
165
 
166
+ /**
167
+ * Runs when a new site is created in a multisite network, and bbPress is active
168
+ * on that site (hooked to `bbp_new_site`)
169
+ *
170
+ * @since 2.6.0 bbPress (r6779)
171
+ */
172
+ function bbp_setup_new_site( $site_id = 0 ) {
173
+
174
+ // Look for initial content
175
+ $created = is_multisite()
176
+ ? get_blog_option( $site_id, '_bbp_flag_initial_content', false )
177
+ : get_option( '_bbp_flag_initial_content', false );
178
+
179
+ // Maybe create the initial content
180
+ if ( ! empty( $created ) ) {
181
+ bbp_create_initial_content();
182
+
183
+ // Flag initial content as created
184
+ is_multisite()
185
+ ? update_blog_option( $site_id, '_bbp_flag_initial_content', true )
186
+ : update_option( '_bbp_flag_initial_content', true );
187
+ }
188
+ }
189
+
190
  /**
191
  * Create a default forum, topic, and reply
192
  *
196
  */
197
  function bbp_create_initial_content( $args = array() ) {
198
 
199
+ // Cannot use bbp_get_current_user_id() during activation process
200
+ $user_id = get_current_user_id();
201
 
202
  // Parse arguments against default values
203
  $r = bbp_parse_args( $args, array(
204
  'forum_author' => $user_id,
205
  'forum_parent' => 0,
206
  'forum_status' => 'publish',
207
+ 'forum_title' => esc_html__( 'General', 'bbpress' ),
208
+ 'forum_content' => esc_html__( 'General Discussion', 'bbpress' ),
209
 
210
  'topic_author' => $user_id,
211
+ 'topic_title' => esc_html__( 'Hello World!', 'bbpress' ),
212
+ 'topic_content' => esc_html__( 'This is the very first topic in these forums.', 'bbpress' ),
213
 
214
  'reply_author' => $user_id,
215
+ 'reply_content' => esc_html__( 'And this is the very first reply.', 'bbpress' ),
216
  ), 'create_initial_content' );
217
 
218
  // Use the same time for each post
396
  return;
397
  }
398
 
399
+ // Add the redirect trigger
400
+ update_user_option( get_current_user_id(), '_bbp_activation_redirect', true );
401
+ }
402
+
403
+ /**
404
+ * Redirect user to "What's New" page on activation
405
+ *
406
+ * @since 2.2.0 bbPress (r4389)
407
+ *
408
+ * @internal Used internally to redirect bbPress to the about page on activation
409
+ *
410
+ * @return If no transient, or in network admin, or is bulk activation
411
+ */
412
+ function bbp_do_activation_redirect() {
413
+
414
+ // Bail if no redirect trigger
415
+ if ( ! get_user_option( '_bbp_activation_redirect' ) ) {
416
+ return;
417
+ }
418
+
419
+ // Delete the redirect trigger
420
+ delete_user_option( get_current_user_id(), '_bbp_activation_redirect' );
421
+
422
+ // Bail if activating from network, or bulk
423
+ if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
424
+ return;
425
+ }
426
+
427
+ // Bail if the current user cannot see the about page
428
+ if ( ! current_user_can( 'bbp_about_page' ) ) {
429
+ return;
430
+ }
431
+
432
+ // Redirect to bbPress about page
433
+ bbp_redirect( add_query_arg( array( 'page' => 'bbp-about' ), admin_url( 'index.php' ) ) );
434
  }
435
 
436
  /**
446
  */
447
  function bbp_make_current_user_keymaster() {
448
 
449
+ // Catch all, to prevent premature user initialization
450
+ if ( ! did_action( 'set_current_user' ) ) {
451
+ return;
452
+ }
453
+
454
+ // Bail if not logged in or already a member of this site
455
+ if ( ! is_user_logged_in() ) {
456
+ return;
457
+ }
458
+
459
  // Bail if the current user can't activate plugins since previous pageload
460
  if ( ! current_user_can( 'activate_plugins' ) ) {
461
  return;
462
  }
463
 
464
+ // Cannot use bbp_get_current_user_id() during activation process
465
  $user_id = get_current_user_id();
466
 
467
  // Get the current blog ID, to know if they should be promoted here
includes/extend/akismet.php CHANGED
@@ -406,7 +406,7 @@ class BBP_Akismet {
406
  // Keys to ignore
407
  $ignore = array( 'HTTP_COOKIE', 'HTTP_COOKIE2', 'PHP_AUTH_PW' );
408
 
409
- // Loop through _SERVER args and remove whitelisted keys
410
  foreach ( $_SERVER as $key => $value ) {
411
 
412
  // Key should not be ignored
@@ -508,9 +508,6 @@ class BBP_Akismet {
508
 
509
  // If post_status is the spam status, which isn't expected, leave a note
510
  if ( bbp_get_spam_status_id() === $_post->post_status ) {
511
-
512
- // @todo Use wp_blacklist_check()
513
-
514
  $this->update_post_history( $post_id, sprintf( esc_html__( 'Post status was changed to %s', 'bbpress' ), $_post->post_status ), 'status-changed-' . $_post->post_status );
515
  }
516
 
@@ -680,7 +677,8 @@ class BBP_Akismet {
680
  *
681
  * @since 2.3.0 bbPress (r4812)
682
  *
683
- * @param type $user_id
 
684
  * @return boolean
685
  */
686
  private function get_user_roles( $user_id = 0 ) {
406
  // Keys to ignore
407
  $ignore = array( 'HTTP_COOKIE', 'HTTP_COOKIE2', 'PHP_AUTH_PW' );
408
 
409
+ // Loop through _SERVER args and remove allowed keys
410
  foreach ( $_SERVER as $key => $value ) {
411
 
412
  // Key should not be ignored
508
 
509
  // If post_status is the spam status, which isn't expected, leave a note
510
  if ( bbp_get_spam_status_id() === $_post->post_status ) {
 
 
 
511
  $this->update_post_history( $post_id, sprintf( esc_html__( 'Post status was changed to %s', 'bbpress' ), $_post->post_status ), 'status-changed-' . $_post->post_status );
512
  }
513
 
677
  *
678
  * @since 2.3.0 bbPress (r4812)
679
  *
680
+ * @param int $user_id
681
+ *
682
  * @return boolean
683
  */
684
  private function get_user_roles( $user_id = 0 ) {
includes/extend/buddypress/activity.php CHANGED
@@ -242,8 +242,9 @@ class BBP_BuddyPress_Activity {
242
  *
243
  * @since 2.0.0 bbPress (r3395)
244
  *
245
- * @param type $args Array of arguments for bp_activity_add()
246
- * @return type Activity ID if successful, false if not
 
247
  */
248
  private function record_activity( $args = array() ) {
249
 
@@ -271,8 +272,9 @@ class BBP_BuddyPress_Activity {
271
  *
272
  * @since 2.0.0 bbPress (r3395)
273
  *
274
- * @param type $args Array of arguments for bp_activity_add()
275
- * @return type Activity ID if successful, false if not
 
276
  */
277
  public function delete_activity( $args = array() ) {
278
 
@@ -333,7 +335,7 @@ class BBP_BuddyPress_Activity {
333
  }
334
 
335
  // Check if blog & forum activity stream commenting is off
336
- if ( ( false === $activities_template->disable_blogforum_replies ) || (int) $activities_template->disable_blogforum_replies ) {
337
 
338
  // Get the current action name
339
  $action_name = bp_get_activity_action_name();
242
  *
243
  * @since 2.0.0 bbPress (r3395)
244
  *
245
+ * @param array $args Array of arguments for bp_activity_add()
246
+ *
247
+ * @return int Activity ID if successful, false if not
248
  */
249
  private function record_activity( $args = array() ) {
250
 
272
  *
273
  * @since 2.0.0 bbPress (r3395)
274
  *
275
+ * @param array $args Array of arguments for bp_activity_add()
276
+ *
277
+ * @return int Activity ID if successful, false if not
278
  */
279
  public function delete_activity( $args = array() ) {
280
 
335
  }
336
 
337
  // Check if blog & forum activity stream commenting is off
338
+ if ( ! empty( $activities_template->disable_blogforum_replies ) ) {
339
 
340
  // Get the current action name
341
  $action_name = bp_get_activity_action_name();
includes/extend/buddypress/functions.php CHANGED
@@ -370,8 +370,9 @@ function bbp_maybe_create_group_forum_root() {
370
  /**
371
  * Get forum ID's for a group
372
  *
373
- * @param type $group_id
374
  * @since 2.1.0 bbPress (r3653)
 
 
375
  */
376
  function bbp_get_group_forum_ids( $group_id = 0 ) {
377
 
@@ -398,8 +399,9 @@ function bbp_get_group_forum_ids( $group_id = 0 ) {
398
  /**
399
  * Get group ID's for a forum
400
  *
401
- * @param type $forum_id
402
  * @since 2.1.0 bbPress (r3653)
 
 
403
  */
404
  function bbp_get_forum_group_ids( $forum_id = 0 ) {
405
 
@@ -426,8 +428,9 @@ function bbp_get_forum_group_ids( $forum_id = 0 ) {
426
  /**
427
  * Get forum ID's for a group
428
  *
429
- * @param type $group_id
430
  * @since 2.1.0 bbPress (r3653)
 
 
431
  */
432
  function bbp_update_group_forum_ids( $group_id = 0, $forum_ids = array() ) {
433
 
@@ -446,8 +449,9 @@ function bbp_update_group_forum_ids( $group_id = 0, $forum_ids = array() ) {
446
  /**
447
  * Update group ID's for a forum
448
  *
449
- * @param type $forum_id
450
  * @since 2.1.0 bbPress (r3653)
 
 
451
  */
452
  function bbp_update_forum_group_ids( $forum_id = 0, $group_ids = array() ) {
453
  $forum_id = bbp_get_forum_id( $forum_id );
@@ -462,8 +466,9 @@ function bbp_update_forum_group_ids( $forum_id = 0, $group_ids = array() ) {
462
  /**
463
  * Add a group to a forum
464
  *
465
- * @param type $group_id
466
  * @since 2.1.0 bbPress (r3653)
 
 
467
  */
468
  function bbp_add_group_id_to_forum( $forum_id = 0, $group_id = 0 ) {
469
 
@@ -488,8 +493,9 @@ function bbp_add_group_id_to_forum( $forum_id = 0, $group_id = 0 ) {
488
  /**
489
  * Remove a forum from a group
490
  *
491
- * @param type $group_id
492
  * @since 2.1.0 bbPress (r3653)
 
 
493
  */
494
  function bbp_add_forum_id_to_group( $group_id = 0, $forum_id = 0 ) {
495
 
@@ -514,8 +520,9 @@ function bbp_add_forum_id_to_group( $group_id = 0, $forum_id = 0 ) {
514
  /**
515
  * Remove a group from a forum
516
  *
517
- * @param type $group_id
518
  * @since 2.1.0 bbPress (r3653)
 
 
519
  */
520
  function bbp_remove_group_id_from_forum( $forum_id = 0, $group_id = 0 ) {
521
 
@@ -540,8 +547,9 @@ function bbp_remove_group_id_from_forum( $forum_id = 0, $group_id = 0 ) {
540
  /**
541
  * Remove a forum from a group
542
  *
543
- * @param type $group_id
544
  * @since 2.1.0 bbPress (r3653)
 
 
545
  */
546
  function bbp_remove_forum_id_from_group( $group_id = 0, $forum_id = 0 ) {
547
 
@@ -566,8 +574,9 @@ function bbp_remove_forum_id_from_group( $group_id = 0, $forum_id = 0 ) {
566
  /**
567
  * Remove a group from all forums
568
  *
569
- * @param type $group_id
570
  * @since 2.1.0 bbPress (r3653)
 
 
571
  */
572
  function bbp_remove_group_id_from_all_forums( $group_id = 0 ) {
573
 
@@ -588,8 +597,9 @@ function bbp_remove_group_id_from_all_forums( $group_id = 0 ) {
588
  /**
589
  * Remove a forum from all groups
590
  *
591
- * @param type $forum_id
592
  * @since 2.1.0 bbPress (r3653)
 
 
593
  */
594
  function bbp_remove_forum_id_from_all_groups( $forum_id = 0 ) {
595
 
@@ -766,8 +776,8 @@ function bbp_get_activity_actions() {
766
 
767
  // Filter & return
768
  return (array) apply_filters( 'bbp_get_activity_actions', array(
769
- 'topic' => __( '%1$s started the topic %2$s in the forum %3$s', 'bbpress' ),
770
- 'reply' => __( '%1$s replied to the topic %2$s in the forum %3$s', 'bbpress' )
771
  ) );
772
  }
773
 
@@ -793,18 +803,10 @@ function bbp_format_activity_action_new_post( $type = '', $action = '', $activit
793
  return $action;
794
  }
795
 
796
- /**
797
- * Overrides the formatted activity action new activity string.
798
- *
799
- * @since 2.6.0 bbPress (r6370)
800
- *
801
- * @param string $activity_action Activity action string value
802
- * @param string $type The type of post. Expects `topic` or `reply`.
803
- * @param string $action The current action string.
804
- * @param BP_Activity_Activity $activity The BuddyPress activity object.
805
- */
806
- if ( $pre = apply_filters( 'bbp_pre_format_activity_action_new_post', false, $type, $action, $activity ) ) {
807
- return $pre;
808
  }
809
 
810
  // Groups component
@@ -868,7 +870,7 @@ function bbp_format_activity_action_new_post( $type = '', $action = '', $activit
868
  * @return string The formatted activity action.
869
  */
870
  function bbp_format_activity_action_new_topic( $action, $activity ) {
871
- $action = bbp_format_activity_action_new_post( 'topic', $action, $activity );
872
 
873
  /**
874
  * Filters the formatted activity action new topic string.
@@ -892,7 +894,7 @@ function bbp_format_activity_action_new_topic( $action, $activity ) {
892
  * @return string The formatted activity action
893
  */
894
  function bbp_format_activity_action_new_reply( $action, $activity ) {
895
- $action = bbp_format_activity_action_new_post( 'reply', $action, $activity );
896
 
897
  /**
898
  * Filters the formatted activity action new reply string.
370
  /**
371
  * Get forum ID's for a group
372
  *
 
373
  * @since 2.1.0 bbPress (r3653)
374
+ *
375
+ * @param int $group_id
376
  */
377
  function bbp_get_group_forum_ids( $group_id = 0 ) {
378
 
399
  /**
400
  * Get group ID's for a forum
401
  *
 
402
  * @since 2.1.0 bbPress (r3653)
403
+ *
404
+ * @param int $forum_id
405
  */
406
  function bbp_get_forum_group_ids( $forum_id = 0 ) {
407
 
428
  /**
429
  * Get forum ID's for a group
430
  *
 
431
  * @since 2.1.0 bbPress (r3653)
432
+ *
433
+ * @param int $group_id
434
  */
435
  function bbp_update_group_forum_ids( $group_id = 0, $forum_ids = array() ) {
436
 
449
  /**
450
  * Update group ID's for a forum
451
  *
 
452
  * @since 2.1.0 bbPress (r3653)
453
+ *
454
+ * @param int $forum_id
455
  */
456
  function bbp_update_forum_group_ids( $forum_id = 0, $group_ids = array() ) {
457
  $forum_id = bbp_get_forum_id( $forum_id );
466
  /**
467
  * Add a group to a forum
468
  *
 
469
  * @since 2.1.0 bbPress (r3653)
470
+ *
471
+ * @param int $group_id
472
  */
473
  function bbp_add_group_id_to_forum( $forum_id = 0, $group_id = 0 ) {
474
 
493
  /**
494
  * Remove a forum from a group
495
  *
 
496
  * @since 2.1.0 bbPress (r3653)
497
+ *
498
+ * @param int $group_id
499
  */
500
  function bbp_add_forum_id_to_group( $group_id = 0, $forum_id = 0 ) {
501
 
520
  /**
521
  * Remove a group from a forum
522
  *
 
523
  * @since 2.1.0 bbPress (r3653)
524
+ *
525
+ * @param int $group_id
526
  */
527
  function bbp_remove_group_id_from_forum( $forum_id = 0, $group_id = 0 ) {
528
 
547
  /**
548
  * Remove a forum from a group
549
  *
 
550
  * @since 2.1.0 bbPress (r3653)
551
+ *
552
+ * @param int $group_id
553
  */
554
  function bbp_remove_forum_id_from_group( $group_id = 0, $forum_id = 0 ) {
555
 
574
  /**
575
  * Remove a group from all forums
576
  *
 
577
  * @since 2.1.0 bbPress (r3653)
578
+ *
579
+ * @param int $group_id
580
  */
581
  function bbp_remove_group_id_from_all_forums( $group_id = 0 ) {
582
 
597
  /**
598
  * Remove a forum from all groups
599
  *
 
600
  * @since 2.1.0 bbPress (r3653)
601
+ *
602
+ * @param int $forum_id
603
  */
604
  function bbp_remove_forum_id_from_all_groups( $forum_id = 0 ) {
605
 
776
 
777
  // Filter & return
778
  return (array) apply_filters( 'bbp_get_activity_actions', array(
779
+ 'topic' => esc_html__( '%1$s started the topic %2$s in the forum %3$s', 'bbpress' ),
780
+ 'reply' => esc_html__( '%1$s replied to the topic %2$s in the forum %3$s', 'bbpress' )
781
  ) );
782
  }
783
 
803
  return $action;
804
  }
805
 
806
+ // Bail if intercepted
807
+ $intercept = bbp_maybe_intercept( __FUNCTION__, func_get_args() );
808
+ if ( bbp_is_intercepted( $intercept ) ) {
809
+ return $intercept;
 
 
 
 
 
 
 
 
810
  }
811
 
812
  // Groups component
870
  * @return string The formatted activity action.
871
  */
872
  function bbp_format_activity_action_new_topic( $action, $activity ) {
873
+ $action = bbp_format_activity_action_new_post( bbp_get_topic_post_type(), $action, $activity );
874
 
875
  /**
876
  * Filters the formatted activity action new topic string.
894
  * @return string The formatted activity action
895
  */
896
  function bbp_format_activity_action_new_reply( $action, $activity ) {
897
+ $action = bbp_format_activity_action_new_post( bbp_get_reply_post_type(), $action, $activity );
898
 
899
  /**
900
  * Filters the formatted activity action new reply string.
includes/extend/buddypress/groups.php CHANGED
@@ -37,6 +37,7 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
37
  $this->setup_actions();
38
  $this->setup_filters();
39
  $this->maybe_unset_forum_menu();
 
40
  }
41
 
42
  /**
@@ -47,8 +48,8 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
47
  private function setup_variables() {
48
 
49
  // Component Name
50
- $this->name = __( 'Forum', 'bbpress' );
51
- $this->nav_item_name = __( 'Forum', 'bbpress' );
52
 
53
  // Component slugs (hardcoded to match bbPress 1.x functionality)
54
  $this->slug = 'forum';
@@ -108,12 +109,6 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
108
  */
109
  private function setup_filters() {
110
 
111
- // Ensure bbp_is_single_forum() returns true on group forums.
112
- add_filter( 'bbp_is_single_forum', array( $this, 'is_single_forum' ) );
113
-
114
- // Ensure bbp_is_single_topic() returns true on group forum topics.
115
- add_filter( 'bbp_is_single_topic', array( $this, 'is_single_topic' ) );
116
-
117
  // Group forum pagination
118
  add_filter( 'bbp_topic_pagination', array( $this, 'topic_pagination' ) );
119
  add_filter( 'bbp_replies_pagination', array( $this, 'replies_pagination' ) );
@@ -122,7 +117,7 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
122
  add_filter( 'bbp_new_topic_redirect_to', array( $this, 'new_topic_redirect_to' ), 10, 3 );
123
  add_filter( 'bbp_new_reply_redirect_to', array( $this, 'new_reply_redirect_to' ), 10, 3 );
124
 
125
- // Map forum/topic/replys permalinks to their groups
126
  add_filter( 'bbp_get_forum_permalink', array( $this, 'map_forum_permalink_to_group' ), 10, 2 );
127
  add_filter( 'bbp_get_topic_permalink', array( $this, 'map_topic_permalink_to_group' ), 10, 2 );
128
  add_filter( 'bbp_get_reply_permalink', array( $this, 'map_reply_permalink_to_group' ), 10, 2 );
@@ -141,7 +136,13 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
141
  /** Caps **************************************************************/
142
 
143
  // Only add these filters if inside a group forum
144
- if ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'forum' ) ) {
 
 
 
 
 
 
145
 
146
  // Allow group member to view private/hidden forums
147
  add_filter( 'bbp_map_meta_caps', array( $this, 'map_group_forum_meta_caps' ), 10, 4 );
@@ -152,6 +153,16 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
152
  }
153
  }
154
 
 
 
 
 
 
 
 
 
 
 
155
  /**
156
  * Ensure that bbp_is_single_forum() returns true on group forum pages.
157
  *
@@ -165,10 +176,8 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
165
  public function is_single_forum( $retval = false ) {
166
 
167
  // Additional BuddyPress specific single-forum conditionals
168
- if ( false === $retval ) {
169
- if ( bp_is_group() && bp_is_action_variable( $this->forum_slug, 0 ) ) {
170
- $retval = true;
171
- }
172
  }
173
 
174
  return $retval;
@@ -187,10 +196,8 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
187
  public function is_single_topic( $retval = false ) {
188
 
189
  // Additional BuddyPress specific single-topic conditionals
190
- if ( false === $retval ) {
191
- if ( bp_is_group() && bp_is_action_variable( $this->topic_slug, 0 ) && bp_action_variable( 1 ) ) {
192
- $retval = true;
193
- }
194
  }
195
 
196
  return $retval;
@@ -265,8 +272,7 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
265
  case 'read_private_forums' :
266
  if ( bbp_group_is_banned() ) {
267
  $caps = array( 'do_not_allow' );
268
-
269
- } else if ( bbp_group_is_member() || bbp_group_is_mod() || bbp_group_is_admin() ) {
270
  $caps = array( 'participate' );
271
  }
272
  break;
@@ -533,7 +539,7 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
533
  <p><?php esc_html_e( 'Create a discussion forum to allow members of this group to communicate in a structured, bulletin-board style fashion.', 'bbpress' ); ?></p>
534
 
535
  <div class="checkbox">
536
- <label><input type="checkbox" name="bbp-create-group-forum" id="bbp-create-group-forum" value="1"<?php checked( $checked ); ?> /> <?php esc_html_e( 'Yes. I want this group to have a forum.', 'bbpress' ); ?></label>
537
  </div>
538
 
539
  <?php
@@ -649,8 +655,9 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
649
  *
650
  * @since 2.1.0 bbPress (r3653)
651
  *
652
- * @param type $forum_args
653
- * @return if no forum_id is available
 
654
  */
655
  public function new_forum( $forum_args = array() ) {
656
 
@@ -672,8 +679,9 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
672
  *
673
  * @since 2.1.0 bbPress (r3653)
674
  *
675
- * @param type $forum_args
676
- * @return if no forum_id is available
 
677
  */
678
  public function remove_forum( $forum_args = array() ) {
679
 
@@ -1195,11 +1203,6 @@ class BBP_Forums_Group_Extension extends BP_Group_Extension {
1195
  */
1196
  public function form_permissions( $retval = false ) {
1197
 
1198
- // Bail if not a group
1199
- if ( ! bp_is_group() ) {
1200
- return $retval;
1201
- }
1202
-
1203
  // Bail if user is not logged in
1204
  if ( ! is_user_logged_in() ) {
1205
  return $retval;
37
  $this->setup_actions();
38
  $this->setup_filters();
39
  $this->maybe_unset_forum_menu();
40
+ $this->fully_loaded();
41
  }
42
 
43
  /**
48
  private function setup_variables() {
49
 
50
  // Component Name
51
+ $this->name = esc_html__( 'Forum', 'bbpress' );
52
+ $this->nav_item_name = esc_html__( 'Forum', 'bbpress' );
53
 
54
  // Component slugs (hardcoded to match bbPress 1.x functionality)
55
  $this->slug = 'forum';
109
  */
110
  private function setup_filters() {
111
 
 
 
 
 
 
 
112
  // Group forum pagination
113
  add_filter( 'bbp_topic_pagination', array( $this, 'topic_pagination' ) );
114
  add_filter( 'bbp_replies_pagination', array( $this, 'replies_pagination' ) );
117
  add_filter( 'bbp_new_topic_redirect_to', array( $this, 'new_topic_redirect_to' ), 10, 3 );
118
  add_filter( 'bbp_new_reply_redirect_to', array( $this, 'new_reply_redirect_to' ), 10, 3 );
119
 
120
+ // Map forum/topic/reply permalinks to their groups
121
  add_filter( 'bbp_get_forum_permalink', array( $this, 'map_forum_permalink_to_group' ), 10, 2 );
122
  add_filter( 'bbp_get_topic_permalink', array( $this, 'map_topic_permalink_to_group' ), 10, 2 );
123
  add_filter( 'bbp_get_reply_permalink', array( $this, 'map_reply_permalink_to_group' ), 10, 2 );
136
  /** Caps **************************************************************/
137
 
138
  // Only add these filters if inside a group forum
139
+ if ( bp_is_single_item() && bp_is_group() && bp_is_current_action( $this->slug ) ) {
140
+
141
+ // Ensure bbp_is_single_forum() returns true on group forums.
142
+ add_filter( 'bbp_is_single_forum', array( $this, 'is_single_forum' ) );
143
+
144
+ // Ensure bbp_is_single_topic() returns true on group forum topics.
145
+ add_filter( 'bbp_is_single_topic', array( $this, 'is_single_topic' ) );
146
 
147
  // Allow group member to view private/hidden forums
148
  add_filter( 'bbp_map_meta_caps', array( $this, 'map_group_forum_meta_caps' ), 10, 4 );
153
  }
154
  }
155
 
156
+ /**
157
+ * Allow the variables, actions, and filters to be modified by third party
158
+ * plugins and themes.
159
+ *
160
+ * @since 2.6.0 bbPress (r6808)
161
+ */
162
+ private function fully_loaded() {
163
+ do_action_ref_array( 'bbp_buddypress_groups_loaded', array( $this ) );
164
+ }
165
+
166
  /**
167
  * Ensure that bbp_is_single_forum() returns true on group forum pages.
168
  *
176
  public function is_single_forum( $retval = false ) {
177
 
178
  // Additional BuddyPress specific single-forum conditionals
179
+ if ( ( false === $retval ) && ! bp_is_action_variable( $this->topic_slug, 0 ) ) {
180
+ $retval = true;
 
 
181
  }
182
 
183
  return $retval;
196
  public function is_single_topic( $retval = false ) {
197
 
198
  // Additional BuddyPress specific single-topic conditionals
199
+ if ( ( false === $retval ) && bp_is_action_variable( $this->topic_slug, 0 ) && bp_action_variable( 1 ) ) {
200
+ $retval = true;
 
 
201
  }
202
 
203
  return $retval;
272
  case 'read_private_forums' :
273
  if ( bbp_group_is_banned() ) {
274
  $caps = array( 'do_not_allow' );
275
+ } elseif ( bbp_group_is_member() || bbp_group_is_mod() || bbp_group_is_admin() ) {
 
276
  $caps = array( 'participate' );
277
  }
278
  break;
539
  <p><?php esc_html_e( 'Create a discussion forum to allow members of this group to communicate in a structured, bulletin-board style fashion.', 'bbpress' ); ?></p>
540
 
541
  <div class="checkbox">
542
+ <label for="bbp-create-group-forum"><input type="checkbox" name="bbp-create-group-forum" id="bbp-create-group-forum" value="1"<?php checked( $checked ); ?> /> <?php esc_html_e( 'Yes. I want this group to have a forum.', 'bbpress' ); ?></label>
543
  </div>
544
 
545
  <?php
655
  *
656
  * @since 2.1.0 bbPress (r3653)
657
  *
658
+ * @param array $forum_args
659
+ *
660
+ * @return void if no forum_id is available
661
  */
662
  public function new_forum( $forum_args = array() ) {
663
 
679
  *
680
  * @since 2.1.0 bbPress (r3653)
681
  *
682
+ * @param array $forum_args
683
+ *
684
+ * @return void if no forum_id is available
685
  */
686
  public function remove_forum( $forum_args = array() ) {
687
 
1203
  */
1204
  public function form_permissions( $retval = false ) {
1205
 
 
 
 
 
 
1206
  // Bail if user is not logged in
1207
  if ( ! is_user_logged_in() ) {
1208
  return $retval;
includes/extend/buddypress/loader.php CHANGED
@@ -39,7 +39,7 @@ class BBP_Forums_Component extends BP_Component {
39
  public function __construct() {
40
  parent::start(
41
  'forums',
42
- __( 'Forums', 'bbpress' ),
43
  bbpress()->includes_dir . 'extend/buddypress/'
44
  );
45
  $this->includes();
@@ -74,7 +74,19 @@ class BBP_Forums_Component extends BP_Component {
74
  $includes[] = 'groups.php';
75
  }
76
 
77
- parent::includes( $includes );
 
 
 
 
 
 
 
 
 
 
 
 
78
  }
79
 
80
  /**
@@ -104,7 +116,7 @@ class BBP_Forums_Component extends BP_Component {
104
  'slug' => BP_FORUMS_SLUG,
105
  'root_slug' => isset( $bp->pages->forums->slug ) ? $bp->pages->forums->slug : BP_FORUMS_SLUG,
106
  'has_directory' => false,
107
- 'search_string' => __( 'Search Forums...', 'bbpress' ),
108
  );
109
 
110
  parent::setup_globals( $args );
@@ -174,7 +186,7 @@ class BBP_Forums_Component extends BP_Component {
174
 
175
  // Add 'Forums' to the main navigation
176
  $main_nav = array(
177
- 'name' => __( 'Forums', 'bbpress' ),
178
  'slug' => $this->slug,
179
  'position' => 80,
180
  'screen_function' => 'bbp_member_forums_screen_topics',
@@ -196,7 +208,7 @@ class BBP_Forums_Component extends BP_Component {
196
 
197
  // Topics started
198
  $sub_nav[] = array(
199
- 'name' => __( 'Topics Started', 'bbpress' ),
200
  'slug' => bbp_get_topic_archive_slug(),
201
  'parent_url' => $forums_link,
202
  'parent_slug' => $this->slug,
@@ -207,7 +219,7 @@ class BBP_Forums_Component extends BP_Component {
207
 
208
  // Replies to topics
209
  $sub_nav[] = array(
210
- 'name' => __( 'Replies Created', 'bbpress' ),
211
  'slug' => bbp_get_reply_archive_slug(),
212
  'parent_url' => $forums_link,
213
  'parent_slug' => $this->slug,
@@ -219,7 +231,7 @@ class BBP_Forums_Component extends BP_Component {
219
  // Engagements
220
  if ( bbp_is_engagements_active() ) {
221
  $sub_nav[] = array(
222
- 'name' => __( 'Engagements', 'bbpress' ),
223
  'slug' => bbp_get_user_engagements_slug(),
224
  'parent_url' => $forums_link,
225
  'parent_slug' => $this->slug,
@@ -232,7 +244,7 @@ class BBP_Forums_Component extends BP_Component {
232
  // Favorite topics
233
  if ( bbp_is_favorites_active() ){
234
  $sub_nav[] = array(
235
- 'name' => __( 'Favorites', 'bbpress' ),
236
  'slug' => bbp_get_user_favorites_slug(),
237
  'parent_url' => $forums_link,
238
  'parent_slug' => $this->slug,
@@ -245,7 +257,7 @@ class BBP_Forums_Component extends BP_Component {
245
  // Subscribed topics (my profile only)
246
  if ( bp_is_my_profile() && bbp_is_subscriptions_active() ) {
247
  $sub_nav[] = array(
248
- 'name' => __( 'Subscriptions', 'bbpress' ),
249
  'slug' => bbp_get_user_subscriptions_slug(),
250
  'parent_url' => $forums_link,
251
  'parent_slug' => $this->slug,
@@ -296,7 +308,7 @@ class BBP_Forums_Component extends BP_Component {
296
  $wp_admin_nav[] = array(
297
  'parent' => buddypress()->my_account_menu_id,
298
  'id' => 'my-account-' . $this->id,
299
- 'title' => __( 'Forums', 'bbpress' ),
300
  'href' => $my_account_link
301
  );
302
 
@@ -304,7 +316,7 @@ class BBP_Forums_Component extends BP_Component {
304
  $wp_admin_nav[] = array(
305
  'parent' => 'my-account-' . $this->id,
306
  'id' => 'my-account-' . $this->id . '-topics',
307
- 'title' => __( 'Topics Started', 'bbpress' ),
308
  'href' => $my_topics_link
309
  );
310
 
@@ -312,7 +324,7 @@ class BBP_Forums_Component extends BP_Component {
312
  $wp_admin_nav[] = array(
313
  'parent' => 'my-account-' . $this->id,
314
  'id' => 'my-account-' . $this->id . '-replies',
315
- 'title' => __( 'Replies Created', 'bbpress' ),
316
  'href' => $my_replies_link
317
  );
318
 
@@ -321,7 +333,7 @@ class BBP_Forums_Component extends BP_Component {
321
  $wp_admin_nav[] = array(
322
  'parent' => 'my-account-' . $this->id,
323
  'id' => 'my-account-' . $this->id . '-engagements',
324
- 'title' => __( 'Engagements', 'bbpress' ),
325
  'href' => $my_engagements_link
326
  );
327
  }
@@ -331,7 +343,7 @@ class BBP_Forums_Component extends BP_Component {
331
  $wp_admin_nav[] = array(
332
  'parent' => 'my-account-' . $this->id,
333
  'id' => 'my-account-' . $this->id . '-favorites',
334
- 'title' => __( 'Favorite Topics', 'bbpress' ),
335
  'href' => $my_favorites_link
336
  );
337
  }
@@ -341,7 +353,7 @@ class BBP_Forums_Component extends BP_Component {
341
  $wp_admin_nav[] = array(
342
  'parent' => 'my-account-' . $this->id,
343
  'id' => 'my-account-' . $this->id . '-subscriptions',
344
- 'title' => __( 'Subscribed Topics', 'bbpress' ),
345
  'href' => $my_subscriptions_link
346
  );
347
  }
@@ -361,7 +373,7 @@ class BBP_Forums_Component extends BP_Component {
361
  // Adjust title based on view
362
  if ( bp_is_forums_component() ) {
363
  if ( bp_is_my_profile() ) {
364
- $bp->bp_options_title = __( 'Forums', 'bbpress' );
365
  } elseif ( bp_is_user() ) {
366
  $bp->bp_options_avatar = bp_core_fetch_avatar( array(
367
  'item_id' => bp_displayed_user_id(),
39
  public function __construct() {
40
  parent::start(
41
  'forums',
42
+ esc_html__( 'Forums', 'bbpress' ),
43
  bbpress()->includes_dir . 'extend/buddypress/'
44
  );
45
  $this->includes();
74
  $includes[] = 'groups.php';
75
  }
76
 
77
+ // Require files if they exist
78
+ foreach ( $includes as $file ) {
79
+ if ( @is_file( $this->path . $file ) ) {
80
+ require $this->path . $file;
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Hook for plugins to include files, if necessary.
86
+ *
87
+ * @since 2.6.0 bbPress (r3552)
88
+ */
89
+ do_action( "bp_{$this->id}_includes" );
90
  }
91
 
92
  /**
116
  'slug' => BP_FORUMS_SLUG,
117
  'root_slug' => isset( $bp->pages->forums->slug ) ? $bp->pages->forums->slug : BP_FORUMS_SLUG,
118
  'has_directory' => false,
119
+ 'search_string' => esc_html__( 'Search Forums...', 'bbpress' ),
120
  );
121
 
122
  parent::setup_globals( $args );
186
 
187
  // Add 'Forums' to the main navigation
188
  $main_nav = array(
189
+ 'name' => esc_html__( 'Forums', 'bbpress' ),
190
  'slug' => $this->slug,
191
  'position' => 80,
192
  'screen_function' => 'bbp_member_forums_screen_topics',
208
 
209
  // Topics started
210
  $sub_nav[] = array(
211
+ 'name' => esc_html__( 'Topics Started', 'bbpress' ),
212
  'slug' => bbp_get_topic_archive_slug(),
213
  'parent_url' => $forums_link,
214
  'parent_slug' => $this->slug,
219
 
220
  // Replies to topics
221
  $sub_nav[] = array(
222
+ 'name' => esc_html__( 'Replies Created', 'bbpress' ),
223
  'slug' => bbp_get_reply_archive_slug(),
224
  'parent_url' => $forums_link,
225
  'parent_slug' => $this->slug,
231
  // Engagements
232
  if ( bbp_is_engagements_active() ) {
233
  $sub_nav[] = array(
234
+ 'name' => esc_html__( 'Engagements', 'bbpress' ),
235
  'slug' => bbp_get_user_engagements_slug(),
236
  'parent_url' => $forums_link,
237
  'parent_slug' => $this->slug,
244
  // Favorite topics
245
  if ( bbp_is_favorites_active() ){
246
  $sub_nav[] = array(
247
+ 'name' => esc_html__( 'Favorites', 'bbpress' ),
248
  'slug' => bbp_get_user_favorites_slug(),
249
  'parent_url' => $forums_link,
250
  'parent_slug' => $this->slug,
257
  // Subscribed topics (my profile only)
258
  if ( bp_is_my_profile() && bbp_is_subscriptions_active() ) {
259
  $sub_nav[] = array(
260
+ 'name' => esc_html__( 'Subscriptions', 'bbpress' ),
261
  'slug' => bbp_get_user_subscriptions_slug(),
262
  'parent_url' => $forums_link,
263
  'parent_slug' => $this->slug,
308
  $wp_admin_nav[] = array(
309
  'parent' => buddypress()->my_account_menu_id,
310
  'id' => 'my-account-' . $this->id,
311
+ 'title' => esc_html__( 'Forums', 'bbpress' ),
312
  'href' => $my_account_link
313
  );
314
 
316
  $wp_admin_nav[] = array(
317
  'parent' => 'my-account-' . $this->id,
318
  'id' => 'my-account-' . $this->id . '-topics',
319
+ 'title' => esc_html__( 'Topics Started', 'bbpress' ),
320
  'href' => $my_topics_link
321
  );
322
 
324
  $wp_admin_nav[] = array(
325
  'parent' => 'my-account-' . $this->id,
326
  'id' => 'my-account-' . $this->id . '-replies',
327
+ 'title' => esc_html__( 'Replies Created', 'bbpress' ),
328
  'href' => $my_replies_link
329
  );
330
 
333
  $wp_admin_nav[] = array(
334
  'parent' => 'my-account-' . $this->id,
335
  'id' => 'my-account-' . $this->id . '-engagements',
336
+ 'title' => esc_html__( 'Engagements', 'bbpress' ),
337
  'href' => $my_engagements_link
338
  );
339
  }
343
  $wp_admin_nav[] = array(
344
  'parent' => 'my-account-' . $this->id,
345
  'id' => 'my-account-' . $this->id . '-favorites',
346
+ 'title' => esc_html__( 'Favorite Topics', 'bbpress' ),
347
  'href' => $my_favorites_link
348
  );
349
  }
353
  $wp_admin_nav[] = array(
354
  'parent' => 'my-account-' . $this->id,
355
  'id' => 'my-account-' . $this->id . '-subscriptions',
356
+ 'title' => esc_html__( 'Subscribed Topics', 'bbpress' ),
357
  'href' => $my_subscriptions_link
358
  );
359
  }
373
  // Adjust title based on view
374
  if ( bp_is_forums_component() ) {
375
  if ( bp_is_my_profile() ) {
376
+ $bp->bp_options_title = esc_html__( 'Forums', 'bbpress' );
377
  } elseif ( bp_is_user() ) {
378
  $bp->bp_options_avatar = bp_core_fetch_avatar( array(
379
  'item_id' => bp_displayed_user_id(),
includes/extend/buddypress/members.php CHANGED
@@ -30,6 +30,7 @@ class BBP_BuddyPress_Members {
30
  public function __construct() {
31
  $this->setup_actions();
32
  $this->setup_filters();
 
33
  }
34
 
35
  /**
@@ -66,10 +67,22 @@ class BBP_BuddyPress_Members {
66
  * @access private
67
  */
68
  private function setup_filters() {
69
- add_filter( 'bbp_pre_get_user_profile_url', array( $this, 'user_profile_url' ) );
70
- add_filter( 'bbp_pre_get_user_engagements_url', array( $this, 'get_engagements_permalink' ) );
71
- add_filter( 'bbp_get_favorites_permalink', array( $this, 'get_favorites_permalink' ), 10, 2 );
72
- add_filter( 'bbp_get_subscriptions_permalink', array( $this, 'get_subscriptions_permalink' ), 10, 2 );
 
 
 
 
 
 
 
 
 
 
 
 
73
  }
74
 
75
  /** Filters ***************************************************************/
@@ -80,93 +93,63 @@ class BBP_BuddyPress_Members {
80
  * @since 2.0.0 bbPress (r3401)
81
  * @since 2.6.0 bbPress (r6320) Add engagements support
82
  *
83
- * @param string $url
84
  * @param int $user_id
85
- * @param string $user_nicename
86
  * @return string
87
  */
88
- public function user_profile_url( $user_id ) {
89
-
90
- // Do not filter if not on BuddyPress root blog
91
- if ( ! bp_is_root_blog() ) {
92
- return false;
93
- }
94
-
95
- // Define local variable(s)
96
- $profile_url = '';
97
- $component_slug = bbpress()->extend->buddypress->slug;
98
- $profile_url = bp_core_get_user_domain( $user_id );
99
-
100
- // Special handling for forum component
101
- if ( bp_is_current_component( $component_slug ) ) {
102
-
103
- // Empty action or 'topics' action
104
- if ( ! bp_current_action() || bp_is_current_action( bbp_get_topic_archive_slug() ) ) {
105
- $profile_url = $profile_url . $component_slug . '/' . bbp_get_topic_archive_slug();
106
-
107
- // Empty action or 'topics' action
108
- } elseif ( bp_is_current_action( bbp_get_reply_archive_slug() ) ) {
109
- $profile_url = $profile_url . $component_slug . '/' . bbp_get_reply_archive_slug();
110
-
111
- // 'favorites' action
112
- } elseif ( bbp_is_favorites_active() && bp_is_current_action( bbp_get_user_favorites_slug() ) ) {
113
- $profile_url = $this->get_favorites_permalink( '', $user_id );
114
-
115
- // 'subscriptions' action
116
- } elseif ( bbp_is_subscriptions_active() && bp_is_current_action( bbp_get_user_subscriptions_slug() ) ) {
117
- $profile_url = $this->get_subscriptions_permalink( '', $user_id );
118
 
119
- // 'engagements' action
120
- } elseif ( bbp_is_engagements_active() && bp_is_current_action( bbp_get_user_engagements_slug() ) ) {
121
- $profile_url = $this->get_engagements_permalink( $user_id );
122
- }
123
- }
 
 
 
 
 
 
 
124
 
125
- return trailingslashit( $profile_url );
 
 
 
 
 
 
 
 
 
 
126
  }
127
 
128
  /**
129
  * Override bbPress favorites URL with BuddyPress profile URL
130
  *
131
  * @since 2.1.0 bbPress (r3721)
 
132
  *
133
- * @param string $url
134
  * @param int $user_id
135
  * @return string
136
  */
137
- public function get_favorites_permalink( $url, $user_id ) {
138
-
139
- // Do not filter if not on BuddyPress root blog
140
- if ( ! bp_is_root_blog() ) {
141
- return false;
142
- }
143
-
144
- $component_slug = bbpress()->extend->buddypress->slug;
145
- $url = trailingslashit( bp_core_get_user_domain( $user_id ) . $component_slug . '/' . bbp_get_user_favorites_slug() );
146
-
147
- return $url;
148
  }
149
 
150
  /**
151
  * Override bbPress subscriptions URL with BuddyPress profile URL
152
  *
153
  * @since 2.1.0 bbPress (r3721)
 
154
  *
155
- * @param string $url
156
  * @param int $user_id
157
  * @return string
158
  */
159
- public function get_subscriptions_permalink( $url, $user_id ) {
160
-
161
- // Do not filter if not on BuddyPress root blog
162
- if ( ! bp_is_root_blog() ) {
163
- return false;
164
- }
165
-
166
- $component_slug = bbpress()->extend->buddypress->slug;
167
- $url = trailingslashit( bp_core_get_user_domain( $user_id ) . $component_slug . '/' . bbp_get_user_subscriptions_slug() );
168
-
169
- return $url;
170
  }
171
 
172
  /**
@@ -174,21 +157,11 @@ class BBP_BuddyPress_Members {
174
  *
175
  * @since 2.6.0 bbPress (r6320)
176
  *
177
- * @param string $url
178
  * @param int $user_id
179
  * @return string
180
  */
181
- public function get_engagements_permalink( $user_id ) {
182
-
183
- // Do not filter if not on BuddyPress root blog
184
- if ( ! bp_is_root_blog() ) {
185
- return false;
186
- }
187
-
188
- $component_slug = bbpress()->extend->buddypress->slug;
189
- $url = trailingslashit( bp_core_get_user_domain( $user_id ) . $component_slug . '/' . bbp_get_user_engagements_slug() );
190
-
191
- return $url;
192
  }
193
 
194
  /**
@@ -196,7 +169,7 @@ class BBP_BuddyPress_Members {
196
  * pages.
197
  *
198
  * @since 2.3.0 bbPress (r4615)
199
- * @since 2.6.0 bbPress (r6320) Add engagements support
200
  *
201
  * @global WP_Query $wp_query
202
  * @return If not viewing your own profile
@@ -211,8 +184,16 @@ class BBP_BuddyPress_Members {
211
  // Get the main query object
212
  $wp_query = bbp_get_wp_query();
213
 
 
 
 
 
 
 
 
 
214
  // 'favorites' action
215
- if ( bbp_is_favorites_active() && bp_is_current_action( bbp_get_user_favorites_slug() ) ) {
216
  $wp_query->bbp_is_single_user_favs = true;
217
 
218
  // 'subscriptions' action
@@ -224,5 +205,37 @@ class BBP_BuddyPress_Members {
224
  $wp_query->bbp_is_single_user_engagements = true;
225
  }
226
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  }
228
  endif;
30
  public function __construct() {
31
  $this->setup_actions();
32
  $this->setup_filters();
33
+ $this->fully_loaded();
34
  }
35
 
36
  /**
67
  * @access private
68
  */
69
  private function setup_filters() {
70
+ add_filter( 'bbp_pre_get_user_profile_url', array( $this, 'get_user_profile_url' ) );
71
+ add_filter( 'bbp_pre_get_user_topics_created_url', array( $this, 'get_topics_created_url' ) );
72
+ add_filter( 'bbp_pre_get_user_replies_created_url', array( $this, 'get_replies_created_url' ) );
73
+ add_filter( 'bbp_pre_get_user_engagements_url', array( $this, 'get_engagements_permalink' ) );
74
+ add_filter( 'bbp_pre_get_favorites_permalink', array( $this, 'get_favorites_permalink' ) );
75
+ add_filter( 'bbp_pre_get_subscriptions_permalink', array( $this, 'get_subscriptions_permalink' ) );
76
+ }
77
+
78
+ /**
79
+ * Allow the variables, actions, and filters to be modified by third party
80
+ * plugins and themes.
81
+ *
82
+ * @since 2.6.0 bbPress (r6808)
83
+ */
84
+ private function fully_loaded() {
85
+ do_action_ref_array( 'bbp_buddypress_members_loaded', array( $this ) );
86
  }
87
 
88
  /** Filters ***************************************************************/
93
  * @since 2.0.0 bbPress (r3401)
94
  * @since 2.6.0 bbPress (r6320) Add engagements support
95
  *
 
96
  * @param int $user_id
 
97
  * @return string
98
  */
99
+ public function get_user_profile_url( $user_id = 0 ) {
100
+ return $this->get_profile_url( $user_id );
101
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
 
103
+ /**
104
+ * Override bbPress topics created URL with BuddyPress profile URL
105
+ *
106
+ * @since 2.6.0 bbPress (r3721)
107
+ * @since 2.6.0 bbPress (r6803) Use private method
108
+ *
109
+ * @param int $user_id
110
+ * @return string
111
+ */
112
+ public function get_topics_created_url( $user_id = 0 ) {
113
+ return $this->get_profile_url( $user_id, bbp_get_topic_archive_slug() );
114
+ }
115
 
116
+ /**
117
+ * Override bbPress replies created URL with BuddyPress profile URL
118
+ *
119
+ * @since 2.6.0 bbPress (r3721)
120
+ * @since 2.6.0 bbPress (r6803) Use private method
121
+ *
122
+ * @param int $user_id
123
+ * @return string
124
+ */
125
+ public function get_replies_created_url( $user_id = 0 ) {
126
+ return $this->get_profile_url( $user_id, bbp_get_reply_archive_slug() );
127
  }
128
 
129
  /**
130
  * Override bbPress favorites URL with BuddyPress profile URL
131
  *
132
  * @since 2.1.0 bbPress (r3721)
133
+ * @since 2.6.0 bbPress (r6803) Use private method
134
  *
 
135
  * @param int $user_id
136
  * @return string
137
  */
138
+ public function get_favorites_permalink( $user_id = 0 ) {
139
+ return $this->get_profile_url( $user_id, bbp_get_user_favorites_slug() );
 
 
 
 
 
 
 
 
 
140
  }
141
 
142
  /**
143
  * Override bbPress subscriptions URL with BuddyPress profile URL
144
  *
145
  * @since 2.1.0 bbPress (r3721)
146
+ * @since 2.6.0 bbPress (r6803) Use private method
147
  *
 
148
  * @param int $user_id
149
  * @return string
150
  */
151
+ public function get_subscriptions_permalink( $user_id = 0 ) {
152
+ return $this->get_profile_url( $user_id, bbp_get_user_subscriptions_slug() );
 
 
 
 
 
 
 
 
 
153
  }
154
 
155
  /**
157
  *
158
  * @since 2.6.0 bbPress (r6320)
159
  *
 
160
  * @param int $user_id
161
  * @return string
162
  */
163
+ public function get_engagements_permalink( $user_id = 0 ) {
164
+ return $this->get_profile_url( $user_id, bbp_get_user_engagements_slug() );
 
 
 
 
 
 
 
 
 
165
  }
166
 
167
  /**
169
  * pages.
170
  *
171
  * @since 2.3.0 bbPress (r4615)
172
+ * @since 2.6.0 bbPress (r6320) Support all profile sections
173
  *
174
  * @global WP_Query $wp_query
175
  * @return If not viewing your own profile
184
  // Get the main query object
185
  $wp_query = bbp_get_wp_query();
186
 
187
+ // 'topics' action
188
+ if ( bp_is_current_action( bbp_get_topic_archive_slug() ) ) {
189
+ $wp_query->bbp_is_single_user_topics = true;
190
+
191
+ // 'replies' action
192
+ } elseif ( bp_is_current_action( bbp_get_reply_archive_slug() ) ) {
193
+ $wp_query->bbp_is_single_user_replies = true;
194
+
195
  // 'favorites' action
196
+ } elseif ( bbp_is_favorites_active() && bp_is_current_action( bbp_get_user_favorites_slug() ) ) {
197
  $wp_query->bbp_is_single_user_favs = true;
198
 
199
  // 'subscriptions' action
205
  $wp_query->bbp_is_single_user_engagements = true;
206
  }
207
  }
208
+
209
+ /** Private Methods *******************************************************/
210
+
211
+ /**
212
+ * Private method used to concatenate user IDs and slugs into URLs
213
+ *
214
+ * @since 2.6.0 bbPress (r6803)
215
+ *
216
+ * @param int $user_id
217
+ * @param string $slug
218
+ *
219
+ * @return string
220
+ */
221
+ private function get_profile_url( $user_id = 0, $slug = '' ) {
222
+
223
+ // Do not filter if not on BuddyPress root blog
224
+ if ( empty( $user_id ) || ! bp_is_root_blog() ) {
225
+ return false;
226
+ }
227
+
228
+ // Setup profile URL
229
+ $url = array( bp_core_get_user_domain( $user_id ) );
230
+
231
+ // Maybe push slug to end of URL array
232
+ if ( ! empty( $slug ) ) {
233
+ array_push( $url, bbpress()->extend->buddypress->slug );
234
+ array_push( $url, $slug );
235
+ }
236
+
237
+ // Return
238
+ return implode( '', array_map( 'trailingslashit', $url ) );
239
+ }
240
  }
241
  endif;
includes/extend/buddypress/notifications.php CHANGED
@@ -86,14 +86,14 @@ function bbp_format_buddypress_notifications( $content, $item_id, $secondary_ite
86
  // Multiple
87
  if ( $action_item_count > 1 ) {
88
  $filter = 'bbp_multiple_new_subscription_notification';
89
- $text = sprintf( __( 'You have %d new replies', 'bbpress' ), $action_item_count );
90
 
91
  // Single
92
  } else {
93
  $filter = 'bbp_single_new_subscription_notification';
94
  $text = ! empty( $secondary_item_id )
95
- ? sprintf( __( 'You have %d new reply to %2$s from %3$s', 'bbpress' ), $action_item_count, $topic_title, bp_core_get_user_displayname( $secondary_item_id ) )
96
- : sprintf( __( 'You have %d new reply to %s', 'bbpress' ), $action_item_count, $topic_title );
97
  }
98
 
99
  // WordPress Toolbar
@@ -134,7 +134,7 @@ function bbp_buddypress_add_notification( $reply_id = 0, $topic_id = 0, $forum_i
134
  return;
135
  }
136
 
137
- // Get autohr information
138
  $topic_author_id = bbp_get_topic_author_id( $topic_id );
139
  $secondary_item_id = $author_id;
140
 
@@ -146,25 +146,26 @@ function bbp_buddypress_add_notification( $reply_id = 0, $topic_id = 0, $forum_i
146
  // Get some reply information
147
  $args = array(
148
  'user_id' => $topic_author_id,
149
- 'item_id' => $topic_id,
150
  'component_name' => bbp_get_component_name(),
151
  'component_action' => 'bbp_new_reply',
152
  'date_notified' => get_post( $reply_id )->post_date,
153
  );
154
 
155
- // Notify the topic author if not the current reply author
156
- if ( $author_id !== $topic_author_id ) {
157
  $args['secondary_item_id'] = $secondary_item_id ;
158
 
159
  bp_notifications_add_notification( $args );
160
- }
161
 
162
- // Notify the immediate reply author if not the current reply author
163
- if ( ! empty( $reply_to ) && ( $author_id !== $reply_to_item_id ) ) {
164
- $args['secondary_item_id'] = $reply_to_item_id ;
 
165
 
166
  bp_notifications_add_notification( $args );
167
- }
168
  }
169
 
170
  /**
86
  // Multiple
87
  if ( $action_item_count > 1 ) {
88
  $filter = 'bbp_multiple_new_subscription_notification';
89
+ $text = sprintf( esc_html__( 'You have %d new replies', 'bbpress' ), $action_item_count );
90
 
91
  // Single
92
  } else {
93
  $filter = 'bbp_single_new_subscription_notification';
94
  $text = ! empty( $secondary_item_id )
95
+ ? sprintf( esc_html__( 'You have %d new reply to %2$s from %3$s', 'bbpress' ), $action_item_count, $topic_title, bp_core_get_user_displayname( $secondary_item_id ) )
96
+ : sprintf( esc_html__( 'You have %d new reply to %s', 'bbpress' ), $action_item_count, $topic_title );
97
  }
98
 
99
  // WordPress Toolbar
134
  return;
135
  }
136
 
137
+ // Get author information
138
  $topic_author_id = bbp_get_topic_author_id( $topic_id );
139
  $secondary_item_id = $author_id;
140
 
146
  // Get some reply information
147
  $args = array(
148
  'user_id' => $topic_author_id,
149
+ 'item_id' => $reply_id,
150
  'component_name' => bbp_get_component_name(),
151
  'component_action' => 'bbp_new_reply',
152
  'date_notified' => get_post( $reply_id )->post_date,
153
  );
154
 
155
+ // Notify the topic author if not the current reply author
156
+ if ( $author_id !== $topic_author_id ) {
157
  $args['secondary_item_id'] = $secondary_item_id ;
158
 
159
  bp_notifications_add_notification( $args );
160
+ }
161
 
162
+ // Notify the immediate reply author if not the current reply author
163
+ if ( ! empty( $reply_to ) && ( $author_id !== $reply_to_item_id ) ) {
164
+ $args['user_id'] = $reply_to_item_id;
165
+ $args['secondary_item_id'] = $topic_author_id;
166
 
167
  bp_notifications_add_notification( $args );
168
+ }
169
  }
170
 
171
  /**
includes/forums/capabilities.php CHANGED
@@ -67,7 +67,12 @@ function bbp_map_forum_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
67
  // Do some post ID based logic
68
  } else {
69
 
70
- // Get the post
 
 
 
 
 
71
  $_post = get_post( $args[0] );
72
  if ( ! empty( $_post ) ) {
73
 
@@ -107,7 +112,12 @@ function bbp_map_forum_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
107
 
108
  case 'moderate_forum' :
109
 
110
- // Get the post
 
 
 
 
 
111
  $_post = get_post( $args[0] );
112
  if ( ! empty( $_post ) && bbp_allow_forum_mods() ) {
113
 
@@ -150,7 +160,12 @@ function bbp_map_forum_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
150
  // Used everywhere
151
  case 'edit_forum' :
152
 
153
- // Get the post
 
 
 
 
 
154
  $_post = get_post( $args[0] );
155
  if ( ! empty( $_post ) ) {
156
 
@@ -182,7 +197,12 @@ function bbp_map_forum_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
182
  // Allow forum authors to delete forums (for BuddyPress groups, etc)
183
  case 'delete_forum' :
184
 
185
- // Get the post
 
 
 
 
 
186
  $_post = get_post( $args[0] );
187
  if ( ! empty( $_post ) ) {
188
 
67
  // Do some post ID based logic
68
  } else {
69
 
70
+ // Bail if no post ID
71
+ if ( empty( $args[0] ) ) {
72
+ return $caps;
73
+ }
74
+
75
+ // Get the post.
76
  $_post = get_post( $args[0] );
77
  if ( ! empty( $_post ) ) {
78
 
112
 
113
  case 'moderate_forum' :
114
 
115
+ // Bail if no post ID
116
+ if ( empty( $args[0] ) ) {
117
+ return $caps;
118
+ }
119
+
120
+ // Get the post.
121
  $_post = get_post( $args[0] );
122
  if ( ! empty( $_post ) && bbp_allow_forum_mods() ) {
123
 
160
  // Used everywhere
161
  case 'edit_forum' :
162
 
163
+ // Bail if no post ID
164
+ if ( empty( $args[0] ) ) {
165
+ return $caps;
166
+ }
167
+
168
+ // Get the post.
169
  $_post = get_post( $args[0] );
170
  if ( ! empty( $_post ) ) {
171
 
197
  // Allow forum authors to delete forums (for BuddyPress groups, etc)
198
  case 'delete_forum' :
199
 
200
+ // Bail if no post ID
201
+ if ( empty( $args[0] ) ) {
202
+ return $caps;
203
+ }
204
+
205
+ // Get the post.
206
  $_post = get_post( $args[0] );
207
  if ( ! empty( $_post ) ) {
208
 
includes/forums/functions.php CHANGED
@@ -74,7 +74,8 @@ function bbp_insert_forum( $forum_data = array(), $forum_meta = array() ) {
74
 
75
  // Update the forum and hierarchy
76
  bbp_update_forum( array(
77
- 'forum_id' => $forum_id
 
78
  ) );
79
 
80
  // Maybe make private
@@ -99,6 +100,9 @@ function bbp_insert_forum( $forum_data = array(), $forum_meta = array() ) {
99
  */
100
  do_action( 'bbp_insert_forum', (int) $forum_id );
101
 
 
 
 
102
  // Return forum_id
103
  return $forum_id;
104
  }
@@ -161,6 +165,11 @@ function bbp_new_forum_handler( $action = '' ) {
161
  bbp_add_error( 'bbp_forum_title', __( '<strong>ERROR</strong>: Your forum needs a title.', 'bbpress' ) );
162
  }
163
 
 
 
 
 
 
164
  /** Forum Content *********************************************************/
165
 
166
  if ( ! empty( $_POST['bbp_forum_content'] ) ) {
@@ -225,10 +234,10 @@ function bbp_new_forum_handler( $action = '' ) {
225
  bbp_add_error( 'bbp_forum_duplicate', __( '<strong>ERROR</strong>: This forum already exists.', 'bbpress' ) );
226
  }
227
 
228
- /** Forum Blacklist *******************************************************/
229
 
230
- if ( ! bbp_check_for_blacklist( $anonymous_data, $forum_author, $forum_title, $forum_content ) ) {
231
- bbp_add_error( 'bbp_forum_blacklist', __( '<strong>ERROR</strong>: Your forum cannot be created at this time.', 'bbpress' ) );
232
  }
233
 
234
  /** Forum Moderation ******************************************************/
@@ -445,6 +454,11 @@ function bbp_edit_forum_handler( $action = '' ) {
445
  bbp_add_error( 'bbp_edit_forum_title', __( '<strong>ERROR</strong>: Your forum needs a title.', 'bbpress' ) );
446
  }
447
 
 
 
 
 
 
448
  /** Forum Content *********************************************************/
449
 
450
  if ( ! empty( $_POST['bbp_forum_content'] ) ) {
@@ -459,10 +473,10 @@ function bbp_edit_forum_handler( $action = '' ) {
459
  bbp_add_error( 'bbp_edit_forum_content', __( '<strong>ERROR</strong>: Your forum description cannot be empty.', 'bbpress' ) );
460
  }
461
 
462
- /** Forum Blacklist *******************************************************/
463
 
464
- if ( ! bbp_check_for_blacklist( $anonymous_data, bbp_get_forum_author_id( $forum_id ), $forum_title, $forum_content ) ) {
465
- bbp_add_error( 'bbp_forum_blacklist', __( '<strong>ERROR</strong>: Your forum cannot be edited at this time.', 'bbpress' ) );
466
  }
467
 
468
  /** Forum Moderation ******************************************************/
@@ -1356,8 +1370,7 @@ function bbp_approved_unapproved_topic_update_forum_reply_count( $topic_id = 0 )
1356
  }
1357
 
1358
  // Get the topic's replies.
1359
- $replies = bbp_get_public_child_ids( $topic_id, bbp_get_reply_post_type() );
1360
- $count = count( $replies );
1361
 
1362
  // If we're unapproving, set count to negative.
1363
  if ( 'bbp_unapproved_topic' === current_filter() ) {
@@ -1582,8 +1595,9 @@ function bbp_update_forum_last_active_time( $forum_id = 0, $new_time = '' ) {
1582
  function bbp_update_forum_subforum_count( $forum_id = 0, $subforums = 0 ) {
1583
  $forum_id = bbp_get_forum_id( $forum_id );
1584
 
 
1585
  if ( empty( $subforums ) ) {
1586
- $subforums = count( bbp_forum_query_subforum_ids( $forum_id ) );
1587
  }
1588
 
1589
  $subforums = (int) $subforums;
@@ -1618,7 +1632,7 @@ function bbp_update_forum_topic_count( $forum_id = 0 ) {
1618
  }
1619
 
1620
  // Get total topics for this forum
1621
- $topics = (int) count( bbp_forum_query_topic_ids( $forum_id ) );
1622
 
1623
  // Calculate total topics in this forum
1624
  $total_topics = (int) ( $topics + $children_topic_count );
@@ -1718,23 +1732,7 @@ function bbp_update_forum_reply_count( $forum_id = 0 ) {
1718
  $reply_count = 0;
1719
  $topic_ids = bbp_forum_query_topic_ids( $forum_id );
1720
  if ( ! empty( $topic_ids ) ) {
1721
- $query = new WP_Query( array(
1722
- 'fields' => 'ids',
1723
- 'post_parent__in' => $topic_ids,
1724
- 'post_status' => bbp_get_public_status_id(),
1725
- 'post_type' => bbp_get_reply_post_type(),
1726
- 'posts_per_page' => -1,
1727
-
1728
- // Performance
1729
- 'nopaging' => true,
1730
- 'suppress_filters' => true,
1731
- 'update_post_term_cache' => false,
1732
- 'update_post_meta_cache' => false,
1733
- 'ignore_sticky_posts' => true,
1734
- 'no_found_rows' => true
1735
- ) );
1736
- $reply_count = ! empty( $query->posts ) ? count( $query->posts ) : 0;
1737
- unset( $query );
1738
  }
1739
 
1740
  // Calculate total replies in this forum
@@ -1777,6 +1775,9 @@ function bbp_update_forum( $args = array() ) {
1777
  'last_active_status' => bbp_get_public_status_id()
1778
  ), 'update_forum' );
1779
 
 
 
 
1780
  // Last topic and reply ID's
1781
  bbp_update_forum_last_topic_id( $r['forum_id'], $r['last_topic_id'] );
1782
  bbp_update_forum_last_reply_id( $r['forum_id'], $r['last_reply_id'] );
@@ -1810,6 +1811,9 @@ function bbp_update_forum( $args = array() ) {
1810
  'post_parent' => get_post_field( 'post_parent', $r['post_parent'] )
1811
  ) );
1812
  }
 
 
 
1813
  }
1814
 
1815
  /** Helpers *******************************************************************/
@@ -2048,7 +2052,7 @@ function bbp_pre_get_posts_normalize_forum_visibility( $posts_query = null ) {
2048
  $posts_query->set( 'post__not_in', $not_in );
2049
 
2050
  // Some other post type besides Forums, Topics, or Replies
2051
- } elseif ( ! array_diff( $post_types, get_post_types( array( 'source' => 'bbpress' ) ) ) ) {
2052
 
2053
  // Get forums to exclude
2054
  $forum_ids = bbp_exclude_forum_ids( 'meta_query' );
@@ -2368,7 +2372,7 @@ function bbp_trash_forum_topics( $forum_id = 0 ) {
2368
  }
2369
 
2370
  /**
2371
- * Trash all topics inside a forum
2372
  *
2373
  * @since 2.1.0 bbPress (r3668)
2374
  *
74
 
75
  // Update the forum and hierarchy
76
  bbp_update_forum( array(
77
+ 'forum_id' => $forum_id,
78
+ 'post_parent' => $forum_data['post_parent']
79
  ) );
80
 
81
  // Maybe make private
100
  */
101
  do_action( 'bbp_insert_forum', (int) $forum_id );
102
 
103
+ // Bump the last changed cache
104
+ wp_cache_set( 'last_changed', microtime(), 'bbpress_posts' );
105
+
106
  // Return forum_id
107
  return $forum_id;
108
  }
165
  bbp_add_error( 'bbp_forum_title', __( '<strong>ERROR</strong>: Your forum needs a title.', 'bbpress' ) );
166
  }
167
 
168
+ // Title too long
169
+ if ( bbp_is_title_too_long( $forum_title ) ) {
170
+ bbp_add_error( 'bbp_forum_title', __( '<strong>ERROR</strong>: Your title is too long.', 'bbpress' ) );
171
+ }
172
+
173
  /** Forum Content *********************************************************/
174
 
175
  if ( ! empty( $_POST['bbp_forum_content'] ) ) {
234
  bbp_add_error( 'bbp_forum_duplicate', __( '<strong>ERROR</strong>: This forum already exists.', 'bbpress' ) );
235
  }
236
 
237
+ /** Forum Bad Words *******************************************************/
238
 
239
+ if ( ! bbp_check_for_moderation( $anonymous_data, $forum_author, $forum_title, $forum_content, true ) ) {
240
+ bbp_add_error( 'bbp_forum_moderation', __( '<strong>ERROR</strong>: Your forum cannot be created at this time.', 'bbpress' ) );
241
  }
242
 
243
  /** Forum Moderation ******************************************************/
454
  bbp_add_error( 'bbp_edit_forum_title', __( '<strong>ERROR</strong>: Your forum needs a title.', 'bbpress' ) );
455
  }
456
 
457
+ // Title too long
458
+ if ( bbp_is_title_too_long( $forum_title ) ) {
459
+ bbp_add_error( 'bbp_forum_title', __( '<strong>ERROR</strong>: Your title is too long.', 'bbpress' ) );
460
+ }
461
+
462
  /** Forum Content *********************************************************/
463
 
464
  if ( ! empty( $_POST['bbp_forum_content'] ) ) {
473
  bbp_add_error( 'bbp_edit_forum_content', __( '<strong>ERROR</strong>: Your forum description cannot be empty.', 'bbpress' ) );
474
  }
475
 
476
+ /** Forum Bad Words *******************************************************/
477
 
478
+ if ( ! bbp_check_for_moderation( $anonymous_data, bbp_get_forum_author_id( $forum_id ), $forum_title, $forum_content, true ) ) {
479
+ bbp_add_error( 'bbp_forum_moderation', __( '<strong>ERROR</strong>: Your forum cannot be edited at this time.', 'bbpress' ) );
480
  }
481
 
482
  /** Forum Moderation ******************************************************/
1370
  }
1371
 
1372
  // Get the topic's replies.
1373
+ $count = bbp_get_public_child_count( $topic_id, bbp_get_reply_post_type() );
 
1374
 
1375
  // If we're unapproving, set count to negative.
1376
  if ( 'bbp_unapproved_topic' === current_filter() ) {
1595
  function bbp_update_forum_subforum_count( $forum_id = 0, $subforums = 0 ) {
1596
  $forum_id = bbp_get_forum_id( $forum_id );
1597
 
1598
+ // Maybe query for counts
1599
  if ( empty( $subforums ) ) {
1600
+ $subforums = bbp_get_public_child_count( $forum_id, bbp_get_forum_post_type() );
1601
  }
1602
 
1603
  $subforums = (int) $subforums;
1632
  }
1633
 
1634
  // Get total topics for this forum
1635
+ $topics = bbp_get_public_child_count( $forum_id, bbp_get_topic_post_type() );
1636
 
1637
  // Calculate total topics in this forum
1638
  $total_topics = (int) ( $topics + $children_topic_count );
1732
  $reply_count = 0;
1733
  $topic_ids = bbp_forum_query_topic_ids( $forum_id );
1734
  if ( ! empty( $topic_ids ) ) {
1735
+ $reply_count = bbp_get_public_child_count( $forum_id, bbp_get_reply_post_type() );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1736
  }
1737
 
1738
  // Calculate total replies in this forum
1775
  'last_active_status' => bbp_get_public_status_id()
1776
  ), 'update_forum' );
1777
 
1778
+ // Update the forum parent
1779
+ bbp_update_forum_id( $r['forum_id'], $r['post_parent'] );
1780
+
1781
  // Last topic and reply ID's
1782
  bbp_update_forum_last_topic_id( $r['forum_id'], $r['last_topic_id'] );
1783
  bbp_update_forum_last_reply_id( $r['forum_id'], $r['last_reply_id'] );
1811
  'post_parent' => get_post_field( 'post_parent', $r['post_parent'] )
1812
  ) );
1813
  }
1814
+
1815
+ // Bump the custom query cache
1816
+ wp_cache_set( 'last_changed', microtime(), 'bbpress_posts' );
1817
  }
1818
 
1819
  /** Helpers *******************************************************************/
2052
  $posts_query->set( 'post__not_in', $not_in );
2053
 
2054
  // Some other post type besides Forums, Topics, or Replies
2055
+ } elseif ( ! array_diff( $post_types, bbp_get_post_types() ) ) {
2056
 
2057
  // Get forums to exclude
2058
  $forum_ids = bbp_exclude_forum_ids( 'meta_query' );
2372
  }
2373
 
2374
  /**
2375
+ * Untrash all topics inside a forum
2376
  *
2377
  * @since 2.1.0 bbPress (r3668)
2378
  *
includes/forums/template.php CHANGED
@@ -45,25 +45,37 @@ function bbp_get_forum_post_type_labels() {
45
 
46
  // Filter & return
47
  return (array) apply_filters( 'bbp_get_forum_post_type_labels', array(
48
- 'name' => __( 'Forums', 'bbpress' ),
49
- 'menu_name' => __( 'Forums', 'bbpress' ),
50
- 'singular_name' => __( 'Forum', 'bbpress' ),
51
- 'all_items' => __( 'All Forums', 'bbpress' ),
52
- 'add_new' => __( 'Add New', 'bbpress' ),
53
- 'add_new_item' => __( 'Create New Forum', 'bbpress' ),
54
- 'edit' => __( 'Edit', 'bbpress' ),
55
- 'edit_item' => __( 'Edit Forum', 'bbpress' ),
56
- 'new_item' => __( 'New Forum', 'bbpress' ),
57
- 'view' => __( 'View Forum', 'bbpress' ),
58
- 'view_item' => __( 'View Forum', 'bbpress' ),
59
- 'view_items' => __( 'View Forums', 'bbpress' ),
60
- 'search_items' => __( 'Search Forums', 'bbpress' ),
61
- 'not_found' => __( 'No forums found', 'bbpress' ),
62
- 'not_found_in_trash' => __( 'No forums found in Trash', 'bbpress' ),
63
- 'filter_items_list' => __( 'Filter forums list', 'bbpress' ),
64
- 'items_list' => __( 'Forums list', 'bbpress' ),
65
- 'items_list_navigation' => __( 'Forums list navigation', 'bbpress' ),
66
- 'parent_item_colon' => __( 'Parent Forum:', 'bbpress' )
 
 
 
 
 
 
 
 
 
 
 
 
67
  ) );
68
  }
69
 
@@ -741,7 +753,7 @@ function bbp_list_forums( $args = array() ) {
741
  $subforum_classes = apply_filters( 'bbp_list_forums_subforum_classes', $subforum_classes, $sub_forum->ID );
742
 
743
  // This could use bbp_get_forum_class() eventually...
744
- $subforum_classes_attr = 'class="' . implode( ' ', array_map( 'esc_attr', $subforum_classes ) ) . '"';
745
 
746
  // Build this sub forums link
747
  $links[] = $r['link_before'] . '<a href="' . esc_url( $permalink ) . '" ' . $subforum_classes_attr . '>' . $title . $counts . '</a>' . $r['link_after'];
@@ -1177,7 +1189,7 @@ function bbp_forum_subforum_count( $forum_id = 0, $integer = false ) {
1177
  */
1178
  function bbp_get_forum_subforum_count( $forum_id = 0, $integer = false ) {
1179
  $forum_id = bbp_get_forum_id( $forum_id );
1180
- $forum_count = bbp_number_not_negative( get_post_meta( $forum_id, '_bbp_forum_subforum_count', true ) );
1181
  $filter = ( true === $integer )
1182
  ? 'bbp_get_forum_subforum_count_int'
1183
  : 'bbp_get_forum_subforum_count';
@@ -1211,7 +1223,7 @@ function bbp_forum_topic_count( $forum_id = 0, $total_count = true, $integer = f
1211
  function bbp_get_forum_topic_count( $forum_id = 0, $total_count = true, $integer = false ) {
1212
  $forum_id = bbp_get_forum_id( $forum_id );
1213
  $meta_key = empty( $total_count ) ? '_bbp_topic_count' : '_bbp_total_topic_count';
1214
- $topics = bbp_number_not_negative( get_post_meta( $forum_id, $meta_key, true ) );
1215
  $filter = ( true === $integer )
1216
  ? 'bbp_get_forum_topic_count_int'
1217
  : 'bbp_get_forum_topic_count';
@@ -1245,7 +1257,7 @@ function bbp_forum_reply_count( $forum_id = 0, $total_count = true, $integer = f
1245
  function bbp_get_forum_reply_count( $forum_id = 0, $total_count = true, $integer = false ) {
1246
  $forum_id = bbp_get_forum_id( $forum_id );
1247
  $meta_key = empty( $total_count ) ? '_bbp_reply_count' : '_bbp_total_reply_count';
1248
- $replies = bbp_number_not_negative( get_post_meta( $forum_id, $meta_key, true ) );
1249
  $filter = ( true === $integer )
1250
  ? 'bbp_get_forum_reply_count_int'
1251
  : 'bbp_get_forum_reply_count';
@@ -1280,10 +1292,10 @@ function bbp_forum_post_count( $forum_id = 0, $total_count = true, $integer = fa
1280
  $forum_id = bbp_get_forum_id( $forum_id );
1281
  $topics = bbp_get_forum_topic_count( $forum_id, $total_count, true );
1282
  $replies = bbp_get_forum_reply_count( $forum_id, $total_count, true );
1283
- $retval = bbp_number_not_negative( $replies + $topics );
1284
  $filter = ( true === $integer )
1285
- ? 'bbp_get_forum_post_count_int'
1286
- : 'bbp_get_forum_post_count';
1287
 
1288
  return apply_filters( $filter, $retval, $forum_id );
1289
  }
@@ -1312,7 +1324,7 @@ function bbp_forum_topic_count_hidden( $forum_id = 0, $integer = false ) {
1312
  */
1313
  function bbp_get_forum_topic_count_hidden( $forum_id = 0, $integer = false ) {
1314
  $forum_id = bbp_get_forum_id( $forum_id );
1315
- $topics = bbp_number_not_negative( get_post_meta( $forum_id, '_bbp_topic_count_hidden', true ) );
1316
  $filter = ( true === $integer )
1317
  ? 'bbp_get_forum_topic_count_hidden_int'
1318
  : 'bbp_get_forum_topic_count_hidden';
@@ -1910,10 +1922,10 @@ function bbp_single_forum_description( $args = array() ) {
1910
  remove_filter( 'bbp_get_forum_permalink', 'bbp_add_view_all' );
1911
 
1912
  // Get some forum data
1913
- $tc_int = bbp_get_forum_topic_count( $forum_id, false );
1914
- $rc_int = bbp_get_forum_reply_count( $forum_id, false );
1915
- $topic_count = bbp_get_forum_topic_count( $forum_id );
1916
- $reply_count = bbp_get_forum_reply_count( $forum_id );
1917
  $last_active = bbp_get_forum_last_active_id( $forum_id );
1918
 
1919
  // Has replies
@@ -2214,32 +2226,21 @@ function bbp_form_forum_subscribed() {
2214
  */
2215
  function bbp_get_form_forum_subscribed() {
2216
 
 
 
 
2217
  // Get _POST data
2218
  if ( bbp_is_forum_form_post_request() && isset( $_POST['bbp_forum_subscription'] ) ) {
2219
  $forum_subscribed = (bool) $_POST['bbp_forum_subscription'];
2220
 
2221
  // Get edit data
2222
  } elseif ( bbp_is_forum_edit() || bbp_is_reply_edit() ) {
2223
-
2224
- // Get current posts author
2225
- $post_author = bbp_get_global_post_field( 'post_author', 'raw' );
2226
-
2227
- // Post author is not the current user
2228
- if ( bbp_get_current_user_id() !== $post_author ) {
2229
- $forum_subscribed = bbp_is_user_subscribed( $post_author, bbp_get_forum_id() );
2230
-
2231
- // Post author is the current user
2232
- } else {
2233
- $forum_subscribed = bbp_is_user_subscribed( bbp_get_current_user_id(), bbp_get_forum_id() );
2234
- }
2235
 
2236
  // Get current status
2237
  } elseif ( bbp_is_single_forum() ) {
2238
  $forum_subscribed = bbp_is_user_subscribed( bbp_get_current_user_id(), bbp_get_forum_id() );
2239
-
2240
- // No data
2241
- } else {
2242
- $forum_subscribed = false;
2243
  }
2244
 
2245
  // Get checked output
@@ -2528,13 +2529,13 @@ function bbp_is_forum_form_post_request() {
2528
  return false;
2529
  }
2530
 
2531
- // Creating a new topic
2532
  if ( bbp_verify_nonce_request( 'bbp-new-forum' ) ) {
2533
  return true;
2534
  }
2535
 
2536
- // Editing an existing topic
2537
- if ( bbp_verify_nonce_request( 'bbp-edit-forum' ) ) {
2538
  return true;
2539
  }
2540
 
@@ -2548,7 +2549,7 @@ function bbp_is_forum_form_post_request() {
2548
  *
2549
  * @since 2.0.0 bbPress (r3172)
2550
  *
2551
- * @param type $forum_id Optional. Forum ID.
2552
  */
2553
  function bbp_forum_topics_feed_link( $forum_id = 0 ) {
2554
  echo bbp_get_forum_topics_feed_link( $forum_id );
@@ -2600,7 +2601,7 @@ function bbp_forum_topics_feed_link( $forum_id = 0 ) {
2600
  *
2601
  * @since 2.0.0 bbPress (r3172)
2602
  *
2603
- * @param type $forum_id Optional. Forum ID.
2604
  */
2605
  function bbp_forum_replies_feed_link( $forum_id = 0 ) {
2606
  echo bbp_get_forum_replies_feed_link( $forum_id );
45
 
46
  // Filter & return
47
  return (array) apply_filters( 'bbp_get_forum_post_type_labels', array(
48
+ 'name' => esc_attr__( 'Forums', 'bbpress' ),
49
+ 'menu_name' => esc_attr__( 'Forums', 'bbpress' ),
50
+ 'singular_name' => esc_attr__( 'Forum', 'bbpress' ),
51
+ 'all_items' => esc_attr__( 'All Forums', 'bbpress' ),
52
+ 'add_new' => esc_attr__( 'Add New', 'bbpress' ),
53
+ 'add_new_item' => esc_attr__( 'Create New Forum', 'bbpress' ),
54
+ 'edit' => esc_attr__( 'Edit', 'bbpress' ),
55
+ 'edit_item' => esc_attr__( 'Edit Forum', 'bbpress' ),
56
+ 'new_item' => esc_attr__( 'New Forum', 'bbpress' ),
57
+ 'view' => esc_attr__( 'View Forum', 'bbpress' ),
58
+ 'view_item' => esc_attr__( 'View Forum', 'bbpress' ),
59
+ 'view_items' => esc_attr__( 'View Forums', 'bbpress' ),
60
+ 'search_items' => esc_attr__( 'Search Forums', 'bbpress' ),
61
+ 'not_found' => esc_attr__( 'No forums found', 'bbpress' ),
62
+ 'not_found_in_trash' => esc_attr__( 'No forums found in Trash', 'bbpress' ),
63
+ 'filter_items_list' => esc_attr__( 'Filter forums list', 'bbpress' ),
64
+ 'items_list' => esc_attr__( 'Forums list', 'bbpress' ),
65
+ 'items_list_navigation' => esc_attr__( 'Forums list navigation', 'bbpress' ),
66
+ 'parent_item_colon' => esc_attr__( 'Parent Forum:', 'bbpress' ),
67
+ 'all_items' => esc_attr__( 'All Forums', 'bbpress' ),
68
+ 'archives' => esc_attr__( 'Forums', 'bbpress' ),
69
+ 'attributes' => esc_attr__( 'Forum Attributes', 'bbpress' ),
70
+ 'insert_into_item' => esc_attr__( 'Insert into forum', 'bbpress' ),
71
+ 'uploaded_to_this_item' => esc_attr__( 'Uploaded to this forum', 'bbpress' ),
72
+ 'featured_image' => esc_attr__( 'Forum Image', 'bbpress' ),
73
+ 'set_featured_image' => esc_attr__( 'Set forum image', 'bbpress' ),
74
+ 'remove_featured_image' => esc_attr__( 'Remove forum image', 'bbpress' ),
75
+ 'use_featured_image' => esc_attr__( 'Use as forum image', 'bbpress' ),
76
+ 'filter_items_list' => esc_attr__( 'Filter forum list', 'bbpress' ),
77
+ 'items_list_navigation' => esc_attr__( 'Forum list navigation', 'bbpress' ),
78
+ 'items_list' => esc_attr__( 'Forum list', 'bbpress' )
79
  ) );
80
  }
81
 
753
  $subforum_classes = apply_filters( 'bbp_list_forums_subforum_classes', $subforum_classes, $sub_forum->ID );
754
 
755
  // This could use bbp_get_forum_class() eventually...
756
+ $subforum_classes_attr = 'class="' . implode( ' ', array_map( 'sanitize_html_class', $subforum_classes ) ) . '"';
757
 
758
  // Build this sub forums link
759
  $links[] = $r['link_before'] . '<a href="' . esc_url( $permalink ) . '" ' . $subforum_classes_attr . '>' . $title . $counts . '</a>' . $r['link_after'];
1189
  */
1190
  function bbp_get_forum_subforum_count( $forum_id = 0, $integer = false ) {
1191
  $forum_id = bbp_get_forum_id( $forum_id );
1192
+ $forum_count = get_post_meta( $forum_id, '_bbp_forum_subforum_count', true );
1193
  $filter = ( true === $integer )
1194
  ? 'bbp_get_forum_subforum_count_int'
1195
  : 'bbp_get_forum_subforum_count';
1223
  function bbp_get_forum_topic_count( $forum_id = 0, $total_count = true, $integer = false ) {
1224
  $forum_id = bbp_get_forum_id( $forum_id );
1225
  $meta_key = empty( $total_count ) ? '_bbp_topic_count' : '_bbp_total_topic_count';
1226
+ $topics = get_post_meta( $forum_id, $meta_key, true );
1227
  $filter = ( true === $integer )
1228
  ? 'bbp_get_forum_topic_count_int'
1229
  : 'bbp_get_forum_topic_count';
1257
  function bbp_get_forum_reply_count( $forum_id = 0, $total_count = true, $integer = false ) {
1258
  $forum_id = bbp_get_forum_id( $forum_id );
1259
  $meta_key = empty( $total_count ) ? '_bbp_reply_count' : '_bbp_total_reply_count';
1260
+ $replies = get_post_meta( $forum_id, $meta_key, true );
1261
  $filter = ( true === $integer )
1262
  ? 'bbp_get_forum_reply_count_int'
1263
  : 'bbp_get_forum_reply_count';
1292
  $forum_id = bbp_get_forum_id( $forum_id );
1293
  $topics = bbp_get_forum_topic_count( $forum_id, $total_count, true );
1294
  $replies = bbp_get_forum_reply_count( $forum_id, $total_count, true );
1295
+ $retval = $replies + $topics;
1296
  $filter = ( true === $integer )
1297
+ ? 'bbp_get_forum_post_count_int'
1298
+ : 'bbp_get_forum_post_count';
1299
 
1300
  return apply_filters( $filter, $retval, $forum_id );
1301
  }
1324
  */
1325
  function bbp_get_forum_topic_count_hidden( $forum_id = 0, $integer = false ) {
1326
  $forum_id = bbp_get_forum_id( $forum_id );
1327
+ $topics = get_post_meta( $forum_id, '_bbp_topic_count_hidden', true );
1328
  $filter = ( true === $integer )
1329
  ? 'bbp_get_forum_topic_count_hidden_int'
1330
  : 'bbp_get_forum_topic_count_hidden';
1922
  remove_filter( 'bbp_get_forum_permalink', 'bbp_add_view_all' );
1923
 
1924
  // Get some forum data
1925
+ $tc_int = bbp_get_forum_topic_count( $forum_id, true, true );
1926
+ $rc_int = bbp_get_forum_reply_count( $forum_id, true, true );
1927
+ $topic_count = bbp_get_forum_topic_count( $forum_id, true, false );
1928
+ $reply_count = bbp_get_forum_reply_count( $forum_id, true, false );
1929
  $last_active = bbp_get_forum_last_active_id( $forum_id );
1930
 
1931
  // Has replies
2226
  */
2227
  function bbp_get_form_forum_subscribed() {
2228
 
2229
+ // Default value
2230
+ $forum_subscribed = false;
2231
+
2232
  // Get _POST data
2233
  if ( bbp_is_forum_form_post_request() && isset( $_POST['bbp_forum_subscription'] ) ) {
2234
  $forum_subscribed = (bool) $_POST['bbp_forum_subscription'];
2235
 
2236
  // Get edit data
2237
  } elseif ( bbp_is_forum_edit() || bbp_is_reply_edit() ) {
2238
+ $post_author = (int) bbp_get_global_post_field( 'post_author', 'raw' );
2239
+ $forum_subscribed = bbp_is_user_subscribed( $post_author, bbp_get_forum_id() );
 
 
 
 
 
 
 
 
 
 
2240
 
2241
  // Get current status
2242
  } elseif ( bbp_is_single_forum() ) {
2243
  $forum_subscribed = bbp_is_user_subscribed( bbp_get_current_user_id(), bbp_get_forum_id() );
 
 
 
 
2244
  }
2245
 
2246
  // Get checked output
2529
  return false;
2530
  }
2531
 
2532
+ // Creating a new forum
2533
  if ( bbp_verify_nonce_request( 'bbp-new-forum' ) ) {
2534
  return true;
2535
  }
2536
 
2537
+ // Editing an existing forum
2538
+ if ( bbp_verify_nonce_request( 'bbp-edit-forum_' . bbp_get_forum_id() ) ) {
2539
  return true;
2540
  }
2541
 
2549
  *
2550
  * @since 2.0.0 bbPress (r3172)
2551
  *
2552
+ * @param int $forum_id Optional. Forum ID.
2553
  */
2554
  function bbp_forum_topics_feed_link( $forum_id = 0 ) {
2555
  echo bbp_get_forum_topics_feed_link( $forum_id );
2601
  *
2602
  * @since 2.0.0 bbPress (r3172)
2603
  *
2604
+ * @param int $forum_id Optional. Forum ID.
2605
  */
2606
  function bbp_forum_replies_feed_link( $forum_id = 0 ) {
2607
  echo bbp_get_forum_replies_feed_link( $forum_id );
includes/replies/capabilities.php CHANGED
@@ -34,10 +34,10 @@ function bbp_get_reply_caps() {
34
  *
35
  * @since 2.2.0 bbPress (r4242)
36
  *
37
- * @param array $caps Capabilities for meta capability
38
- * @param string $cap Capability name
39
- * @param int $user_id User id
40
- * @param array $args Arguments
41
  *
42
  * @return array Actual capabilities for meta capability
43
  */
@@ -57,7 +57,12 @@ function bbp_map_reply_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
57
  // Do some post ID based logic
58
  } else {
59
 
60
- // Get the post
 
 
 
 
 
61
  $_post = get_post( $args[0] );
62
  if ( ! empty( $_post ) ) {
63
 
@@ -125,7 +130,12 @@ function bbp_map_reply_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
125
  // Used everywhere
126
  case 'edit_reply' :
127
 
128
- // Get the post
 
 
 
 
 
129
  $_post = get_post( $args[0] );
130
  if ( ! empty( $_post ) ) {
131
 
@@ -136,14 +146,18 @@ function bbp_map_reply_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
136
  if ( bbp_is_user_inactive( $user_id ) ) {
137
  $caps = array( 'do_not_allow' );
138
 
139
- // User is author so allow edit if not in admin
140
- } elseif ( ! is_admin() && ( (int) $user_id === (int) $_post->post_author ) ) {
141
- $caps = array( $post_type->cap->edit_posts );
142
-
143
  // Moderators can always edit forum content
144
  } elseif ( user_can( $user_id, 'moderate', $_post->ID ) ) {
145
  $caps = array( 'spectate' );
146
 
 
 
 
 
 
 
 
 
147
  // Fallback to edit_others_posts.
148
  } else {
149
  $caps = array( $post_type->cap->edit_others_posts );
@@ -156,6 +170,11 @@ function bbp_map_reply_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
156
 
157
  case 'delete_reply' :
158
 
 
 
 
 
 
159
  // Get the post
160
  $_post = get_post( $args[0] );
161
  if ( ! empty( $_post ) ) {
@@ -167,14 +186,14 @@ function bbp_map_reply_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
167
  if ( bbp_is_user_inactive( $user_id ) ) {
168
  $caps = array( 'do_not_allow' );
169
 
170
- // User is author so allow delete if not in admin
171
- } elseif ( ! is_admin() && ( (int) $user_id === (int) $_post->post_author ) ) {
172
- $caps = array( $post_type->cap->delete_posts );
173
-
174
  // Moderators can always edit forum content
175
  } elseif ( user_can( $user_id, 'moderate', $_post->ID ) ) {
176
  $caps = array( 'spectate' );
177
 
 
 
 
 
178
  // Unknown so map to delete_others_posts
179
  } else {
180
  $caps = array( $post_type->cap->delete_others_posts );
34
  *
35
  * @since 2.2.0 bbPress (r4242)
36
  *
37
+ * @param array $caps Capabilities for meta capability.
38
+ * @param string $cap Capability name.
39
+ * @param int $user_id User id.
40
+ * @param array $args Arguments.
41
  *
42
  * @return array Actual capabilities for meta capability
43
  */
57
  // Do some post ID based logic
58
  } else {
59
 
60
+ // Bail if no post ID
61
+ if ( empty( $args[0] ) ) {
62
+ return $caps;
63
+ }
64
+
65
+ // Get the post.
66
  $_post = get_post( $args[0] );
67
  if ( ! empty( $_post ) ) {
68
 
130
  // Used everywhere
131
  case 'edit_reply' :
132
 
133
+ // Bail if no post ID
134
+ if ( empty( $args[0] ) ) {
135
+ return $caps;
136
+ }
137
+
138
+ // Get the post.
139
  $_post = get_post( $args[0] );
140
  if ( ! empty( $_post ) ) {
141
 
146
  if ( bbp_is_user_inactive( $user_id ) ) {
147
  $caps = array( 'do_not_allow' );
148
 
 
 
 
 
149
  // Moderators can always edit forum content
150
  } elseif ( user_can( $user_id, 'moderate', $_post->ID ) ) {
151
  $caps = array( 'spectate' );
152
 
153
+ // Allow author or mod to edit if not in admin, unless past edit lock time
154
+ } elseif ( ! is_admin() && ( (int) $user_id === (int) $_post->post_author ) ) {
155
+
156
+ // Only allow if not past the edit-lock period
157
+ $caps = ! bbp_past_edit_lock( $_post->post_date_gmt )
158
+ ? array( $post_type->cap->edit_posts )
159
+ : array( 'do_not_allow' );
160
+
161
  // Fallback to edit_others_posts.
162
  } else {
163
  $caps = array( $post_type->cap->edit_others_posts );
170
 
171
  case 'delete_reply' :
172
 
173
+ // Bail if no post ID
174
+ if ( empty( $args[0] ) ) {
175
+ return $caps;
176
+ }
177
+
178
  // Get the post
179
  $_post = get_post( $args[0] );
180
  if ( ! empty( $_post ) ) {
186
  if ( bbp_is_user_inactive( $user_id ) ) {
187
  $caps = array( 'do_not_allow' );
188
 
 
 
 
 
189
  // Moderators can always edit forum content
190
  } elseif ( user_can( $user_id, 'moderate', $_post->ID ) ) {
191
  $caps = array( 'spectate' );
192
 
193
+ // User is author so allow delete if not in admin
194
+ } elseif ( ! is_admin() && ( (int) $user_id === (int) $_post->post_author ) ) {
195
+ $caps = array( $post_type->cap->delete_posts );
196
+
197
  // Unknown so map to delete_others_posts
198
  } else {
199
  $caps = array( $post_type->cap->delete_others_posts );
includes/replies/functions.php CHANGED
@@ -98,7 +98,7 @@ function bbp_insert_reply_update_counts( $reply_id = 0, $topic_id = 0, $forum_id
98
  // If the reply is public, update the forum/topic reply counts.
99
  if ( bbp_is_reply_published( $reply_id ) ) {
100
  bbp_increase_topic_reply_count( $topic_id );
101
- bbp_increase_forum_reply_count( $reply_id );
102
 
103
  // If the reply isn't public only update the topic reply hidden count.
104
  } else {
@@ -274,6 +274,11 @@ function bbp_new_reply_handler( $action = '' ) {
274
  // Filter and sanitize
275
  $reply_title = apply_filters( 'bbp_new_reply_pre_title', $reply_title );
276
 
 
 
 
 
 
277
  /** Reply Content *********************************************************/
278
 
279
  if ( ! empty( $_POST['bbp_reply_content'] ) ) {
@@ -300,10 +305,10 @@ function bbp_new_reply_handler( $action = '' ) {
300
  bbp_add_error( 'bbp_reply_duplicate', __( '<strong>ERROR</strong>: Duplicate reply detected; it looks as though you&#8217;ve already said that.', 'bbpress' ) );
301
  }
302
 
303
- /** Reply Blacklist *******************************************************/
304
 
305
- if ( ! bbp_check_for_blacklist( $anonymous_data, $reply_author, $reply_title, $reply_content ) ) {
306
- bbp_add_error( 'bbp_reply_blacklist', __( '<strong>ERROR</strong>: Your reply cannot be created at this time.', 'bbpress' ) );
307
  }
308
 
309
  /** Reply Status **********************************************************/
@@ -334,7 +339,7 @@ function bbp_new_reply_handler( $action = '' ) {
334
  /** Topic Tags ************************************************************/
335
 
336
  // Either replace terms
337
- if ( bbp_allow_topic_tags() && current_user_can( 'assign_topic_tags' ) && ! empty( $_POST['bbp_topic_tags'] ) ) {
338
  $terms = sanitize_text_field( $_POST['bbp_topic_tags'] );
339
 
340
  // ...or remove them.
@@ -586,6 +591,11 @@ function bbp_edit_reply_handler( $action = '' ) {
586
  // Filter and sanitize
587
  $reply_title = apply_filters( 'bbp_edit_reply_pre_title', $reply_title, $reply_id );
588
 
 
 
 
 
 
589
  /** Reply Content *********************************************************/
590
 
591
  if ( ! empty( $_POST['bbp_reply_content'] ) ) {
@@ -600,10 +610,10 @@ function bbp_edit_reply_handler( $action = '' ) {
600
  bbp_add_error( 'bbp_edit_reply_content', __( '<strong>ERROR</strong>: Your reply cannot be empty.', 'bbpress' ) );
601
  }
602
 
603
- /** Reply Blacklist *******************************************************/
604
 
605
- if ( ! bbp_check_for_blacklist( $anonymous_data, $reply_author, $reply_title, $reply_content ) ) {
606
- bbp_add_error( 'bbp_reply_blacklist', __( '<strong>ERROR</strong>: Your reply cannot be edited at this time.', 'bbpress' ) );
607
  }
608
 
609
  /** Reply Status **********************************************************/
@@ -624,14 +634,16 @@ function bbp_edit_reply_handler( $action = '' ) {
624
  /** Reply To **************************************************************/
625
 
626
  // Handle Reply To of the reply; $_REQUEST for non-JS submissions
627
- if ( isset( $_REQUEST['bbp_reply_to'] ) ) {
628
  $reply_to = bbp_validate_reply_to( $_REQUEST['bbp_reply_to'], $reply_id );
 
 
629
  }
630
 
631
  /** Topic Tags ************************************************************/
632
 
633
  // Either replace terms
634
- if ( bbp_allow_topic_tags() && current_user_can( 'assign_topic_tags' ) && ! empty( $_POST['bbp_topic_tags'] ) ) {
635
  $terms = sanitize_text_field( $_POST['bbp_topic_tags'] );
636
 
637
  // ...or remove them.
@@ -798,7 +810,7 @@ function bbp_update_reply( $reply_id = 0, $topic_id = 0, $forum_id = 0, $anonymo
798
  if ( ! empty( $anonymous_data ) ) {
799
 
800
  // Update anonymous meta data (not cookies)
801
- bbp_update_anonymous_post_author( $reply_id, $anonymous_data, 'reply' );
802
 
803
  // Set transient for throttle check (only on new, not edit)
804
  if ( empty( $is_edit ) ) {
@@ -843,6 +855,9 @@ function bbp_update_reply( $reply_id = 0, $topic_id = 0, $forum_id = 0, $anonymo
843
  // Walk up ancestors and do the dirty work
844
  bbp_update_reply_walker( $reply_id, $last_active_time, $forum_id, $topic_id, false );
845
  }
 
 
 
846
  }
847
 
848
  /**
@@ -989,10 +1004,10 @@ function bbp_update_reply_forum_id( $reply_id = 0, $forum_id = 0 ) {
989
  }
990
 
991
  // Update the forum ID
992
- $forum_id = bbp_update_forum_id( $reply_id, $forum_id );
993
 
994
  // Filter & return
995
- return (int) apply_filters( 'bbp_update_reply_forum_id', $forum_id, $reply_id );
996
  }
997
 
998
  /**
@@ -1032,10 +1047,10 @@ function bbp_update_reply_topic_id( $reply_id = 0, $topic_id = 0 ) {
1032
  }
1033
 
1034
  // Update the topic ID
1035
- $topic_id = bbp_update_topic_id( $reply_id, $topic_id );
1036
 
1037
  // Filter & return
1038
- return (int) apply_filters( 'bbp_update_reply_topic_id', $topic_id, $reply_id );
1039
  }
1040
 
1041
  /*
@@ -1617,7 +1632,7 @@ function bbp_get_reply_statuses( $reply_id = 0 ) {
1617
  bbp_get_public_status_id() => _x( 'Publish', 'Publish the reply', 'bbpress' ),
1618
  bbp_get_spam_status_id() => _x( 'Spam', 'Spam the reply', 'bbpress' ),
1619
  bbp_get_trash_status_id() => _x( 'Trash', 'Trash the reply', 'bbpress' ),
1620
- bbp_get_pending_status_id() => _x( 'Pending', 'Mark reply as pending', 'bbpress' ),
1621
  ), $reply_id );
1622
  }
1623
 
@@ -1749,8 +1764,11 @@ function bbp_approve_reply( $reply_id = 0 ) {
1749
  return $reply;
1750
  }
1751
 
 
 
 
1752
  // Bail if already approved
1753
- if ( bbp_get_pending_status_id() !== $reply->post_status ) {
1754
  return false;
1755
  }
1756
 
@@ -1758,7 +1776,7 @@ function bbp_approve_reply( $reply_id = 0 ) {
1758
  do_action( 'bbp_approve_reply', $reply_id );
1759
 
1760
  // Set publish status
1761
- $reply->post_status = bbp_get_public_status_id();
1762
 
1763
  // No revisions
1764
  remove_action( 'pre_post_update', 'wp_save_post_revision' );
@@ -1789,8 +1807,11 @@ function bbp_unapprove_reply( $reply_id = 0 ) {
1789
  return $reply;
1790
  }
1791
 
 
 
 
1792
  // Bail if already pending
1793
- if ( bbp_get_pending_status_id() === $reply->post_status ) {
1794
  return false;
1795
  }
1796
 
@@ -1798,7 +1819,7 @@ function bbp_unapprove_reply( $reply_id = 0 ) {
1798
  do_action( 'bbp_unapprove_reply', $reply_id );
1799
 
1800
  // Set pending status
1801
- $reply->post_status = bbp_get_pending_status_id();
1802
 
1803
  // No revisions
1804
  remove_action( 'pre_post_update', 'wp_save_post_revision' );
@@ -2075,12 +2096,12 @@ function bbp_display_replies_feed_rss2( $replies_query = array() ) {
2075
 
2076
  <channel>
2077
 
2078
- <title><?php echo $title; ?></title>
2079
  <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
2080
  <link><?php self_link(); ?></link>
2081
  <description><?php //?></description>
2082
  <lastBuildDate><?php echo date( 'r' ); ?></lastBuildDate>
2083
- <generator>https://bbpress.org/?v=<?php bbp_version(); ?></generator>
2084
  <language><?php bloginfo_rss( 'language' ); ?></language>
2085
 
2086
  <?php do_action( 'bbp_feed_head' ); ?>
@@ -2186,7 +2207,7 @@ function bbp_check_reply_edit() {
2186
  *
2187
  * @return mixed
2188
  */
2189
- function bbp_update_reply_position( $reply_id = 0, $reply_position = 0 ) {
2190
 
2191
  // Bail if reply_id is empty
2192
  $reply_id = bbp_get_reply_id( $reply_id );
@@ -2194,27 +2215,37 @@ function bbp_update_reply_position( $reply_id = 0, $reply_position = 0 ) {
2194
  return false;
2195
  }
2196
 
2197
- // If no position was passed, get it from the db and update the menu_order
2198
- if ( empty( $reply_position ) ) {
2199
- $reply_position = bbp_get_reply_position_raw( $reply_id, bbp_get_reply_topic_id( $reply_id ) );
 
 
 
 
 
 
 
 
2200
  }
2201
 
 
 
 
2202
  // Toggle revisions off as we are not altering content
2203
- if ( post_type_supports( bbp_get_reply_post_type(), 'revisions' ) ) {
2204
- $revisions_removed = true;
2205
- remove_post_type_support( bbp_get_reply_post_type(), 'revisions' );
2206
  }
2207
 
2208
  // Update the replies' 'menu_order' with the reply position
2209
- wp_update_post( array(
2210
- 'ID' => $reply_id,
2211
- 'menu_order' => $reply_position
2212
- ) );
2213
 
2214
  // Toggle revisions back on
2215
- if ( true === $revisions_removed ) {
2216
- $revisions_removed = false;
2217
- add_post_type_support( bbp_get_reply_post_type(), 'revisions' );
2218
  }
2219
 
2220
  return (int) $reply_position;
@@ -2232,9 +2263,11 @@ function bbp_update_reply_position( $reply_id = 0, $reply_position = 0 ) {
2232
  function bbp_get_reply_position_raw( $reply_id = 0, $topic_id = 0 ) {
2233
 
2234
  // Get required data
2235
- $reply_id = bbp_get_reply_id( $reply_id );
2236
- $topic_id = ! empty( $topic_id ) ? bbp_get_topic_id( $topic_id ) : bbp_get_reply_topic_id( $reply_id );
2237
  $reply_position = 0;
 
 
 
 
2238
 
2239
  // If reply is actually the first post in a topic, return 0
2240
  if ( $reply_id !== $topic_id ) {
98
  // If the reply is public, update the forum/topic reply counts.
99
  if ( bbp_is_reply_published( $reply_id ) ) {
100
  bbp_increase_topic_reply_count( $topic_id );
101
+ bbp_increase_forum_reply_count( $forum_id );
102
 
103
  // If the reply isn't public only update the topic reply hidden count.
104
  } else {
274
  // Filter and sanitize
275
  $reply_title = apply_filters( 'bbp_new_reply_pre_title', $reply_title );
276
 
277
+ // Title too long
278
+ if ( bbp_is_title_too_long( $reply_title ) ) {
279
+ bbp_add_error( 'bbp_reply_title', __( '<strong>ERROR</strong>: Your title is too long.', 'bbpress' ) );
280
+ }
281
+
282
  /** Reply Content *********************************************************/
283
 
284
  if ( ! empty( $_POST['bbp_reply_content'] ) ) {
305
  bbp_add_error( 'bbp_reply_duplicate', __( '<strong>ERROR</strong>: Duplicate reply detected; it looks as though you&#8217;ve already said that.', 'bbpress' ) );
306
  }
307
 
308
+ /** Reply Bad Words *******************************************************/
309
 
310
+ if ( ! bbp_check_for_moderation( $anonymous_data, $reply_author, $reply_title, $reply_content, true ) ) {
311
+ bbp_add_error( 'bbp_reply_moderation', __( '<strong>ERROR</strong>: Your reply cannot be created at this time.', 'bbpress' ) );
312
  }
313
 
314
  /** Reply Status **********************************************************/
339
  /** Topic Tags ************************************************************/
340
 
341
  // Either replace terms
342
+ if ( bbp_allow_topic_tags() && current_user_can( 'assign_topic_tags', $topic_id ) && ! empty( $_POST['bbp_topic_tags'] ) ) {
343
  $terms = sanitize_text_field( $_POST['bbp_topic_tags'] );
344
 
345
  // ...or remove them.
591
  // Filter and sanitize
592
  $reply_title = apply_filters( 'bbp_edit_reply_pre_title', $reply_title, $reply_id );
593
 
594
+ // Title too long
595
+ if ( bbp_is_title_too_long( $reply_title ) ) {
596
+ bbp_add_error( 'bbp_reply_title', __( '<strong>ERROR</strong>: Your title is too long.', 'bbpress' ) );
597
+ }
598
+
599
  /** Reply Content *********************************************************/
600
 
601
  if ( ! empty( $_POST['bbp_reply_content'] ) ) {
610
  bbp_add_error( 'bbp_edit_reply_content', __( '<strong>ERROR</strong>: Your reply cannot be empty.', 'bbpress' ) );
611
  }
612
 
613
+ /** Reply Bad Words *******************************************************/
614
 
615
+ if ( ! bbp_check_for_moderation( $anonymous_data, $reply_author, $reply_title, $reply_content, true ) ) {
616
+ bbp_add_error( 'bbp_reply_moderation', __( '<strong>ERROR</strong>: Your reply cannot be edited at this time.', 'bbpress' ) );
617
  }
618
 
619
  /** Reply Status **********************************************************/
634
  /** Reply To **************************************************************/
635
 
636
  // Handle Reply To of the reply; $_REQUEST for non-JS submissions
637
+ if ( isset( $_REQUEST['bbp_reply_to'] ) && current_user_can( 'moderate', $reply_id ) ) {
638
  $reply_to = bbp_validate_reply_to( $_REQUEST['bbp_reply_to'], $reply_id );
639
+ } elseif ( bbp_thread_replies() ) {
640
+ $reply_to = bbp_get_reply_to( $reply_id );
641
  }
642
 
643
  /** Topic Tags ************************************************************/
644
 
645
  // Either replace terms
646
+ if ( bbp_allow_topic_tags() && current_user_can( 'assign_topic_tags', $topic_id ) && ! empty( $_POST['bbp_topic_tags'] ) ) {
647
  $terms = sanitize_text_field( $_POST['bbp_topic_tags'] );
648
 
649
  // ...or remove them.
810
  if ( ! empty( $anonymous_data ) ) {
811
 
812
  // Update anonymous meta data (not cookies)
813
+ bbp_update_anonymous_post_author( $reply_id, $anonymous_data, bbp_get_reply_post_type() );
814
 
815
  // Set transient for throttle check (only on new, not edit)
816
  if ( empty( $is_edit ) ) {
855
  // Walk up ancestors and do the dirty work
856
  bbp_update_reply_walker( $reply_id, $last_active_time, $forum_id, $topic_id, false );
857
  }
858
+
859
+ // Bump the custom query cache
860
+ wp_cache_set( 'last_changed', microtime(), 'bbpress_posts' );
861
  }
862
 
863
  /**
1004
  }
1005
 
1006
  // Update the forum ID
1007
+ $retval = bbp_update_forum_id( $reply_id, $forum_id );
1008
 
1009
  // Filter & return
1010
+ return (int) apply_filters( 'bbp_update_reply_forum_id', $retval, $reply_id, $forum_id );
1011
  }
1012
 
1013
  /**
1047
  }
1048
 
1049
  // Update the topic ID
1050
+ $retval = bbp_update_topic_id( $reply_id, $topic_id );
1051
 
1052
  // Filter & return
1053
+ return (int) apply_filters( 'bbp_update_reply_topic_id', $retval, $reply_id, $topic_id );
1054
  }
1055
 
1056
  /*
1632
  bbp_get_public_status_id() => _x( 'Publish', 'Publish the reply', 'bbpress' ),
1633
  bbp_get_spam_status_id() => _x( 'Spam', 'Spam the reply', 'bbpress' ),
1634
  bbp_get_trash_status_id() => _x( 'Trash', 'Trash the reply', 'bbpress' ),
1635
+ bbp_get_pending_status_id() => _x( 'Pending', 'Mark reply as pending', 'bbpress' )
1636
  ), $reply_id );
1637
  }
1638
 
1764
  return $reply;
1765
  }
1766
 
1767
+ // Get new status
1768
+ $status = bbp_get_public_status_id();
1769
+
1770
  // Bail if already approved
1771
+ if ( $status === $reply->post_status ) {
1772
  return false;
1773
  }
1774
 
1776
  do_action( 'bbp_approve_reply', $reply_id );
1777
 
1778
  // Set publish status
1779
+ $reply->post_status = $status;
1780
 
1781
  // No revisions
1782
  remove_action( 'pre_post_update', 'wp_save_post_revision' );
1807
  return $reply;
1808
  }
1809
 
1810
+ // Get new status
1811
+ $status = bbp_get_pending_status_id();
1812
+
1813
  // Bail if already pending
1814
+ if ( $status === $reply->post_status ) {
1815
  return false;
1816
  }
1817
 
1819
  do_action( 'bbp_unapprove_reply', $reply_id );
1820
 
1821
  // Set pending status
1822
+ $reply->post_status = $status;
1823
 
1824
  // No revisions
1825
  remove_action( 'pre_post_update', 'wp_save_post_revision' );
2096
 
2097
  <channel>
2098
 
2099
+ <title><?php echo $title; // Already escaped ?></title>
2100
  <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
2101
  <link><?php self_link(); ?></link>
2102
  <description><?php //?></description>
2103
  <lastBuildDate><?php echo date( 'r' ); ?></lastBuildDate>
2104
+ <generator><?php echo esc_url_raw( 'https://bbpress.org/?v=' . convert_chars( bbp_get_version() ) ); ?></generator>
2105
  <language><?php bloginfo_rss( 'language' ); ?></language>
2106
 
2107
  <?php do_action( 'bbp_feed_head' ); ?>
2207
  *
2208
  * @return mixed
2209
  */
2210
+ function bbp_update_reply_position( $reply_id = 0, $reply_position = false ) {
2211
 
2212
  // Bail if reply_id is empty
2213
  $reply_id = bbp_get_reply_id( $reply_id );
2215
  return false;
2216
  }
2217
 
2218
+ // Prepare the reply position
2219
+ $reply_position = is_numeric( $reply_position )
2220
+ ? (int) $reply_position
2221
+ : bbp_get_reply_position_raw( $reply_id, bbp_get_reply_topic_id( $reply_id ) );
2222
+
2223
+ // Get the current reply position
2224
+ $current_position = get_post_field( 'menu_order', $reply_id );
2225
+
2226
+ // Bail if no change
2227
+ if ( $reply_position === $current_position ) {
2228
+ return false;
2229
  }
2230
 
2231
+ // Filters not removed
2232
+ $removed = false;
2233
+
2234
  // Toggle revisions off as we are not altering content
2235
+ if ( has_filter( 'clean_post_cache', 'bbp_clean_post_cache' ) ) {
2236
+ $removed = true;
2237
+ remove_filter( 'clean_post_cache', 'bbp_clean_post_cache', 10, 2 );
2238
  }
2239
 
2240
  // Update the replies' 'menu_order' with the reply position
2241
+ $bbp_db = bbp_db();
2242
+ $bbp_db->update( $bbp_db->posts, array( 'menu_order' => $reply_position ), array( 'ID' => $reply_id ) );
2243
+ clean_post_cache( $reply_id );
 
2244
 
2245
  // Toggle revisions back on
2246
+ if ( true === $removed ) {
2247
+ $removed = false;
2248
+ add_filter( 'clean_post_cache', 'bbp_clean_post_cache', 10, 2 );
2249
  }
2250
 
2251
  return (int) $reply_position;
2263
  function bbp_get_reply_position_raw( $reply_id = 0, $topic_id = 0 ) {
2264
 
2265
  // Get required data
 
 
2266
  $reply_position = 0;
2267
+ $reply_id = bbp_get_reply_id( $reply_id );
2268
+ $topic_id = ! empty( $topic_id )
2269
+ ? bbp_get_topic_id( $topic_id )
2270
+ : bbp_get_reply_topic_id( $reply_id );
2271
 
2272
  // If reply is actually the first post in a topic, return 0
2273
  if ( $reply_id !== $topic_id ) {
includes/replies/template.php CHANGED
@@ -46,25 +46,37 @@ function bbp_get_reply_post_type_labels() {
46
 
47
  // Filter & return
48
  return (array) apply_filters( 'bbp_get_reply_post_type_labels', array(
49
- 'name' => __( 'Replies', 'bbpress' ),
50
- 'menu_name' => __( 'Replies', 'bbpress' ),
51
- 'singular_name' => _x( 'Reply', 'noun', 'bbpress' ),
52
- 'all_items' => __( 'All Replies', 'bbpress' ),
53
- 'add_new' => __( 'Add New', 'bbpress' ),
54
- 'add_new_item' => __( 'Create New Reply', 'bbpress' ),
55
- 'edit' => __( 'Edit', 'bbpress' ),
56
- 'edit_item' => __( 'Edit Reply', 'bbpress' ),
57
- 'new_item' => __( 'New Reply', 'bbpress' ),
58
- 'view' => __( 'View Reply', 'bbpress' ),
59
- 'view_item' => __( 'View Reply', 'bbpress' ),
60
- 'view_items' => __( 'View Replies', 'bbpress' ),
61
- 'search_items' => __( 'Search Replies', 'bbpress' ),
62
- 'not_found' => __( 'No replies found', 'bbpress' ),
63
- 'not_found_in_trash' => __( 'No replies found in Trash', 'bbpress' ),
64
- 'filter_items_list' => __( 'Filter replies list', 'bbpress' ),
65
- 'items_list' => __( 'Replies list', 'bbpress' ),
66
- 'items_list_navigation' => __( 'Replies list navigation', 'bbpress' ),
67
- 'parent_item_colon' => __( 'Topic:', 'bbpress' )
 
 
 
 
 
 
 
 
 
 
 
 
68
  ) );
69
  }
70
 
@@ -147,13 +159,7 @@ function bbp_has_replies( $args = array() ) {
147
  if ( bbp_get_view_all( 'edit_others_replies' ) ) {
148
 
149
  // Default view=all statuses
150
- $post_statuses = array(
151
- bbp_get_public_status_id(),
152
- bbp_get_closed_status_id(),
153
- bbp_get_spam_status_id(),
154
- bbp_get_trash_status_id(),
155
- bbp_get_pending_status_id()
156
- );
157
 
158
  // Add support for private status
159
  if ( current_user_can( 'read_private_replies' ) ) {
@@ -446,14 +452,15 @@ function bbp_reply_url( $reply_id = 0 ) {
446
 
447
  // Don't include pagination if on first page
448
  if ( 1 >= $reply_page ) {
449
- $url = trailingslashit( $topic_url ) . $reply_hash;
450
 
451
  // Include pagination
452
  } else {
453
 
454
  // Pretty permalinks
455
  if ( bbp_use_pretty_urls() ) {
456
- $url = trailingslashit( $topic_url ) . trailingslashit( bbp_get_paged_slug() ) . trailingslashit( $reply_page ) . $reply_hash;
 
457
 
458
  // Yucky links
459
  } else {
@@ -517,7 +524,7 @@ function bbp_reply_title( $reply_id = 0 ) {
517
  $topic_title = bbp_get_reply_topic_title( $post_id );
518
 
519
  // Get empty reply title fallback.
520
- $reply_title = sprintf( __( 'Reply To: %s', 'bbpress' ), $topic_title );
521
 
522
  // Filter & return
523
  return apply_filters( 'bbp_get_reply_title_fallback', $reply_title, $post_id, $topic_title );
@@ -595,7 +602,7 @@ function bbp_reply_excerpt( $reply_id = 0, $length = 100 ) {
595
  }
596
 
597
  if ( ! empty( $length ) && ( $excerpt_length > $length ) ) {
598
- $excerpt = substr( $excerpt, 0, $length - 1 );
599
  $excerpt .= '&hellip;';
600
  }
601
 
@@ -786,7 +793,7 @@ function bbp_get_reply_revisions( $reply_id = 0 ) {
786
  */
787
  function bbp_get_reply_revision_count( $reply_id = 0, $integer = false ) {
788
  $reply_id = bbp_get_reply_id( $reply_id );
789
- $count = bbp_number_not_negative( count( bbp_get_reply_revisions( $reply_id ) ) );
790
  $filter = ( true === $integer )
791
  ? 'bbp_get_reply_revision_count_int'
792
  : 'bbp_get_reply_revision_count';
@@ -819,6 +826,60 @@ function bbp_reply_status( $reply_id = 0 ) {
819
  return apply_filters( 'bbp_get_reply_status', get_post_status( $reply_id ), $reply_id );
820
  }
821
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
822
  /**
823
  * Is the reply not spam or deleted?
824
  *
@@ -1133,10 +1194,11 @@ function bbp_reply_author_link( $args = array() ) {
1133
 
1134
  // Tweak link title if empty
1135
  if ( empty( $r['link_title'] ) ) {
1136
- $author = bbp_get_reply_author_display_name( $reply_id );
1137
- $title = empty( $anonymous )
1138
- ? __( 'View %s\'s profile', 'bbpress' )
1139
- : __( 'Visit %s\'s website', 'bbpress' );
 
1140
  $link_title = sprintf( $title, $author );
1141
 
1142
  // Use what was passed if not
@@ -1160,31 +1222,27 @@ function bbp_reply_author_link( $args = array() ) {
1160
  $author_links['name'] = esc_html( bbp_get_reply_author_display_name( $reply_id ) );
1161
  }
1162
 
1163
- // Link class
1164
- $link_class = ' class="bbp-author-' . esc_attr( $r['type'] ) . '"';
1165
-
1166
- // Add links if not anonymous and existing user
1167
- if ( empty( $anonymous ) && bbp_user_has_profile( bbp_get_reply_author_id( $reply_id ) ) ) {
1168
-
1169
- // Empty array
1170
- $links = array();
1171
 
1172
- // Assemble the links
1173
- foreach ( $author_links as $link => $link_text ) {
1174
- $link_class = ' class="bbp-author-' . esc_attr( $link ) . '"';
1175
- $links[] = sprintf( '<a href="%1$s"%2$s%3$s>%4$s</a>', esc_url( $author_url ), $link_title, $link_class, $link_text );
1176
- }
1177
-
1178
- // Role is not linked
1179
- if ( true === $r['show_role'] ) {
1180
- $links[] = bbp_get_reply_author_role( array( 'reply_id' => $reply_id ) );
1181
- }
1182
 
1183
- // Juggle
1184
- $author_links = $links;
1185
- unset( $links );
1186
  }
1187
 
 
 
 
 
1188
  // Filter sections
1189
  $sections = apply_filters( 'bbp_get_reply_author_links', $author_links, $r, $args );
1190
 
46
 
47
  // Filter & return
48
  return (array) apply_filters( 'bbp_get_reply_post_type_labels', array(
49
+ 'name' => esc_attr__( 'Replies', 'bbpress' ),
50
+ 'menu_name' => esc_attr__( 'Replies', 'bbpress' ),
51
+ 'singular_name' => esc_attr_x( 'Reply', 'noun', 'bbpress' ),
52
+ 'all_items' => esc_attr__( 'All Replies', 'bbpress' ),
53
+ 'add_new' => esc_attr__( 'Add New', 'bbpress' ),
54
+ 'add_new_item' => esc_attr__( 'Create New Reply', 'bbpress' ),
55
+ 'edit' => esc_attr__( 'Edit', 'bbpress' ),
56
+ 'edit_item' => esc_attr__( 'Edit Reply', 'bbpress' ),
57
+ 'new_item' => esc_attr__( 'New Reply', 'bbpress' ),
58
+ 'view' => esc_attr__( 'View Reply', 'bbpress' ),
59
+ 'view_item' => esc_attr__( 'View Reply', 'bbpress' ),
60
+ 'view_items' => esc_attr__( 'View Replies', 'bbpress' ),
61
+ 'search_items' => esc_attr__( 'Search Replies', 'bbpress' ),
62
+ 'not_found' => esc_attr__( 'No replies found', 'bbpress' ),
63
+ 'not_found_in_trash' => esc_attr__( 'No replies found in Trash', 'bbpress' ),
64
+ 'filter_items_list' => esc_attr__( 'Filter replies list', 'bbpress' ),
65
+ 'items_list' => esc_attr__( 'Replies list', 'bbpress' ),
66
+ 'items_list_navigation' => esc_attr__( 'Replies list navigation', 'bbpress' ),
67
+ 'parent_item_colon' => esc_attr__( 'Parent Topic:', 'bbpress' ),
68
+ 'all_items' => esc_attr__( 'All Replies', 'bbpress' ),
69
+ 'archives' => esc_attr__( 'Forum Replies', 'bbpress' ),
70
+ 'attributes' => esc_attr__( 'Reply Attributes', 'bbpress' ),
71
+ 'insert_into_item' => esc_attr__( 'Insert into reply', 'bbpress' ),
72
+ 'uploaded_to_this_item' => esc_attr__( 'Uploaded to this reply', 'bbpress' ),
73
+ 'featured_image' => esc_attr__( 'Reply Image', 'bbpress' ),
74
+ 'set_featured_image' => esc_attr__( 'Set reply image', 'bbpress' ),
75
+ 'remove_featured_image' => esc_attr__( 'Remove reply image', 'bbpress' ),
76
+ 'use_featured_image' => esc_attr__( 'Use as reply image', 'bbpress' ),
77
+ 'filter_items_list' => esc_attr__( 'Filter reply list', 'bbpress' ),
78
+ 'items_list_navigation' => esc_attr__( 'Reply list navigation', 'bbpress' ),
79
+ 'items_list' => esc_attr__( 'Reply list', 'bbpress' )
80
  ) );
81
  }
82
 
159
  if ( bbp_get_view_all( 'edit_others_replies' ) ) {
160
 
161
  // Default view=all statuses
162
+ $post_statuses = array_keys( bbp_get_topic_statuses() );
 
 
 
 
 
 
163
 
164
  // Add support for private status
165
  if ( current_user_can( 'read_private_replies' ) ) {
452
 
453
  // Don't include pagination if on first page
454
  if ( 1 >= $reply_page ) {
455
+ $url = user_trailingslashit( $topic_url ) . $reply_hash;
456
 
457
  // Include pagination
458
  } else {
459
 
460
  // Pretty permalinks
461
  if ( bbp_use_pretty_urls() ) {
462
+ $url = trailingslashit( $topic_url ) . trailingslashit( bbp_get_paged_slug() ) . $reply_page;
463
+ $url = user_trailingslashit( $url ) . $reply_hash;
464
 
465
  // Yucky links
466
  } else {
524
  $topic_title = bbp_get_reply_topic_title( $post_id );
525
 
526
  // Get empty reply title fallback.
527
+ $reply_title = sprintf( esc_html__( 'Reply To: %s', 'bbpress' ), $topic_title );
528
 
529
  // Filter & return
530
  return apply_filters( 'bbp_get_reply_title_fallback', $reply_title, $post_id, $topic_title );
602
  }
603
 
604
  if ( ! empty( $length ) && ( $excerpt_length > $length ) ) {
605
+ $excerpt = mb_substr( $excerpt, 0, $length - 1 );
606
  $excerpt .= '&hellip;';
607
  }
608
 
793
  */
794
  function bbp_get_reply_revision_count( $reply_id = 0, $integer = false ) {
795
  $reply_id = bbp_get_reply_id( $reply_id );
796
+ $count = count( bbp_get_reply_revisions( $reply_id ) );
797
  $filter = ( true === $integer )
798
  ? 'bbp_get_reply_revision_count_int'
799
  : 'bbp_get_reply_revision_count';
826
  return apply_filters( 'bbp_get_reply_status', get_post_status( $reply_id ), $reply_id );
827
  }
828
 
829
+ /**
830
+ * Return array of public reply statuses.
831
+ *
832
+ * @since 2.6.0 bbPress (r6705)
833
+ *
834
+ * @return array
835
+ */
836
+ function bbp_get_public_reply_statuses() {
837
+ $statuses = array(
838
+ bbp_get_public_status_id()
839
+ );
840
+
841
+ // Filter & return
842
+ return (array) apply_filters( 'bbp_get_public_reply_statuses', $statuses );
843
+ }
844
+
845
+ /**
846
+ * Return array of non-public reply statuses.
847
+ *
848
+ * @since 2.6.0 bbPress (r6791)
849
+ *
850
+ * @return array
851
+ */
852
+ function bbp_get_non_public_reply_statuses() {
853
+ $statuses = array(
854
+ bbp_get_trash_status_id(),
855
+ bbp_get_spam_status_id(),
856
+ bbp_get_pending_status_id()
857
+ );
858
+
859
+ // Filter & return
860
+ return (array) apply_filters( 'bbp_get_non_public_reply_statuses', $statuses );
861
+ }
862
+
863
+ /**
864
+ * Is the reply publicly viewable?
865
+ *
866
+ * See bbp_get_public_reply_statuses() for public statuses.
867
+ *
868
+ * @since 2.6.0 bbPress (r6391)
869
+ *
870
+ * @param int $reply_id Optional. Reply id
871
+ * @return bool True if public, false if not.
872
+ */
873
+ function bbp_is_reply_public( $reply_id = 0 ) {
874
+ $reply_id = bbp_get_reply_id( $reply_id );
875
+ $status = bbp_get_reply_status( $reply_id );
876
+ $public = bbp_get_public_reply_statuses();
877
+ $is_public = in_array( $status, $public, true );
878
+
879
+ // Filter & return
880
+ return (bool) apply_filters( 'bbp_is_reply_public', $is_public, $reply_id );
881
+ }
882
+
883
  /**
884
  * Is the reply not spam or deleted?
885
  *
1194
 
1195
  // Tweak link title if empty
1196
  if ( empty( $r['link_title'] ) ) {
1197
+ $author = bbp_get_reply_author_display_name( $reply_id );
1198
+ $title = empty( $anonymous )
1199
+ ? esc_attr__( "View %s's profile", 'bbpress' )
1200
+ : esc_attr__( "Visit %s's website", 'bbpress' );
1201
+
1202
  $link_title = sprintf( $title, $author );
1203
 
1204
  // Use what was passed if not
1222
  $author_links['name'] = esc_html( bbp_get_reply_author_display_name( $reply_id ) );
1223
  }
1224
 
1225
+ // Empty array
1226
+ $links = array();
1227
+ $sprint = empty( $anonymous ) && bbp_user_has_profile( bbp_get_reply_author_id( $reply_id ) )
1228
+ ? '<a href="%1$s"%2$s%3$s>%4$s</a>'
1229
+ : '<span %2$s%3$s>%4$s</span>';
 
 
 
1230
 
1231
+ // Wrap each link
1232
+ foreach ( $author_links as $link => $link_text ) {
1233
+ $link_class = ' class="bbp-author-' . esc_attr( $link ) . '"';
1234
+ $links[] = sprintf( $sprint, esc_url( $author_url ), $link_title, $link_class, $link_text );
1235
+ }
 
 
 
 
 
1236
 
1237
+ // Role is not linked
1238
+ if ( true === $r['show_role'] ) {
1239
+ $links[] = bbp_get_reply_author_role( array( 'reply_id' => $reply_id ) );
1240
  }
1241
 
1242
+ // Juggle
1243
+ $author_links = $links;
1244
+ unset( $links );
1245
+
1246
  // Filter sections
1247
  $sections = apply_filters( 'bbp_get_reply_author_links', $author_links, $r, $args );
1248
 
includes/search/template.php CHANGED
@@ -25,7 +25,7 @@ function bbp_has_search_results( $args = array() ) {
25
  /** Defaults **************************************************************/
26
 
27
  $default_search_terms = bbp_get_search_terms();
28
- $default_post_types = get_post_types( array( 'source' => 'bbpress' ) );
29
 
30
  // Default query args
31
  $default = array(
@@ -202,6 +202,8 @@ function bbp_search_url() {
202
 
203
  // Pretty permalinks
204
  if ( bbp_use_pretty_urls() ) {
 
 
205
  $url = bbp_get_root_url() . bbp_get_search_slug();
206
  $url = user_trailingslashit( $url );
207
  $url = home_url( $url );
@@ -308,8 +310,8 @@ function bbp_search_terms( $search_terms = '' ) {
308
  }
309
  }
310
 
311
- // Trim whitespace and decode, or set explicitly to false if empty
312
- $search_terms = ! empty( $search_terms )
313
  ? urldecode( trim( $search_terms ) )
314
  : false;
315
 
@@ -333,15 +335,15 @@ function bbp_get_search_pagination_base() {
333
 
334
  // Shortcode territory
335
  if ( is_page() || is_single() ) {
336
- $base = trailingslashit( get_permalink() );
337
 
338
  // Default search location
339
  } else {
340
- $base = trailingslashit( bbp_get_search_results_url() );
341
  }
342
 
343
  // Add pagination base
344
- $base = $base . user_trailingslashit( bbp_get_paged_slug() . '/%#%/' );
345
 
346
  // Unpretty permalinks
347
  } else {
25
  /** Defaults **************************************************************/
26
 
27
  $default_search_terms = bbp_get_search_terms();
28
+ $default_post_types = bbp_get_post_types();
29
 
30
  // Default query args
31
  $default = array(
202
 
203
  // Pretty permalinks
204
  if ( bbp_use_pretty_urls() ) {
205
+
206
+ // Run through home_url()
207
  $url = bbp_get_root_url() . bbp_get_search_slug();
208
  $url = user_trailingslashit( $url );
209
  $url = home_url( $url );
310
  }
311
  }
312
 
313
+ // Trim whitespace & decode if non-empty string, or set to false
314
+ $search_terms = ! empty( $search_terms ) && is_string( $search_terms )
315
  ? urldecode( trim( $search_terms ) )
316
  : false;
317
 
335
 
336
  // Shortcode territory
337
  if ( is_page() || is_single() ) {
338
+ $base = get_permalink();
339
 
340
  // Default search location
341
  } else {
342
+ $base = bbp_get_search_results_url();
343
  }
344
 
345
  // Add pagination base
346
+ $base = trailingslashit( $base ) . user_trailingslashit( bbp_get_paged_slug() . '/%#%/' );
347
 
348
  // Unpretty permalinks
349
  } else {
includes/topics/capabilities.php CHANGED
@@ -54,10 +54,10 @@ function bbp_get_topic_tag_caps() {
54
  *
55
  * @since 2.2.0 bbPress (r4242)
56
  *
57
- * @param array $caps Capabilities for meta capability
58
- * @param string $cap Capability name
59
- * @param int $user_id User id
60
- * @param array $args Arguments
61
  *
62
  * @return array Actual capabilities for meta capability
63
  */
@@ -77,7 +77,12 @@ function bbp_map_topic_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
77
  // Do some post ID based logic
78
  } else {
79
 
80
- // Get the post
 
 
 
 
 
81
  $_post = get_post( $args[0] );
82
  if ( ! empty( $_post ) ) {
83
 
@@ -145,7 +150,12 @@ function bbp_map_topic_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
145
  // Used everywhere
146
  case 'edit_topic' :
147
 
148
- // Get the post
 
 
 
 
 
149
  $_post = get_post( $args[0] );
150
  if ( ! empty( $_post ) ) {
151
 
@@ -156,14 +166,18 @@ function bbp_map_topic_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
156
  if ( bbp_is_user_inactive( $user_id ) ) {
157
  $caps = array( 'do_not_allow' );
158
 
159
- // User is author so allow edit if not in admin
160
- } elseif ( ! is_admin() && ( (int) $user_id === (int) $_post->post_author ) ) {
161
- $caps = array( $post_type->cap->edit_posts );
162
-
163
  // Moderators can always edit forum content
164
  } elseif ( user_can( $user_id, 'moderate', $_post->ID ) ) {
165
  $caps = array( 'spectate' );
166
 
 
 
 
 
 
 
 
 
167
  // Unknown, so map to edit_others_posts
168
  } else {
169
  $caps = array( $post_type->cap->edit_others_posts );
@@ -176,7 +190,12 @@ function bbp_map_topic_meta_caps( $caps = array(), $cap = '', $user_id = 0, $arg
176
 
177
  case 'delete_topic' :
178
 
179
- // Get the post
 
 
 
 
 
180
  $_post = get_post( $args[0] );
181
  if ( ! empty( $_post ) ) {
182
 
@@ -241,16 +260,120 @@ function bbp_map_topic_tag_meta_caps( $caps, $cap, $user_id, $args ) {
241
 
242
  // What capability is being checked?
243
  switch ( $cap ) {
244
- case 'manage_topic_tags' :
245
- case 'edit_topic_tags' :
246
- case 'delete_topic_tags' :
247
- case 'assign_topic_tags' :
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
248
  case 'bbp_topic_tags_admin' :
249
 
250
  // Moderators can always edit
251
  if ( user_can( $user_id, 'moderate' ) ) {
252
  $caps = array( 'moderate' );
253
  }
 
 
254
  }
255
 
256
  // Filter & return
54
  *
55
  * @since 2.2.0 bbPress (r4242)
56
  *
57
+ * @param array $caps Capabilities for meta capability.
58
+ * @param string $cap Capability name.
59
+ * @param int $user_id User id.
60
+ * @param array $args Arguments.
61
  *
62
  * @return array Actual capabilities for meta capability
63
  */
77
  // Do some post ID based logic
78
  } else {
79
 
80
+ // Bail if no post ID
81
+ if ( empty( $args[0] ) ) {
82
+ return $caps;
83
+ }
84
+
85
+ // Get the post.
86
  $_post = get_post( $args[0] );
87
  if ( ! empty( $_post ) ) {
88
 
150
  // Used everywhere
151
  case 'edit_topic' :
152
 
153
+ // Bail if no post ID
154
+ if ( empty( $args[0] ) ) {
155
+ return $caps;
156
+ }
157
+
158
+ // Get the post.
159
  $_post = get_post( $args[0] );
160
  if ( ! empty( $_post ) ) {
161
 
166
  if ( bbp_is_user_inactive( $user_id ) ) {
167
  $caps = array( 'do_not_allow' );
168
 
 
 
 
 
169
  // Moderators can always edit forum content
170
  } elseif ( user_can( $user_id, 'moderate', $_post->ID ) ) {
171
  $caps = array( 'spectate' );
172
 
173
+ // User is author so allow edit if not in admin, unless it's past edit lock time
174
+ } elseif ( ! is_admin() && ( (int) $user_id === (int) $_post->post_author ) ) {
175
+
176
+ // Only allow if not past the edit-lock period
177
+ $caps = ! bbp_past_edit_lock( $_post->post_date_gmt )
178
+ ? array( $post_type->cap->edit_posts )
179
+ : array( 'do_not_allow' );
180
+
181
  // Unknown, so map to edit_others_posts
182
  } else {
183
  $caps = array( $post_type->cap->edit_others_posts );
190
 
191
  case 'delete_topic' :
192
 
193
+ // Bail if no post ID
194
+ if ( empty( $args[0] ) ) {
195
+ return $caps;
196
+ }
197
+
198
+ // Get the post.
199
  $_post = get_post( $args[0] );
200
  if ( ! empty( $_post ) ) {
201
 
260
 
261
  // What capability is being checked?
262
  switch ( $cap ) {
263
+
264
+ /** Assignment ********************************************************/
265
+
266
+ case 'assign_topic_tags' :
267
+
268
+ // Get post
269
+ $post_id = ! empty( $args[0] )
270
+ ? get_post( $args[0] )->ID
271
+ : 0;
272
+
273
+ // Add 'do_not_allow' cap if user is spam or deleted
274
+ if ( bbp_is_user_inactive( $user_id ) ) {
275
+ $caps = array( 'do_not_allow' );
276
+
277
+ // Moderators can always assign
278
+ } elseif ( user_can( $user_id, 'moderate', $post_id ) ) {
279
+ $caps = array( 'moderate' );
280
+
281
+ // Do not allow if topic tags are disabled
282
+ } elseif ( ! bbp_allow_topic_tags() ) {
283
+ $caps = array( 'do_not_allow' );
284
+ }
285
+
286
+ break;
287
+
288
+ /** Management ********************************************************/
289
+
290
+ case 'manage_topic_tags' :
291
+
292
+ // Moderators can always edit
293
+ if ( user_can( $user_id, 'moderate' ) ) {
294
+ $caps = array( 'moderate' );
295
+ }
296
+
297
+ break;
298
+
299
+ /** Editing ***********************************************************/
300
+
301
+ case 'edit_topic_tags' :
302
+
303
+ // Moderators can always edit
304
+ if ( user_can( $user_id, 'moderate' ) ) {
305
+ $caps = array( 'moderate' );
306
+ }
307
+
308
+ break;
309
+
310
+ case 'edit_topic_tag' :
311
+
312
+ // Get the term
313
+ $_tag = get_term( $args[0], bbp_get_topic_tag_tax_id() );
314
+ if ( ! empty( $_tag ) ) {
315
+
316
+ // Add 'do_not_allow' cap if user is spam or deleted
317
+ if ( bbp_is_user_inactive( $user_id ) ) {
318
+ $caps = array( 'do_not_allow' );
319
+
320
+ // Moderators can always edit topic tags
321
+ } elseif ( user_can( $user_id, 'moderate', $_tag->term_id ) ) {
322
+ $caps = array( 'spectate' );
323
+
324
+ // Fallback to edit_terms.
325
+ } else {
326
+ $taxonomy = get_taxonomy( bbp_get_topic_tag_tax_id() );
327
+ $caps = array( $taxonomy->cap->edit_terms );
328
+ }
329
+ }
330
+
331
+ break;
332
+
333
+ /** Deleting **********************************************************/
334
+
335
+ case 'delete_topic_tags' :
336
+
337
+ // Moderators can always edit
338
+ if ( user_can( $user_id, 'moderate' ) ) {
339
+ $caps = array( 'moderate' );
340
+ }
341
+
342
+ break;
343
+
344
+ case 'delete_topic_tag' :
345
+
346
+ // Get the term
347
+ $_tag = get_term( $args[0], bbp_get_topic_tag_tax_id() );
348
+ if ( ! empty( $_tag ) ) {
349
+
350
+ // Add 'do_not_allow' cap if user is spam or deleted
351
+ if ( bbp_is_user_inactive( $user_id ) ) {
352
+ $caps = array( 'do_not_allow' );
353
+
354
+ // Moderators can always delete topic tags
355
+ } elseif ( user_can( $user_id, 'moderate', $_tag->term_id ) ) {
356
+ $caps = array( 'spectate' );
357
+
358
+ // Fallback to delete_terms.
359
+ } else {
360
+ $taxonomy = get_taxonomy( $_tag->post_type );
361
+ $caps = array( $taxonomy->cap->delete_terms );
362
+ }
363
+ }
364
+
365
+ break;
366
+
367
+ /** Admin *************************************************************/
368
+
369
  case 'bbp_topic_tags_admin' :
370
 
371
  // Moderators can always edit
372
  if ( user_can( $user_id, 'moderate' ) ) {
373
  $caps = array( 'moderate' );
374
  }
375
+
376
+ break;
377
  }
378
 
379
  // Filter & return
includes/topics/functions.php CHANGED
@@ -158,6 +158,11 @@ function bbp_new_topic_handler( $action = '' ) {
158
  bbp_add_error( 'bbp_topic_title', __( '<strong>ERROR</strong>: Your topic needs a title.', 'bbpress' ) );
159
  }
160
 
 
 
 
 
 
161
  /** Topic Content *********************************************************/
162
 
163
  if ( ! empty( $_POST['bbp_topic_content'] ) ) {
@@ -248,10 +253,10 @@ function bbp_new_topic_handler( $action = '' ) {
248
  bbp_add_error( 'bbp_topic_duplicate', __( '<strong>ERROR</strong>: Duplicate topic detected; it looks as though you&#8217;ve already said that.', 'bbpress' ) );
249
  }
250
 
251
- /** Topic Blacklist *******************************************************/
252
 
253
- if ( ! bbp_check_for_blacklist( $anonymous_data, $topic_author, $topic_title, $topic_content ) ) {
254
- bbp_add_error( 'bbp_topic_blacklist', __( '<strong>ERROR</strong>: Your topic cannot be created at this time.', 'bbpress' ) );
255
  }
256
 
257
  /** Topic Status **********************************************************/
@@ -263,7 +268,7 @@ function bbp_new_topic_handler( $action = '' ) {
263
  if ( ! bbp_check_for_moderation( $anonymous_data, $topic_author, $topic_title, $topic_content ) ) {
264
  $topic_status = bbp_get_pending_status_id();
265
 
266
- // Check a whitelist of possible topic status ID's
267
  } elseif ( ! empty( $_POST['bbp_topic_status'] ) && in_array( $_POST['bbp_topic_status'], array_keys( $topic_statuses ), true ) ) {
268
  $topic_status = sanitize_key( $_POST['bbp_topic_status'] );
269
 
@@ -525,6 +530,11 @@ function bbp_edit_topic_handler( $action = '' ) {
525
  bbp_add_error( 'bbp_edit_topic_title', __( '<strong>ERROR</strong>: Your topic needs a title.', 'bbpress' ) );
526
  }
527
 
 
 
 
 
 
528
  /** Topic Content *********************************************************/
529
 
530
  if ( ! empty( $_POST['bbp_topic_content'] ) ) {
@@ -539,10 +549,10 @@ function bbp_edit_topic_handler( $action = '' ) {
539
  bbp_add_error( 'bbp_edit_topic_content', __( '<strong>ERROR</strong>: Your topic cannot be empty.', 'bbpress' ) );
540
  }
541
 
542
- /** Topic Blacklist *******************************************************/
543
 
544
- if ( ! bbp_check_for_blacklist( $anonymous_data, $topic_author, $topic_title, $topic_content ) ) {
545
- bbp_add_error( 'bbp_topic_blacklist', __( '<strong>ERROR</strong>: Your topic cannot be edited at this time.', 'bbpress' ) );
546
  }
547
 
548
  /** Topic Status **********************************************************/
@@ -558,7 +568,7 @@ function bbp_edit_topic_handler( $action = '' ) {
558
  $topic_status = bbp_get_pending_status_id();
559
  }
560
 
561
- // Check a whitelist of possible topic status ID's
562
  } elseif ( ! empty( $_POST['bbp_topic_status'] ) && in_array( $_POST['bbp_topic_status'], array_keys( $topic_statuses ), true ) ) {
563
  $topic_status = sanitize_key( $_POST['bbp_topic_status'] );
564
 
@@ -570,7 +580,7 @@ function bbp_edit_topic_handler( $action = '' ) {
570
  /** Topic Tags ************************************************************/
571
 
572
  // Either replace terms
573
- if ( bbp_allow_topic_tags() && current_user_can( 'assign_topic_tags' ) && ! empty( $_POST['bbp_topic_tags'] ) ) {
574
 
575
  // Escape tag input
576
  $terms = sanitize_text_field( $_POST['bbp_topic_tags'] );
@@ -772,7 +782,7 @@ function bbp_update_topic( $topic_id = 0, $forum_id = 0, $anonymous_data = array
772
  if ( ! empty( $anonymous_data ) ) {
773
 
774
  // Update anonymous meta data (not cookies)
775
- bbp_update_anonymous_post_author( $topic_id, $anonymous_data, 'topic' );
776
 
777
  // Set transient for throttle check (only on new, not edit)
778
  if ( empty( $is_edit ) ) {
@@ -822,6 +832,9 @@ function bbp_update_topic( $topic_id = 0, $forum_id = 0, $anonymous_data = array
822
  // Walk up ancestors and do the dirty work
823
  bbp_update_topic_walker( $topic_id, $last_active, $forum_id, 0, false );
824
  }
 
 
 
825
  }
826
 
827
  /**
@@ -877,9 +890,13 @@ function bbp_update_topic_walker( $topic_id, $last_active_time = '', $forum_id =
877
  // If ancestor is a forum, update counts
878
  if ( bbp_is_forum( $ancestor ) ) {
879
 
 
 
 
880
  // Update the forum
881
  bbp_update_forum( array(
882
- 'forum_id' => $ancestor,
 
883
  'last_topic_id' => $topic_id,
884
  'last_reply_id' => $reply_id,
885
  'last_active_id' => $active_id,
@@ -973,7 +990,7 @@ function bbp_move_topic_handler( $topic_id, $old_forum_id, $new_forum_id ) {
973
  $old_forum_ancestors = array_values( array_unique( array_merge( array( $old_forum_id ), (array) get_post_ancestors( $old_forum_id ) ) ) );
974
 
975
  // Get reply count.
976
- $public_reply_count = count( bbp_get_public_child_ids( $topic_id, bbp_get_reply_post_type() ) );
977
 
978
  // Topic status.
979
  $topic_status = get_post_field( 'post_status', $topic_id );
@@ -1680,7 +1697,7 @@ function bbp_edit_topic_tag_handler( $action = '' ) {
1680
  }
1681
 
1682
  // Can user edit topic tags?
1683
- if ( ! current_user_can( 'edit_topic_tags' ) ) {
1684
  bbp_add_error( 'bbp_manage_topic_tag_update_permission', __( '<strong>ERROR</strong>: You do not have permission to edit the topic tags.', 'bbpress' ) );
1685
  return;
1686
  }
@@ -1694,7 +1711,11 @@ function bbp_edit_topic_tag_handler( $action = '' ) {
1694
  // Attempt to update the tag
1695
  $slug = ! empty( $_POST['tag-slug'] ) ? $_POST['tag-slug'] : '';
1696
  $description = ! empty( $_POST['tag-description'] ) ? $_POST['tag-description'] : '';
1697
- $tag = wp_update_term( $tag_id, bbp_get_topic_tag_tax_id(), array( 'name' => $name, 'slug' => $slug, 'description' => $description ) );
 
 
 
 
1698
 
1699
  // Cannot update tag
1700
  if ( is_wp_error( $tag ) && $tag->get_error_message() ) {
@@ -1752,7 +1773,10 @@ function bbp_edit_topic_tag_handler( $action = '' ) {
1752
  }
1753
 
1754
  // Delete the old term
1755
- $tag = wp_delete_term( $tag_id, bbp_get_topic_tag_tax_id(), array( 'default' => $to_tag, 'force_default' => true ) );
 
 
 
1756
 
1757
  // Error merging the terms
1758
  if ( is_wp_error( $tag ) && $tag->get_error_message() ) {
@@ -1778,7 +1802,7 @@ function bbp_edit_topic_tag_handler( $action = '' ) {
1778
  }
1779
 
1780
  // Can user delete topic tags?
1781
- if ( ! current_user_can( 'delete_topic_tags' ) ) {
1782
  bbp_add_error( 'bbp_manage_topic_tag_delete_permission', __( '<strong>ERROR</strong>: You do not have permission to delete the topic tags.', 'bbpress' ) );
1783
  return;
1784
  }
@@ -2453,11 +2477,9 @@ function bbp_update_topic_reply_count( $topic_id = 0, $reply_count = 0 ) {
2453
  : bbp_get_topic_id( $topic_id );
2454
 
2455
  // Get replies of topic if not passed
2456
- if ( empty( $reply_count ) ) {
2457
- $reply_count = bbp_get_public_child_count( $topic_id, bbp_get_reply_post_type() );
2458
- }
2459
-
2460
- $reply_count = (int) $reply_count;
2461
 
2462
  update_post_meta( $topic_id, '_bbp_reply_count', $reply_count );
2463
 
@@ -2483,15 +2505,9 @@ function bbp_update_topic_reply_count_hidden( $topic_id = 0, $reply_count = 0 )
2483
  : bbp_get_topic_id( $topic_id );
2484
 
2485
  // Get replies of topic
2486
- if ( empty( $reply_count ) ) {
2487
- $statuses = bbp_get_non_public_topic_statuses();
2488
- $post_status = "'" . implode( "','", $statuses ) . "'";
2489
- $bbp_db = bbp_db();
2490
- $query = $bbp_db->prepare( "SELECT COUNT(ID) FROM {$bbp_db->posts} WHERE post_parent = %d AND post_status IN ( {$post_status} ) AND post_type = %s", $topic_id, bbp_get_reply_post_type() );
2491
- $reply_count = $bbp_db->get_var( $query );
2492
- }
2493
-
2494
- $reply_count = (int) $reply_count;
2495
 
2496
  update_post_meta( $topic_id, '_bbp_reply_count_hidden', $reply_count );
2497
 
@@ -2718,15 +2734,16 @@ function bbp_close_topic( $topic_id = 0 ) {
2718
  }
2719
 
2720
  // Get previous topic status meta
 
2721
  $topic_status = get_post_meta( $topic_id, '_bbp_status', true );
2722
 
2723
  // Bail if already closed and topic status meta exists
2724
- if ( bbp_get_closed_status_id() === $topic->post_status && ! empty( $topic_status ) ) {
2725
  return false;
2726
  }
2727
 
2728
  // Set status meta public
2729
- $topic_status = bbp_get_public_status_id();
2730
 
2731
  // Execute pre close code
2732
  do_action( 'bbp_close_topic', $topic_id );
@@ -2735,7 +2752,7 @@ function bbp_close_topic( $topic_id = 0 ) {
2735
  add_post_meta( $topic_id, '_bbp_status', $topic_status );
2736
 
2737
  // Set closed status
2738
- $topic->post_status = bbp_get_closed_status_id();
2739
 
2740
  // Toggle revisions off as we are not altering content
2741
  if ( post_type_supports( bbp_get_topic_post_type(), 'revisions' ) ) {
@@ -2835,8 +2852,11 @@ function bbp_spam_topic( $topic_id = 0 ) {
2835
  return $topic;
2836
  }
2837
 
 
 
 
2838
  // Bail if topic is spam
2839
- if ( bbp_get_spam_status_id() === $topic->post_status ) {
2840
  return false;
2841
  }
2842
 
@@ -2847,7 +2867,7 @@ function bbp_spam_topic( $topic_id = 0 ) {
2847
  do_action( 'bbp_spam_topic', $topic_id );
2848
 
2849
  // Set post status to spam
2850
- $topic->post_status = bbp_get_spam_status_id();
2851
 
2852
  // Empty the topic of its tags
2853
  $topic->tax_input = bbp_spam_topic_tags( $topic_id );
@@ -3138,8 +3158,11 @@ function bbp_approve_topic( $topic_id = 0 ) {
3138
  return $topic;
3139
  }
3140
 
 
 
 
3141
  // Bail if already approved
3142
- if ( bbp_get_pending_status_id() !== $topic->post_status ) {
3143
  return false;
3144
  }
3145
 
@@ -3147,7 +3170,7 @@ function bbp_approve_topic( $topic_id = 0 ) {
3147
  do_action( 'bbp_approve_topic', $topic_id );
3148
 
3149
  // Set publish status
3150
- $topic->post_status = bbp_get_public_status_id();
3151
 
3152
  // No revisions
3153
  remove_action( 'pre_post_update', 'wp_save_post_revision' );
@@ -3178,8 +3201,11 @@ function bbp_unapprove_topic( $topic_id = 0 ) {
3178
  return $topic;
3179
  }
3180
 
3181
- // Bail if already pending
3182
- if ( bbp_get_pending_status_id() === $topic->post_status ) {
 
 
 
3183
  return false;
3184
  }
3185
 
@@ -3187,7 +3213,7 @@ function bbp_unapprove_topic( $topic_id = 0 ) {
3187
  do_action( 'bbp_unapprove_topic', $topic_id );
3188
 
3189
  // Set pending status
3190
- $topic->post_status = bbp_get_pending_status_id();
3191
 
3192
  // No revisions
3193
  remove_action( 'pre_post_update', 'wp_save_post_revision' );
@@ -3650,7 +3676,7 @@ function bbp_display_topics_feed_rss2( $topics_query = array() ) {
3650
  }
3651
 
3652
  // Feed title
3653
- $title = get_bloginfo_rss( 'name' ) . ' &#187; ' . __( 'All Topics', 'bbpress' );
3654
  $title = apply_filters( 'wp_title_rss', $title );
3655
 
3656
  // Display the feed
@@ -3669,12 +3695,12 @@ function bbp_display_topics_feed_rss2( $topics_query = array() ) {
3669
 
3670
  <channel>
3671
 
3672
- <title><?php echo $title; ?></title>
3673
  <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
3674
  <link><?php self_link(); ?></link>
3675
  <description><?php //?></description>
3676
  <lastBuildDate><?php echo date( 'r' ); ?></lastBuildDate>
3677
- <generator>https://bbpress.org/?v=<?php bbp_version(); ?></generator>
3678
  <language><?php bloginfo_rss( 'language' ); ?></language>
3679
 
3680
  <?php do_action( 'bbp_feed_head' ); ?>
@@ -3722,7 +3748,7 @@ function bbp_display_topics_feed_rss2( $topics_query = array() ) {
3722
  /** Permissions ***************************************************************/
3723
 
3724
  /**
3725
- * Redirect if unathorized user is attempting to edit a topic
3726
  *
3727
  * @since 2.1.0 bbPress (r3605)
3728
  */
@@ -3740,7 +3766,7 @@ function bbp_check_topic_edit() {
3740
  }
3741
 
3742
  /**
3743
- * Redirect if unathorized user is attempting to edit a topic tag
3744
  *
3745
  * @since 2.1.0 bbPress (r3605)
3746
  */
@@ -3752,7 +3778,7 @@ function bbp_check_topic_tag_edit() {
3752
  }
3753
 
3754
  // Bail if current user cannot edit topic tags
3755
- if ( ! current_user_can( 'edit_topic_tags', bbp_get_topic_tag_id() ) ) {
3756
  bbp_redirect( bbp_get_topic_tag_link() );
3757
  }
3758
  }
158
  bbp_add_error( 'bbp_topic_title', __( '<strong>ERROR</strong>: Your topic needs a title.', 'bbpress' ) );
159
  }
160
 
161
+ // Title too long
162
+ if ( bbp_is_title_too_long( $topic_title ) ) {
163
+ bbp_add_error( 'bbp_topic_title', __( '<strong>ERROR</strong>: Your title is too long.', 'bbpress' ) );
164
+ }
165
+
166
  /** Topic Content *********************************************************/
167
 
168
  if ( ! empty( $_POST['bbp_topic_content'] ) ) {
253
  bbp_add_error( 'bbp_topic_duplicate', __( '<strong>ERROR</strong>: Duplicate topic detected; it looks as though you&#8217;ve already said that.', 'bbpress' ) );
254
  }
255
 
256
+ /** Topic Bad Words *******************************************************/
257
 
258
+ if ( ! bbp_check_for_moderation( $anonymous_data, $topic_author, $topic_title, $topic_content, true ) ) {
259
+ bbp_add_error( 'bbp_topic_moderation', __( '<strong>ERROR</strong>: Your topic cannot be created at this time.', 'bbpress' ) );
260
  }
261
 
262
  /** Topic Status **********************************************************/
268
  if ( ! bbp_check_for_moderation( $anonymous_data, $topic_author, $topic_title, $topic_content ) ) {
269
  $topic_status = bbp_get_pending_status_id();
270
 
271
+ // Check possible topic status ID's
272
  } elseif ( ! empty( $_POST['bbp_topic_status'] ) && in_array( $_POST['bbp_topic_status'], array_keys( $topic_statuses ), true ) ) {
273
  $topic_status = sanitize_key( $_POST['bbp_topic_status'] );
274
 
530
  bbp_add_error( 'bbp_edit_topic_title', __( '<strong>ERROR</strong>: Your topic needs a title.', 'bbpress' ) );
531
  }
532
 
533
+ // Title too long
534
+ if ( bbp_is_title_too_long( $topic_title ) ) {
535
+ bbp_add_error( 'bbp_topic_title', __( '<strong>ERROR</strong>: Your title is too long.', 'bbpress' ) );
536
+ }
537
+
538
  /** Topic Content *********************************************************/
539
 
540
  if ( ! empty( $_POST['bbp_topic_content'] ) ) {
549
  bbp_add_error( 'bbp_edit_topic_content', __( '<strong>ERROR</strong>: Your topic cannot be empty.', 'bbpress' ) );
550
  }
551
 
552
+ /** Topic Bad Words *******************************************************/
553
 
554
+ if ( ! bbp_check_for_moderation( $anonymous_data, $topic_author, $topic_title, $topic_content, true ) ) {
555
+ bbp_add_error( 'bbp_topic_moderation', __( '<strong>ERROR</strong>: Your topic cannot be edited at this time.', 'bbpress' ) );
556
  }
557
 
558
  /** Topic Status **********************************************************/
568
  $topic_status = bbp_get_pending_status_id();
569
  }
570
 
571
+ // Check possible topic status ID's
572
  } elseif ( ! empty( $_POST['bbp_topic_status'] ) && in_array( $_POST['bbp_topic_status'], array_keys( $topic_statuses ), true ) ) {
573
  $topic_status = sanitize_key( $_POST['bbp_topic_status'] );
574
 
580
  /** Topic Tags ************************************************************/
581
 
582
  // Either replace terms
583
+ if ( bbp_allow_topic_tags() && current_user_can( 'assign_topic_tags', $topic_id ) && ! empty( $_POST['bbp_topic_tags'] ) ) {
584
 
585
  // Escape tag input
586
  $terms = sanitize_text_field( $_POST['bbp_topic_tags'] );
782
  if ( ! empty( $anonymous_data ) ) {
783
 
784
  // Update anonymous meta data (not cookies)
785
+ bbp_update_anonymous_post_author( $topic_id, $anonymous_data, bbp_get_topic_post_type() );
786
 
787
  // Set transient for throttle check (only on new, not edit)
788
  if ( empty( $is_edit ) ) {
832
  // Walk up ancestors and do the dirty work
833
  bbp_update_topic_walker( $topic_id, $last_active, $forum_id, 0, false );
834
  }
835
+
836
+ // Bump the custom query cache
837
+ wp_cache_set( 'last_changed', microtime(), 'bbpress_posts' );
838
  }
839
 
840
  /**
890
  // If ancestor is a forum, update counts
891
  if ( bbp_is_forum( $ancestor ) ) {
892
 
893
+ // Get the forum
894
+ $forum = bbp_get_forum( $ancestor );
895
+
896
  // Update the forum
897
  bbp_update_forum( array(
898
+ 'forum_id' => $forum->ID,
899
+ 'post_parent' => $forum->post_parent,
900
  'last_topic_id' => $topic_id,
901
  'last_reply_id' => $reply_id,
902
  'last_active_id' => $active_id,
990
  $old_forum_ancestors = array_values( array_unique( array_merge( array( $old_forum_id ), (array) get_post_ancestors( $old_forum_id ) ) ) );
991
 
992
  // Get reply count.
993
+ $public_reply_count = bbp_get_public_child_count( $topic_id, bbp_get_reply_post_type() );
994
 
995
  // Topic status.
996
  $topic_status = get_post_field( 'post_status', $topic_id );
1697
  }
1698
 
1699
  // Can user edit topic tags?
1700
+ if ( ! current_user_can( 'edit_topic_tag', $tag_id ) ) {
1701
  bbp_add_error( 'bbp_manage_topic_tag_update_permission', __( '<strong>ERROR</strong>: You do not have permission to edit the topic tags.', 'bbpress' ) );
1702
  return;
1703
  }
1711
  // Attempt to update the tag
1712
  $slug = ! empty( $_POST['tag-slug'] ) ? $_POST['tag-slug'] : '';
1713
  $description = ! empty( $_POST['tag-description'] ) ? $_POST['tag-description'] : '';
1714
+ $tag = wp_update_term( $tag_id, bbp_get_topic_tag_tax_id(), array(
1715
+ 'name' => $name,
1716
+ 'slug' => $slug,
1717
+ 'description' => $description
1718
+ ) );
1719
 
1720
  // Cannot update tag
1721
  if ( is_wp_error( $tag ) && $tag->get_error_message() ) {
1773
  }
1774
 
1775
  // Delete the old term
1776
+ $tag = wp_delete_term( $tag_id, bbp_get_topic_tag_tax_id(), array(
1777
+ 'default' => $to_tag,
1778
+ 'force_default' => true
1779
+ ) );
1780
 
1781
  // Error merging the terms
1782
  if ( is_wp_error( $tag ) && $tag->get_error_message() ) {
1802
  }
1803
 
1804
  // Can user delete topic tags?
1805
+ if ( ! current_user_can( 'delete_topic_tag', $tag_id ) ) {
1806
  bbp_add_error( 'bbp_manage_topic_tag_delete_permission', __( '<strong>ERROR</strong>: You do not have permission to delete the topic tags.', 'bbpress' ) );
1807
  return;
1808
  }
2477
  : bbp_get_topic_id( $topic_id );
2478
 
2479
  // Get replies of topic if not passed
2480
+ $reply_count = empty( $reply_count )
2481
+ ? bbp_get_public_child_count( $topic_id, bbp_get_reply_post_type() )
2482
+ : (int) $reply_count;
 
 
2483
 
2484
  update_post_meta( $topic_id, '_bbp_reply_count', $reply_count );
2485
 
2505
  : bbp_get_topic_id( $topic_id );
2506
 
2507
  // Get replies of topic
2508
+ $reply_count = empty( $reply_count )
2509
+ ? bbp_get_non_public_child_count( $topic_id, bbp_get_reply_post_type() )
2510
+ : (int) $reply_count;
 
 
 
 
 
 
2511
 
2512
  update_post_meta( $topic_id, '_bbp_reply_count_hidden', $reply_count );
2513
 
2734
  }
2735
 
2736
  // Get previous topic status meta
2737
+ $status = bbp_get_closed_status_id();
2738
  $topic_status = get_post_meta( $topic_id, '_bbp_status', true );
2739
 
2740
  // Bail if already closed and topic status meta exists
2741
+ if ( $status === $topic->post_status && ! empty( $topic_status ) ) {
2742
  return false;
2743
  }
2744
 
2745
  // Set status meta public
2746
+ $topic_status = $topic->post_status;
2747
 
2748
  // Execute pre close code
2749
  do_action( 'bbp_close_topic', $topic_id );
2752
  add_post_meta( $topic_id, '_bbp_status', $topic_status );
2753
 
2754
  // Set closed status
2755
+ $topic->post_status = $status;
2756
 
2757
  // Toggle revisions off as we are not altering content
2758
  if ( post_type_supports( bbp_get_topic_post_type(), 'revisions' ) ) {
2852
  return $topic;
2853
  }
2854
 
2855
+ // Get new status
2856
+ $status = bbp_get_spam_status_id();
2857
+
2858
  // Bail if topic is spam
2859
+ if ( $status === $topic->post_status ) {
2860
  return false;
2861
  }
2862
 
2867
  do_action( 'bbp_spam_topic', $topic_id );
2868
 
2869
  // Set post status to spam
2870
+ $topic->post_status = $status;
2871
 
2872
  // Empty the topic of its tags
2873
  $topic->tax_input = bbp_spam_topic_tags( $topic_id );
3158
  return $topic;
3159
  }
3160
 
3161
+ // Get new status
3162
+ $status = bbp_get_public_status_id();
3163
+
3164
  // Bail if already approved
3165
+ if ( $status === $topic->post_status ) {
3166
  return false;
3167
  }
3168
 
3170
  do_action( 'bbp_approve_topic', $topic_id );
3171
 
3172
  // Set publish status
3173
+ $topic->post_status = $status;
3174
 
3175
  // No revisions
3176
  remove_action( 'pre_post_update', 'wp_save_post_revision' );
3201
  return $topic;
3202
  }
3203
 
3204
+ // Get new status
3205
+ $status = bbp_get_pending_status_id();
3206
+
3207
+ // Bail if already unapproved
3208
+ if ( ! bbp_is_topic_public( $topic_id ) ) {
3209
  return false;
3210
  }
3211
 
3213
  do_action( 'bbp_unapprove_topic', $topic_id );
3214
 
3215
  // Set pending status
3216
+ $topic->post_status = $status;
3217
 
3218
  // No revisions
3219
  remove_action( 'pre_post_update', 'wp_save_post_revision' );
3676
  }
3677
 
3678
  // Feed title
3679
+ $title = get_bloginfo_rss( 'name' ) . ' &#187; ' . esc_html__( 'All Topics', 'bbpress' );
3680
  $title = apply_filters( 'wp_title_rss', $title );
3681
 
3682
  // Display the feed
3695
 
3696
  <channel>
3697
 
3698
+ <title><?php echo $title; // Already escaped ?></title>
3699
  <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
3700
  <link><?php self_link(); ?></link>
3701
  <description><?php //?></description>
3702
  <lastBuildDate><?php echo date( 'r' ); ?></lastBuildDate>
3703
+ <generator><?php echo esc_url_raw( 'https://bbpress.org/?v=' . convert_chars( bbp_get_version() ) ); ?></generator>
3704
  <language><?php bloginfo_rss( 'language' ); ?></language>
3705
 
3706
  <?php do_action( 'bbp_feed_head' ); ?>
3748
  /** Permissions ***************************************************************/
3749
 
3750
  /**
3751
+ * Redirect if unauthorized user is attempting to edit a topic
3752
  *
3753
  * @since 2.1.0 bbPress (r3605)
3754
  */
3766
  }
3767
 
3768
  /**
3769
+ * Redirect if unauthorized user is attempting to edit a topic tag
3770
  *
3771
  * @since 2.1.0 bbPress (r3605)
3772
  */
3778
  }
3779
 
3780
  // Bail if current user cannot edit topic tags
3781
+ if ( ! current_user_can( 'edit_topic_tag', bbp_get_topic_tag_id() ) ) {
3782
  bbp_redirect( bbp_get_topic_tag_link() );
3783
  }
3784
  }
includes/topics/template.php CHANGED
@@ -44,25 +44,37 @@ function bbp_get_topic_post_type_labels() {
44
 
45
  // Filter & return
46
  return (array) apply_filters( 'bbp_get_topic_post_type_labels', array(
47
- 'name' => __( 'Topics', 'bbpress' ),
48
- 'menu_name' => __( 'Topics', 'bbpress' ),
49
- 'singular_name' => __( 'Topic', 'bbpress' ),
50
- 'all_items' => __( 'All Topics', 'bbpress' ),
51
- 'add_new' => __( 'Add New', 'bbpress' ),
52
- 'add_new_item' => __( 'Create New Topic', 'bbpress' ),
53
- 'edit' => __( 'Edit', 'bbpress' ),
54
- 'edit_item' => __( 'Edit Topic', 'bbpress' ),
55
- 'new_item' => __( 'New Topic', 'bbpress' ),
56
- 'view' => __( 'View Topic', 'bbpress' ),
57
- 'view_item' => __( 'View Topic', 'bbpress' ),
58
- 'view_items' => __( 'View Topics', 'bbpress' ),
59
- 'search_items' => __( 'Search Topics', 'bbpress' ),
60
- 'not_found' => __( 'No topics found', 'bbpress' ),
61
- 'not_found_in_trash' => __( 'No topics found in Trash', 'bbpress' ),
62
- 'filter_items_list' => __( 'Filter topics list', 'bbpress' ),
63
- 'items_list' => __( 'Topics list', 'bbpress' ),
64
- 'items_list_navigation' => __( 'Topics list navigation', 'bbpress' ),
65
- 'parent_item_colon' => __( 'Forum:', 'bbpress' )
 
 
 
 
 
 
 
 
 
 
 
 
66
  ) );
67
  }
68
 
@@ -308,9 +320,10 @@ function bbp_the_topic() {
308
  */
309
  function bbp_add_sticky_topics( &$query, $args = array() ) {
310
 
311
- // Bail if overloaded
312
- if ( null !== apply_filters( 'bbp_pre_add_stick_topics', null, $query, $args ) ) {
313
- return;
 
314
  }
315
 
316
  // Parse arguments against what gets used locally
@@ -704,7 +717,7 @@ function bbp_topic_excerpt( $topic_id = 0, $length = 100 ) {
704
  }
705
 
706
  if ( ! empty( $length ) && ( $excerpt_length > $length ) ) {
707
- $excerpt = substr( $excerpt, 0, $length - 1 );
708
  $excerpt .= '&hellip;';
709
  }
710
 
@@ -908,9 +921,9 @@ function bbp_topic_revision_log( $topic_id = 0 ) {
908
 
909
  $retval .= "\t" . '<li id="bbp-topic-revision-log-' . esc_attr( $topic_id ) . '-item-' . esc_attr( $revision->ID ) . '" class="bbp-topic-revision-log-item">' . "\n";
910
  if ( ! empty( $reason ) ) {
911
- $retval .= "\t\t" . sprintf( __( 'This topic was modified %1$s by %2$s. Reason: %3$s', 'bbpress' ), esc_html( $since ), $author, esc_html( $reason ) ) . "\n";
912
  } else {
913
- $retval .= "\t\t" . sprintf( __( 'This topic was modified %1$s by %2$s.', 'bbpress' ), esc_html( $since ), $author ) . "\n";
914
  }
915
  $retval .= "\t" . '</li>' . "\n";
916
  }
@@ -964,7 +977,7 @@ function bbp_get_topic_revisions( $topic_id = 0 ) {
964
  */
965
  function bbp_get_topic_revision_count( $topic_id = 0, $integer = false ) {
966
  $topic_id = bbp_get_topic_id( $topic_id );
967
- $count = bbp_number_not_negative( count( bbp_get_topic_revisions( $topic_id ) ) );
968
  $filter = ( true === $integer )
969
  ? 'bbp_get_topic_revision_count_int'
970
  : 'bbp_get_topic_revision_count';
@@ -1440,10 +1453,11 @@ function bbp_topic_author_link( $args = array() ) {
1440
 
1441
  // Tweak link title if empty
1442
  if ( empty( $r['link_title'] ) ) {
1443
- $author = bbp_get_topic_author_display_name( $topic_id );
1444
- $title = empty( $anonymous )
1445
- ? __( 'View %s\'s profile', 'bbpress' )
1446
- : __( 'Visit %s\'s website', 'bbpress' );
 
1447
  $link_title = sprintf( $title, $author );
1448
 
1449
  // Use what was passed if not
@@ -1467,31 +1481,27 @@ function bbp_topic_author_link( $args = array() ) {
1467
  $author_links['name'] = esc_html( bbp_get_topic_author_display_name( $topic_id ) );
1468
  }
1469
 
1470
- // Link class
1471
- $link_class = ' class="bbp-author-' . esc_attr( $r['type'] ) . '"';
1472
-
1473
- // Add links if not anonymous
1474
- if ( empty( $anonymous ) && bbp_user_has_profile( bbp_get_topic_author_id( $topic_id ) ) ) {
1475
 
1476
- // Empty array
1477
- $links = array();
1478
-
1479
- // Assemble the links
1480
- foreach ( $author_links as $link => $link_text ) {
1481
- $link_class = ' class="bbp-author-' . esc_attr( $link ) . '"';
1482
- $links[] = sprintf( '<a href="%1$s"%2$s%3$s>%4$s</a>', esc_url( $author_url ), $link_title, $link_class, $link_text );
1483
- }
1484
-
1485
- // Role is not linked
1486
- if ( true === $r['show_role'] ) {
1487
- $links[] = bbp_get_topic_author_role( array( 'topic_id' => $topic_id ) );
1488
- }
1489
 
1490
- // Juggle
1491
- $author_links = $links;
1492
- unset( $links );
1493
  }
1494
 
 
 
 
 
1495
  // Filter sections
1496
  $sections = apply_filters( 'bbp_get_topic_author_links', $author_links, $r, $args );
1497
 
@@ -1782,13 +1792,14 @@ function bbp_topic_subscription_link( $args = array() ) {
1782
 
1783
  // Defaults
1784
  $retval = false;
 
1785
  $redirect_to = bbp_is_subscriptions()
1786
- ? bbp_get_subscriptions_permalink()
1787
  : '';
1788
 
1789
  // Parse the arguments
1790
  $r = bbp_parse_args( $args, array(
1791
- 'user_id' => bbp_get_current_user_id(),
1792
  'object_id' => bbp_get_topic_id(),
1793
  'object_type' => 'post',
1794
  'before' => '&nbsp;|&nbsp;',
@@ -1829,13 +1840,14 @@ function bbp_topic_favorite_link( $args = array() ) {
1829
 
1830
  // No link
1831
  $retval = false;
 
1832
  $redirect_to = bbp_is_favorites()
1833
- ? bbp_get_favorites_permalink()
1834
  : '';
1835
 
1836
  // Parse the arguments
1837
  $r = bbp_parse_args( $args, array(
1838
- 'user_id' => bbp_get_current_user_id(),
1839
  'object_id' => bbp_get_topic_id(),
1840
  'object_type' => 'post',
1841
  'before' => '',
@@ -2076,7 +2088,7 @@ function bbp_topic_reply_count( $topic_id = 0, $integer = false ) {
2076
  */
2077
  function bbp_get_topic_reply_count( $topic_id = 0, $integer = false ) {
2078
  $topic_id = bbp_get_topic_id( $topic_id );
2079
- $replies = bbp_number_not_negative( get_post_meta( $topic_id, '_bbp_reply_count', true ) );
2080
  $filter = ( true === $integer )
2081
  ? 'bbp_get_topic_reply_count_int'
2082
  : 'bbp_get_topic_reply_count';
@@ -2106,7 +2118,7 @@ function bbp_topic_post_count( $topic_id = 0, $integer = false ) {
2106
  */
2107
  function bbp_get_topic_post_count( $topic_id = 0, $integer = false ) {
2108
  $topic_id = bbp_get_topic_id( $topic_id );
2109
- $replies = bbp_number_not_negative( get_post_meta( $topic_id, '_bbp_reply_count', true ) + 1 );
2110
  $filter = ( true === $integer )
2111
  ? 'bbp_get_topic_post_count_int'
2112
  : 'bbp_get_topic_post_count';
@@ -2138,7 +2150,7 @@ function bbp_topic_reply_count_hidden( $topic_id = 0, $integer = false ) {
2138
  */
2139
  function bbp_get_topic_reply_count_hidden( $topic_id = 0, $integer = false ) {
2140
  $topic_id = bbp_get_topic_id( $topic_id );
2141
- $replies = bbp_number_not_negative( get_post_meta( $topic_id, '_bbp_reply_count_hidden', true ) );
2142
  $filter = ( true === $integer )
2143
  ? 'bbp_get_topic_reply_count_hidden_int'
2144
  : 'bbp_get_topic_reply_count_hidden';
@@ -2166,7 +2178,7 @@ function bbp_topic_voice_count( $topic_id = 0, $integer = false ) {
2166
  */
2167
  function bbp_get_topic_voice_count( $topic_id = 0, $integer = false ) {
2168
  $topic_id = bbp_get_topic_id( $topic_id );
2169
- $voices = bbp_number_not_negative( get_post_meta( $topic_id, '_bbp_voice_count', true ) );
2170
  $filter = ( true === $integer )
2171
  ? 'bbp_get_topic_voice_count_int'
2172
  : 'bbp_get_topic_voice_count';
@@ -2549,7 +2561,7 @@ function bbp_topic_trash_link( $args = array() ) {
2549
  }
2550
 
2551
  if ( bbp_is_topic_trash( $topic->ID ) || empty( $trash_days ) ) {
2552
- $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' ) ) . '\' );" class="bbp-topic-delete-link">' . $r['delete_text'] . '</a>';
2553
  }
2554
 
2555
  // Process the admin links
@@ -3060,12 +3072,12 @@ function bbp_topic_notices() {
3060
 
3061
  // Spam notice
3062
  case bbp_get_spam_status_id() :
3063
- $notice_text = __( 'This topic is marked as spam.', 'bbpress' );
3064
  break;
3065
 
3066
  // Trashed notice
3067
  case bbp_get_trash_status_id() :
3068
- $notice_text = __( 'This topic is in the trash.', 'bbpress' );
3069
  break;
3070
 
3071
  // Standard status
@@ -3376,20 +3388,28 @@ function bbp_get_topic_tag_tax_labels() {
3376
 
3377
  // Filter & return
3378
  return (array) apply_filters( 'bbp_get_topic_tag_tax_labels', array(
3379
- 'name' => __( 'Topic Tags', 'bbpress' ),
3380
- 'singular_name' => __( 'Topic Tag', 'bbpress' ),
3381
- 'search_items' => __( 'Search Tags', 'bbpress' ),
3382
- 'popular_items' => __( 'Popular Tags', 'bbpress' ),
3383
- 'all_items' => __( 'All Tags', 'bbpress' ),
3384
- 'edit_item' => __( 'Edit Tag', 'bbpress' ),
3385
- 'update_item' => __( 'Update Tag', 'bbpress' ),
3386
- 'add_new_item' => __( 'Add New Tag', 'bbpress' ),
3387
- 'new_item_name' => __( 'New Tag Name', 'bbpress' ),
3388
- 'view_item' => __( 'View Topic Tag', 'bbpress' ),
3389
- 'view_items' => __( 'View Topic Tags', 'bbpress' ),
3390
- 'items_list' => __( 'Topic tags list', 'bbpress' ),
3391
- 'items_list_navigation' => __( 'Topic tags list navigation', 'bbpress' ),
3392
- 'separate_items_with_commas' => __( 'Separate topic tags with commas', 'bbpress' )
 
 
 
 
 
 
 
 
3393
  ) );
3394
  }
3395
 
@@ -3825,32 +3845,21 @@ function bbp_form_topic_subscribed() {
3825
  */
3826
  function bbp_get_form_topic_subscribed() {
3827
 
 
 
 
3828
  // Get _POST data
3829
  if ( bbp_is_topic_form_post_request() && isset( $_POST['bbp_topic_subscription'] ) ) {
3830
  $topic_subscribed = (bool) $_POST['bbp_topic_subscription'];
3831
 
3832
  // Get edit data
3833
  } elseif ( bbp_is_topic_edit() || bbp_is_reply_edit() ) {
3834
-
3835
- // Get current posts author
3836
- $post_author = bbp_get_global_post_field( 'post_author', 'raw' );
3837
-
3838
- // Post author is not the current user
3839
- if ( bbp_get_current_user_id() !== $post_author ) {
3840
- $topic_subscribed = bbp_is_user_subscribed( $post_author, bbp_get_topic_id() );
3841
-
3842
- // Post author is the current user
3843
- } else {
3844
- $topic_subscribed = bbp_is_user_subscribed( bbp_get_current_user_id(), bbp_get_topic_id() );
3845
- }
3846
 
3847
  // Get current status
3848
  } elseif ( bbp_is_single_topic() ) {
3849
  $topic_subscribed = bbp_is_user_subscribed( bbp_get_current_user_id(), bbp_get_topic_id() );
3850
-
3851
- // No data
3852
- } else {
3853
- $topic_subscribed = false;
3854
  }
3855
 
3856
  // Get checked output
@@ -3948,7 +3957,7 @@ function bbp_is_topic_form_post_request() {
3948
  }
3949
 
3950
  // Editing an existing topic
3951
- if ( bbp_verify_nonce_request( 'bbp-edit-topic' ) ) {
3952
  return true;
3953
  }
3954
 
44
 
45
  // Filter & return
46
  return (array) apply_filters( 'bbp_get_topic_post_type_labels', array(
47
+ 'name' => esc_attr__( 'Topics', 'bbpress' ),
48
+ 'menu_name' => esc_attr__( 'Topics', 'bbpress' ),
49
+ 'singular_name' => esc_attr__( 'Topic', 'bbpress' ),
50
+ 'all_items' => esc_attr__( 'All Topics', 'bbpress' ),
51
+ 'add_new' => esc_attr__( 'Add New', 'bbpress' ),
52
+ 'add_new_item' => esc_attr__( 'Create New Topic', 'bbpress' ),
53
+ 'edit' => esc_attr__( 'Edit', 'bbpress' ),
54
+ 'edit_item' => esc_attr__( 'Edit Topic', 'bbpress' ),
55
+ 'new_item' => esc_attr__( 'New Topic', 'bbpress' ),
56
+ 'view' => esc_attr__( 'View Topic', 'bbpress' ),
57
+ 'view_item' => esc_attr__( 'View Topic', 'bbpress' ),
58
+ 'view_items' => esc_attr__( 'View Topics', 'bbpress' ),
59
+ 'search_items' => esc_attr__( 'Search Topics', 'bbpress' ),
60
+ 'not_found' => esc_attr__( 'No topics found', 'bbpress' ),
61
+ 'not_found_in_trash' => esc_attr__( 'No topics found in Trash', 'bbpress' ),
62
+ 'filter_items_list' => esc_attr__( 'Filter topics list', 'bbpress' ),
63
+ 'items_list' => esc_attr__( 'Topics list', 'bbpress' ),
64
+ 'items_list_navigation' => esc_attr__( 'Topics list navigation', 'bbpress' ),
65
+ 'parent_item_colon' => esc_attr__( 'Forum:', 'bbpress' ),
66
+ 'all_items' => esc_attr__( 'All Topics', 'bbpress' ),
67
+ 'archives' => esc_attr__( 'Forum Topics', 'bbpress' ),
68
+ 'attributes' => esc_attr__( 'Topic Attributes', 'bbpress' ),
69
+ 'insert_into_item' => esc_attr__( 'Insert into topic', 'bbpress' ),
70
+ 'uploaded_to_this_item' => esc_attr__( 'Uploaded to this topic', 'bbpress' ),
71
+ 'featured_image' => esc_attr__( 'Topic Image', 'bbpress' ),
72
+ 'set_featured_image' => esc_attr__( 'Set topic image', 'bbpress' ),
73
+ 'remove_featured_image' => esc_attr__( 'Remove topic image', 'bbpress' ),
74
+ 'use_featured_image' => esc_attr__( 'Use as topic image', 'bbpress' ),
75
+ 'filter_items_list' => esc_attr__( 'Filter topic list', 'bbpress' ),
76
+ 'items_list_navigation' => esc_attr__( 'Topic list navigation', 'bbpress' ),
77
+ 'items_list' => esc_attr__( 'Topic list', 'bbpress' )
78
  ) );
79
  }
80
 
320
  */
321
  function bbp_add_sticky_topics( &$query, $args = array() ) {
322
 
323
+ // Bail if intercepted
324
+ $intercept = bbp_maybe_intercept( __FUNCTION__, func_get_args() );
325
+ if ( bbp_is_intercepted( $intercept ) ) {
326
+ return $intercept;
327
  }
328
 
329
  // Parse arguments against what gets used locally
717
  }
718
 
719
  if ( ! empty( $length ) && ( $excerpt_length > $length ) ) {
720
+ $excerpt = mb_substr( $excerpt, 0, $length - 1 );
721
  $excerpt .= '&hellip;';
722
  }
723
 
921
 
922
  $retval .= "\t" . '<li id="bbp-topic-revision-log-' . esc_attr( $topic_id ) . '-item-' . esc_attr( $revision->ID ) . '" class="bbp-topic-revision-log-item">' . "\n";
923
  if ( ! empty( $reason ) ) {
924
+ $retval .= "\t\t" . sprintf( esc_html__( 'This topic was modified %1$s by %2$s. Reason: %3$s', 'bbpress' ), esc_html( $since ), $author, esc_html( $reason ) ) . "\n";
925
  } else {
926
+ $retval .= "\t\t" . sprintf( esc_html__( 'This topic was modified %1$s by %2$s.', 'bbpress' ), esc_html( $since ), $author ) . "\n";
927
  }
928
  $retval .= "\t" . '</li>' . "\n";
929
  }
977
  */
978
  function bbp_get_topic_revision_count( $topic_id = 0, $integer = false ) {
979
  $topic_id = bbp_get_topic_id( $topic_id );
980
+ $count = count( bbp_get_topic_revisions( $topic_id ) );
981
  $filter = ( true === $integer )
982
  ? 'bbp_get_topic_revision_count_int'
983
  : 'bbp_get_topic_revision_count';
1453
 
1454
  // Tweak link title if empty
1455
  if ( empty( $r['link_title'] ) ) {
1456
+ $author = bbp_get_topic_author_display_name( $topic_id );
1457
+ $title = empty( $anonymous )
1458
+ ? esc_attr__( "View %s's profile", 'bbpress' )
1459
+ : esc_attr__( "Visit %s's website", 'bbpress' );
1460
+
1461
  $link_title = sprintf( $title, $author );
1462
 
1463
  // Use what was passed if not
1481
  $author_links['name'] = esc_html( bbp_get_topic_author_display_name( $topic_id ) );
1482
  }
1483
 
1484
+ // Empty array
1485
+ $links = array();
1486
+ $sprint = empty( $anonymous ) && bbp_user_has_profile( bbp_get_topic_author_id( $topic_id ) )
1487
+ ? '<a href="%1$s"%2$s%3$s>%4$s</a>'
1488
+ : '<span %2$s%3$s>%4$s</span>';
1489
 
1490
+ // Wrap each link
1491
+ foreach ( $author_links as $link => $link_text ) {
1492
+ $link_class = ' class="bbp-author-' . esc_attr( $link ) . '"';
1493
+ $links[] = sprintf( $sprint, esc_url( $author_url ), $link_title, $link_class, $link_text );
1494
+ }
 
 
 
 
 
 
 
 
1495
 
1496
+ // Role is not linked
1497
+ if ( true === $r['show_role'] ) {
1498
+ $links[] = bbp_get_topic_author_role( array( 'topic_id' => $topic_id ) );
1499
  }
1500
 
1501
+ // Juggle
1502
+ $author_links = $links;
1503
+ unset( $links );
1504
+
1505
  // Filter sections
1506
  $sections = apply_filters( 'bbp_get_topic_author_links', $author_links, $r, $args );
1507
 
1792
 
1793
  // Defaults
1794
  $retval = false;
1795
+ $user_id = bbp_get_current_user_id();
1796
  $redirect_to = bbp_is_subscriptions()
1797
+ ? bbp_get_subscriptions_permalink( $user_id )
1798
  : '';
1799
 
1800
  // Parse the arguments
1801
  $r = bbp_parse_args( $args, array(
1802
+ 'user_id' => $user_id,
1803
  'object_id' => bbp_get_topic_id(),
1804
  'object_type' => 'post',
1805
  'before' => '&nbsp;|&nbsp;',
1840
 
1841
  // No link
1842
  $retval = false;
1843
+ $user_id = bbp_get_current_user_id();
1844
  $redirect_to = bbp_is_favorites()
1845
+ ? bbp_get_favorites_permalink( $user_id )
1846
  : '';
1847
 
1848
  // Parse the arguments
1849
  $r = bbp_parse_args( $args, array(
1850
+ 'user_id' => $user_id,
1851
  'object_id' => bbp_get_topic_id(),
1852
  'object_type' => 'post',
1853
  'before' => '',
2088
  */
2089
  function bbp_get_topic_reply_count( $topic_id = 0, $integer = false ) {
2090
  $topic_id = bbp_get_topic_id( $topic_id );
2091
+ $replies = get_post_meta( $topic_id, '_bbp_reply_count', true );
2092
  $filter = ( true === $integer )
2093
  ? 'bbp_get_topic_reply_count_int'
2094
  : 'bbp_get_topic_reply_count';
2118
  */
2119
  function bbp_get_topic_post_count( $topic_id = 0, $integer = false ) {
2120
  $topic_id = bbp_get_topic_id( $topic_id );
2121
+ $replies = get_post_meta( $topic_id, '_bbp_reply_count', true ) + 1;
2122
  $filter = ( true === $integer )
2123
  ? 'bbp_get_topic_post_count_int'
2124
  : 'bbp_get_topic_post_count';
2150
  */
2151
  function bbp_get_topic_reply_count_hidden( $topic_id = 0, $integer = false ) {
2152
  $topic_id = bbp_get_topic_id( $topic_id );
2153
+ $replies = get_post_meta( $topic_id, '_bbp_reply_count_hidden', true );
2154
  $filter = ( true === $integer )
2155
  ? 'bbp_get_topic_reply_count_hidden_int'
2156
  : 'bbp_get_topic_reply_count_hidden';
2178
  */
2179
  function bbp_get_topic_voice_count( $topic_id = 0, $integer = false ) {
2180
  $topic_id = bbp_get_topic_id( $topic_id );
2181
+ $voices = get_post_meta( $topic_id, '_bbp_voice_count', true );
2182
  $filter = ( true === $integer )
2183
  ? 'bbp_get_topic_voice_count_int'
2184
  : 'bbp_get_topic_voice_count';
2561
  }
2562
 
2563
  if ( bbp_is_topic_trash( $topic->ID ) || empty( $trash_days ) ) {
2564
+ $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( esc_html__( 'Are you sure you want to delete that permanently?', 'bbpress' ) ) . '\' );" class="bbp-topic-delete-link">' . $r['delete_text'] . '</a>';
2565
  }
2566
 
2567
  // Process the admin links
3072
 
3073
  // Spam notice
3074
  case bbp_get_spam_status_id() :
3075
+ $notice_text = esc_html__( 'This topic is marked as spam.', 'bbpress' );
3076
  break;
3077
 
3078
  // Trashed notice
3079
  case bbp_get_trash_status_id() :
3080
+ $notice_text = esc_html__( 'This topic is in the trash.', 'bbpress' );
3081
  break;
3082
 
3083
  // Standard status
3388
 
3389
  // Filter & return
3390
  return (array) apply_filters( 'bbp_get_topic_tag_tax_labels', array(
3391
+ 'name' => esc_attr__( 'Topic Tags', 'bbpress' ),
3392
+ 'menu_name' => esc_attr__( 'Topic Tags', 'bbpress' ),
3393
+ 'singular_name' => esc_attr__( 'Topic Tag', 'bbpress' ),
3394
+ 'search_items' => esc_attr__( 'Search Tags', 'bbpress' ),
3395
+ 'popular_items' => esc_attr__( 'Popular Tags', 'bbpress' ),
3396
+ 'all_items' => esc_attr__( 'All Tags', 'bbpress' ),
3397
+ 'parent_item' => esc_attr__( 'Parent Tag', 'bbpress' ),
3398
+ 'parent_item_colon' => esc_attr__( 'Parent Tag:', 'bbpress' ),
3399
+ 'edit_item' => esc_attr__( 'Edit Tag', 'bbpress' ),
3400
+ 'view_item' => esc_attr__( 'View Topic Tag', 'bbpress' ),
3401
+ 'update_item' => esc_attr__( 'Update Tag', 'bbpress' ),
3402
+ 'add_new_item' => esc_attr__( 'Add New Tag', 'bbpress' ),
3403
+ 'new_item_name' => esc_attr__( 'New Tag Name', 'bbpress' ),
3404
+ 'separate_items_with_commas' => esc_attr__( 'Separate topic tags with commas', 'bbpress' ),
3405
+ 'add_or_remove_items' => esc_attr__( 'Add or remove tags', 'bbpress' ),
3406
+ 'choose_from_most_used' => esc_attr__( 'Choose from the most used tags', 'bbpress' ),
3407
+ 'not_found' => esc_attr__( 'No topic tags found.', 'bbpress' ),
3408
+ 'no_terms' => esc_attr__( 'No topic tags', 'bbpress' ),
3409
+ 'items_list_navigation' => esc_attr__( 'Topic tags list navigation', 'bbpress' ),
3410
+ 'items_list' => esc_attr__( 'Topic tags list', 'bbpress' ),
3411
+ 'most_used' => esc_attr__( 'Most used topic tags', 'bbpress' ),
3412
+ 'back_to_items' => esc_attr__( '&larr; Back to Tags', 'bbpress' )
3413
  ) );
3414
  }
3415
 
3845
  */
3846
  function bbp_get_form_topic_subscribed() {
3847
 
3848
+ // Default value
3849
+ $topic_subscribed = false;
3850
+
3851
  // Get _POST data
3852
  if ( bbp_is_topic_form_post_request() && isset( $_POST['bbp_topic_subscription'] ) ) {
3853
  $topic_subscribed = (bool) $_POST['bbp_topic_subscription'];
3854
 
3855
  // Get edit data
3856
  } elseif ( bbp_is_topic_edit() || bbp_is_reply_edit() ) {
3857
+ $post_author = (int) bbp_get_global_post_field( 'post_author', 'raw' );
3858
+ $topic_subscribed = bbp_is_user_subscribed( $post_author, bbp_get_topic_id() );
 
 
 
 
 
 
 
 
 
 
3859
 
3860
  // Get current status
3861
  } elseif ( bbp_is_single_topic() ) {
3862
  $topic_subscribed = bbp_is_user_subscribed( bbp_get_current_user_id(), bbp_get_topic_id() );
 
 
 
 
3863
  }
3864
 
3865
  // Get checked output
3957
  }
3958
 
3959
  // Editing an existing topic
3960
+ if ( bbp_verify_nonce_request( 'bbp-edit-topic_' . bbp_get_topic_id() ) ) {
3961
  return true;
3962
  }
3963
 
includes/users/capabilities.php CHANGED
@@ -142,7 +142,7 @@ function bbp_map_primary_meta_caps( $caps = array(), $cap = '', $user_id = 0, $a
142
  }
143
 
144
  /**
145
- * Return a user's main role
146
  *
147
  * @since 2.1.0 bbPress (r3860)
148
  *
@@ -373,7 +373,7 @@ function bbp_set_current_user_default_role() {
373
 
374
  // Add the user to the site
375
  if ( true === $add_to_site ) {
376
- $bbp->current_user->add_role( $new_role );
377
 
378
  // Don't add the user, but still give them the correct caps dynamically
379
  } else {
@@ -491,8 +491,8 @@ function bbp_make_spam_user( $user_id = 0 ) {
491
  // Loop through blogs and remove their posts
492
  foreach ( (array) array_keys( $blogs ) as $blog_id ) {
493
 
494
- // Switch to the blog ID
495
- switch_to_blog( $blog_id );
496
 
497
  // Get topics and replies
498
  $query = $bbp_db->prepare( "SELECT ID FROM {$bbp_db->posts} WHERE post_author = %d AND post_status = %s AND post_type IN ( {$post_types} )", $user_id, bbp_get_public_status_id() );
@@ -517,8 +517,8 @@ function bbp_make_spam_user( $user_id = 0 ) {
517
  }
518
  }
519
 
520
- // Switch back to current blog
521
- restore_current_blog();
522
  }
523
 
524
  // Success
@@ -569,8 +569,8 @@ function bbp_make_ham_user( $user_id = 0 ) {
569
  // Loop through blogs and remove their posts
570
  foreach ( (array) array_keys( $blogs ) as $blog_id ) {
571
 
572
- // Switch to the blog ID
573
- switch_to_blog( $blog_id );
574
 
575
  // Get topics and replies
576
  $query = $bbp_db->prepare( "SELECT ID FROM {$bbp_db->posts} WHERE post_author = %d AND post_status = %s AND post_type IN ( {$post_types} )", $user_id, bbp_get_spam_status_id() );
@@ -595,8 +595,8 @@ function bbp_make_ham_user( $user_id = 0 ) {
595
  }
596
  }
597
 
598
- // Switch back to current blog
599
- restore_current_blog();
600
  }
601
 
602
  // Success
142
  }
143
 
144
  /**
145
+ * Set a user's role in the forums
146
  *
147
  * @since 2.1.0 bbPress (r3860)
148
  *
373
 
374
  // Add the user to the site
375
  if ( true === $add_to_site ) {
376
+ bbp_set_user_role( $user_id, $new_role );
377
 
378
  // Don't add the user, but still give them the correct caps dynamically
379
  } else {
491
  // Loop through blogs and remove their posts
492
  foreach ( (array) array_keys( $blogs ) as $blog_id ) {
493
 
494
+ // Switch to the site ID
495
+ bbp_switch_to_site( $blog_id );
496
 
497
  // Get topics and replies
498
  $query = $bbp_db->prepare( "SELECT ID FROM {$bbp_db->posts} WHERE post_author = %d AND post_status = %s AND post_type IN ( {$post_types} )", $user_id, bbp_get_public_status_id() );
517
  }
518
  }
519
 
520
+ // Switch back to current site
521
+ bbp_restore_current_site();
522
  }
523
 
524
  // Success
569
  // Loop through blogs and remove their posts
570
  foreach ( (array) array_keys( $blogs ) as $blog_id ) {
571
 
572
+ // Switch to the site ID
573
+ bbp_switch_to_site( $blog_id );
574
 
575
  // Get topics and replies
576
  $query = $bbp_db->prepare( "SELECT ID FROM {$bbp_db->posts} WHERE post_author = %d AND post_status = %s AND post_type IN ( {$post_types} )", $user_id, bbp_get_spam_status_id() );
595
  }
596
  }
597
 
598
+ // Switch back to current site
599
+ bbp_restore_current_site();
600
  }
601
 
602
  // Success
includes/users/engagements.php CHANGED
@@ -19,17 +19,19 @@ defined( 'ABSPATH' ) || exit;
19
  *
20
  * @param int $object_id The object id
21
  * @param int $user_id The user id
22
- * @param string $meta_key The relationship key
23
- * @param string $meta_type The relationship type (usually 'post')
24
  * @param bool $unique Whether meta key should be unique to the object
25
  *
26
  * @return bool Returns true on success, false on failure
27
  */
28
- function bbp_add_user_to_object( $object_id = 0, $user_id = 0, $meta_key = '', $meta_type = 'post', $unique = false ) {
29
- $retval = add_metadata( $meta_type, $object_id, $meta_key, $user_id, $unique );
 
 
30
 
31
  // Filter & return
32
- return (bool) apply_filters( 'bbp_add_user_to_object', (bool) $retval, $object_id, $user_id, $meta_key, $meta_type, $unique );
33
  }
34
 
35
  /**
@@ -39,16 +41,16 @@ function bbp_add_user_to_object( $object_id = 0, $user_id = 0, $meta_key = '', $
39
  *
40
  * @param int $object_id The object id
41
  * @param int $user_id The user id
42
- * @param string $meta_key The relationship key
43
- * @param string $meta_type The relationship type (usually 'post')
44
  *
45
  * @return bool Returns true on success, false on failure
46
  */
47
- function bbp_remove_user_from_object( $object_id = 0, $user_id = 0, $meta_key = '', $meta_type = 'post' ) {
48
- $retval = delete_metadata( $meta_type, $object_id, $meta_key, $user_id, false );
49
 
50
  // Filter & return
51
- return (bool) apply_filters( 'bbp_remove_user_from_object', (bool) $retval, $object_id, $user_id, $meta_key, $meta_type );
52
  }
53
 
54
  /**
@@ -56,17 +58,18 @@ function bbp_remove_user_from_object( $object_id = 0, $user_id = 0, $meta_key =
56
  *
57
  * @since 2.6.0 bbPress (r6109)
58
  *
59
- * @param int $user_id The user id
60
- * @param string $meta_key The relationship key
61
- * @param string $meta_type The relationship type (usually 'post')
62
  *
63
  * @return bool Returns true on success, false on failure
64
  */
65
- function bbp_remove_user_from_all_objects( $user_id = 0, $meta_key = '', $meta_type = 'post' ) {
66
- $retval = delete_metadata( $meta_type, null, $meta_key, $user_id, true );
 
67
 
68
  // Filter & return
69
- return (bool) apply_filters( 'bbp_remove_user_from_all_objects', (bool) $retval, $user_id, $meta_key, $meta_type );
70
  }
71
 
72
  /**
@@ -76,16 +79,17 @@ function bbp_remove_user_from_all_objects( $user_id = 0, $meta_key = '', $meta_t
76
  *
77
  * @param int $object_id The object id
78
  * @param int $user_id The user id
79
- * @param string $meta_key The relationship key
80
- * @param string $meta_type The relationship type (usually 'post')
81
  *
82
  * @return bool Returns true on success, false on failure
83
  */
84
- function bbp_remove_object_from_all_users( $object_id = 0, $meta_key = '', $meta_type = 'post' ) {
85
- $retval = delete_metadata( $meta_type, $object_id, $meta_key, null, false );
 
86
 
87
  // Filter & return
88
- return (bool) apply_filters( 'bbp_remove_object_from_all_users', (bool) $retval, $object_id, $meta_key, $meta_type );
89
  }
90
 
91
  /**
@@ -93,16 +97,16 @@ function bbp_remove_object_from_all_users( $object_id = 0, $meta_key = '', $meta
93
  *
94
  * @since 2.6.0 bbPress (r6109)
95
  *
96
- * @param string $meta_key The relationship key
97
- * @param string $meta_type The relationship type (usually 'post')
98
  *
99
  * @return bool Returns true on success, false on failure
100
  */
101
- function bbp_remove_all_users_from_all_objects( $meta_key = '', $meta_type = 'post' ) {
102
- $retval = delete_metadata( $meta_type, null, $meta_key, null, true );
103
 
104
  // Filter & return
105
- return (bool) apply_filters( 'bbp_remove_all_users_from_all_objects', (bool) $retval, $meta_key, $meta_type );
106
  }
107
 
108
  /**
@@ -111,17 +115,17 @@ function bbp_remove_all_users_from_all_objects( $meta_key = '', $meta_type = 'po
111
  * @since 2.6.0 bbPress (r6109)
112
  *
113
  * @param int $object_id The object id
114
- * @param string $meta_key The key used to index this relationship
115
- * @param string $meta_type The type of meta to look in
116
  *
117
  * @return array Returns ids of users
118
  */
119
- function bbp_get_users_for_object( $object_id = 0, $meta_key = '', $meta_type = 'post' ) {
120
- $meta = get_metadata( $meta_type, $object_id, $meta_key, false );
121
- $retval = wp_parse_id_list( $meta );
122
 
123
  // Filter & return
124
- return (array) apply_filters( 'bbp_get_users_for_object', $retval, $object_id, $meta_key, $meta_type );
125
  }
126
 
127
  /**
@@ -131,17 +135,38 @@ function bbp_get_users_for_object( $object_id = 0, $meta_key = '', $meta_type =
131
  *
132
  * @param int $object_id The object id
133
  * @param int $user_id The user id
134
- * @param string $meta_key The relationship key
135
- * @param string $meta_type The relationship type (usually 'post')
136
  *
137
  * @return bool Returns true if object has a user, false if not
138
  */
139
- function bbp_is_object_of_user( $object_id = 0, $user_id = 0, $meta_key = '', $meta_type = 'post' ) {
140
- $user_ids = bbp_get_users_for_object( $object_id, $meta_key, $meta_type );
141
- $retval = is_numeric( array_search( $user_id, $user_ids, true ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
 
143
  // Filter & return
144
- return (bool) apply_filters( 'bbp_is_object_of_user', $retval, $object_id, $user_id, $meta_key, $meta_type );
145
  }
146
 
147
  /** Engagements ***************************************************************/
@@ -215,38 +240,11 @@ UNION
215
  * @return bool True if user has engaged, otherwise false
216
  */
217
  function bbp_get_user_engagements( $args = array() ) {
218
-
219
- // Backwards compat for pre-2.6.0
220
- if ( is_numeric( $args ) ) {
221
- $args = array(
222
- 'meta_query' => array( array(
223
- 'key' => '_bbp_engagement',
224
- 'value' => bbp_get_user_id( $args, false, false ),
225
- 'compare' => 'NUMERIC'
226
- ) )
227
- );
228
- }
229
-
230
- // Default arguments
231
- $defaults = array(
232
- 'meta_query' => array( array(
233
- 'key' => '_bbp_engagement',
234
- 'value' => bbp_get_displayed_user_id(),
235
- 'compare' => 'NUMERIC'
236
- ) )
237
- );
238
-
239
- // Parse arguments
240
- $r = bbp_parse_args( $args, $defaults, 'get_user_engagements' );
241
-
242
- // Get the topics
243
- $query = bbp_has_topics( $r );
244
- $user_id = isset( $r['meta_query'][0]['value'] )
245
- ? $r['meta_query'][0]['value']
246
- : 0;
247
 
248
  // Filter & return
249
- return apply_filters( 'bbp_get_user_engagements', $query, $user_id, $r, $args );
250
  }
251
 
252
  /**
@@ -460,43 +458,16 @@ function bbp_get_topic_favoriters( $topic_id = 0 ) {
460
  * @since 2.0.0 bbPress (r2652)
461
  * @since 2.6.0 bbPress (r6618) Signature changed to accept an array of arguments
462
  *
463
- * @param array $args Optional. Arguments to pass into bbp_has_replies()
464
  *
465
  * @return bool True if user has favorites, otherwise false
466
  */
467
  function bbp_get_user_favorites( $args = array() ) {
468
-
469
- // Backwards compat for pre-2.6.0
470
- if ( is_numeric( $args ) ) {
471
- $args = array(
472
- 'meta_query' => array( array(
473
- 'key' => '_bbp_favorite',
474
- 'value' => bbp_get_user_id( $args, false, false ),
475
- 'compare' => 'NUMERIC'
476
- ) )
477
- );
478
- }
479
-
480
- // Default arguments
481
- $defaults = array(
482
- 'meta_query' => array( array(
483
- 'key' => '_bbp_favorite',
484
- 'value' => bbp_get_displayed_user_id(),
485
- 'compare' => 'NUMERIC'
486
- ) )
487
- );
488
-
489
- // Parse arguments
490
- $r = bbp_parse_args( $args, $defaults, 'get_user_favorites' );
491
-
492
- // Get the topics
493
- $query = bbp_has_topics( $r );
494
- $user_id = isset( $r['meta_query'][0]['value'] )
495
- ? $r['meta_query'][0]['value']
496
- : 0;
497
 
498
  // Filter & return
499
- return apply_filters( 'bbp_get_user_favorites', $query, $user_id, $r, $args );
500
  }
501
 
502
  /**
@@ -529,7 +500,7 @@ function bbp_is_user_favorite( $user_id = 0, $topic_id = 0 ) {
529
  * @param int $user_id Optional. User id
530
  * @param int $topic_id Optional. Topic id
531
  *
532
- * @return bool Always true
533
  */
534
  function bbp_add_user_favorite( $user_id = 0, $topic_id = 0 ) {
535
  $user_id = bbp_get_user_id( $user_id, false, false );
@@ -563,7 +534,7 @@ function bbp_add_user_favorite( $user_id = 0, $topic_id = 0 ) {
563
  * @param int $user_id Optional. User id
564
  * @param int $topic_id Optional. Topic id
565
  *
566
- * @return bool True if the topic was removed from user's favorites, or false
567
  */
568
  function bbp_remove_user_favorite( $user_id, $topic_id ) {
569
  $user_id = bbp_get_user_id( $user_id, false, false );
@@ -605,7 +576,7 @@ function bbp_favorites_handler( $action = '' ) {
605
  }
606
 
607
  // Bail if no topic ID is passed
608
- if ( empty( $_GET['topic_id'] ) ) {
609
  return $success;
610
  }
611
 
@@ -621,7 +592,7 @@ function bbp_favorites_handler( $action = '' ) {
621
  }
622
 
623
  // What action is taking place?
624
- $topic_id = bbp_get_topic_id( $_GET['topic_id'] );
625
  $user_id = bbp_get_user_id( 0, true, true );
626
 
627
  // Check for empty topic
@@ -690,7 +661,7 @@ function bbp_favorites_handler( $action = '' ) {
690
  *
691
  * @since 2.6.0 bbPress (r5156)
692
  *
693
- * @param int $object_id Optional. ID of forum, topic, or something else
694
  */
695
  function bbp_get_subscribers( $object_id = 0, $type = 'post' ) {
696
  $users = bbp_get_users_for_object( $object_id, '_bbp_subscription', $type );
@@ -705,43 +676,16 @@ function bbp_get_subscribers( $object_id = 0, $type = 'post' ) {
705
  * @since 2.0.0 bbPress (r2668)
706
  * @since 2.6.0 bbPress (r6618) Signature changed to accept an array of arguments
707
  *
708
- * @param array $args Optional. Arguments to pass into bbp_has_replies()
709
  *
710
- * @return bool True if user has forum subscriptions, otherwise false
711
  */
712
  function bbp_get_user_topic_subscriptions( $args = array() ) {
713
-
714
- // Backwards compat for pre-2.6.0
715
- if ( is_numeric( $args ) ) {
716
- $args = array(
717
- 'meta_query' => array( array(
718
- 'key' => '_bbp_subscription',
719
- 'value' => bbp_get_user_id( $args, false, false ),
720
- 'compare' => 'NUMERIC'
721
- ) )
722
- );
723
- }
724
-
725
- // Default arguments
726
- $defaults = array(
727
- 'meta_query' => array( array(
728
- 'key' => '_bbp_subscription',
729
- 'value' => bbp_get_displayed_user_id(),
730
- 'compare' => 'NUMERIC'
731
- ) )
732
- );
733
-
734
- // Parse arguments
735
- $r = bbp_parse_args( $args, $defaults, 'get_user_topic_subscriptions' );
736
-
737
- // Get the topics
738
- $query = bbp_has_topics( $r );
739
- $user_id = isset( $r['meta_query'][0]['value'] )
740
- ? $r['meta_query'][0]['value']
741
- : 0;
742
 
743
  // Filter & return
744
- return apply_filters( 'bbp_get_user_topic_subscriptions', $query, $user_id, $r, $args );
745
  }
746
 
747
  /**
@@ -750,54 +694,27 @@ function bbp_get_user_topic_subscriptions( $args = array() ) {
750
  * @since 2.5.0 bbPress (r5156)
751
  * @since 2.6.0 bbPress (r6618) Signature changed to accept an array of arguments
752
  *
753
- * @param array $args Optional. Arguments to pass into bbp_has_replies()
754
  *
755
  * @return bool True if user has forum subscriptions, otherwise false
756
  */
757
  function bbp_get_user_forum_subscriptions( $args = array() ) {
758
-
759
- // Backwards compat for pre-2.6.0
760
- if ( is_numeric( $args ) ) {
761
- $args = array(
762
- 'meta_query' => array( array(
763
- 'key' => '_bbp_subscription',
764
- 'value' => bbp_get_user_id( $args, false, false ),
765
- 'compare' => 'NUMERIC'
766
- ) )
767
- );
768
- }
769
-
770
- // Default arguments
771
- $defaults = array(
772
- 'meta_query' => array( array(
773
- 'key' => '_bbp_subscription',
774
- 'value' => bbp_get_displayed_user_id(),
775
- 'compare' => 'NUMERIC'
776
- ) )
777
- );
778
-
779
- // Parse arguments
780
- $r = bbp_parse_args( $args, $defaults, 'get_user_forum_subscriptions' );
781
-
782
- // Get the forums
783
- $query = bbp_has_forums( $r );
784
- $user_id = isset( $r['meta_query'][0]['value'] )
785
- ? $r['meta_query'][0]['value']
786
- : 0;
787
 
788
  // Filter & return
789
- return apply_filters( 'bbp_get_user_forum_subscriptions', $query, $user_id, $r, $args );
790
  }
791
 
792
  /**
793
- * Check if a topic or forum is in user's subscription list or not
794
  *
795
  * @since 2.5.0 bbPress (r5156)
796
  *
797
  * @param int $user_id Optional. User id
798
- * @param int $object_id Optional. Topic id
799
  *
800
- * @return bool True if the forum or topic is in user's subscriptions, otherwise false
801
  */
802
  function bbp_is_user_subscribed( $user_id = 0, $object_id = 0, $type = 'post' ) {
803
  $retval = bbp_is_object_of_user( $object_id, $user_id, '_bbp_subscription', $type );
@@ -813,10 +730,10 @@ function bbp_is_user_subscribed( $user_id = 0, $object_id = 0, $type = 'post' )
813
  * @since 2.6.0 bbPress (r6544) Added $type parameter
814
  *
815
  * @param int $user_id Optional. User id
816
- * @param int $object_id Optional. Topic id
817
  * @param string $type Optional. Type of object being subscribed to
818
  *
819
- * @return bool Always true
820
  */
821
  function bbp_add_user_subscription( $user_id = 0, $object_id = 0, $type = 'post' ) {
822
 
@@ -847,11 +764,10 @@ function bbp_add_user_subscription( $user_id = 0, $object_id = 0, $type = 'post'
847
  * @since 2.6.0 bbPress (r6544) Added $type parameter
848
  *
849
  * @param int $user_id Optional. User id
850
- * @param int $object_id Optional. Topic id
851
  * @param string $type Optional. Type of object being subscribed to
852
  *
853
- * @return bool True if the topic was removed from user's subscriptions,
854
- * otherwise false
855
  */
856
  function bbp_remove_user_subscription( $user_id = 0, $object_id = 0, $type = 'post' ) {
857
 
@@ -979,6 +895,12 @@ function bbp_subscriptions_handler( $action = '' ) {
979
 
980
  /** Query Helpers *************************************************************/
981
 
 
 
 
 
 
 
982
  /**
983
  * Get a user's object IDs
984
  *
@@ -990,8 +912,8 @@ function bbp_subscriptions_handler( $action = '' ) {
990
  * @since 2.6.0 bbPress (r6606)
991
  *
992
  * @param int $user_id The user id
993
- * @param string $meta_key The relationship key
994
- * @param string $meta_type The relationship type (usually 'post')
995
  * @param array $args The arguments to override defaults
996
  *
997
  * @return array|bool Results if user has objects, otherwise null
@@ -1003,27 +925,27 @@ function bbp_get_user_object_ids( $args = array() ) {
1003
  $r = bbp_parse_args( $args, array(
1004
  'user_id' => 0,
1005
  'object_type' => bbp_get_topic_post_type(),
1006
- 'meta_key' => '',
1007
- 'meta_type' => 'post',
1008
  'filter' => 'user_object_ids',
1009
  'args' => array()
1010
  ), 'get_user_object_ids' );
1011
 
1012
  // Sanitize arguments
1013
  $r['user_id'] = bbp_get_user_id( $r['user_id'] );
1014
- $r['meta_key'] = sanitize_key( $r['meta_key'] );
1015
- $r['meta_type'] = sanitize_key( $r['meta_type'] );
1016
  $r['object_type'] = sanitize_key( $r['object_type'] );
1017
  $r['filter'] = sanitize_key( $r['filter'] );
1018
 
1019
  // Defaults
1020
- if ( 'post' === $r['meta_type'] ) {
1021
  $defaults = array(
1022
  'fields' => 'ids',
1023
  'post_type' => $r['object_type'],
1024
  'posts_per_page' => -1,
1025
  'meta_query' => array( array(
1026
- 'key' => $r['meta_key'],
1027
  'value' => $r['user_id'],
1028
  'compare' => 'NUMERIC'
1029
  ),
@@ -1042,7 +964,7 @@ function bbp_get_user_object_ids( $args = array() ) {
1042
  $query_args = bbp_parse_args( $r['args'], $defaults, "get_{$r['filter']}_args" );
1043
 
1044
  // Queries
1045
- if ( 'post' === $r['meta_type'] ) {
1046
  $query = new WP_Query( $query_args );
1047
  $object_ids = $query->posts;
1048
  }
@@ -1063,7 +985,7 @@ function bbp_get_user_object_ids( $args = array() ) {
1063
  function bbp_get_moderator_forum_ids( $user_id = 0 ) {
1064
  return bbp_get_user_object_ids( array(
1065
  'user_id' => $user_id,
1066
- 'meta_key' => '_bbp_moderator_id',
1067
  'object_type' => bbp_get_forum_post_type(),
1068
  'filter' => 'moderator_forum_ids'
1069
  ) );
@@ -1080,9 +1002,9 @@ function bbp_get_moderator_forum_ids( $user_id = 0 ) {
1080
  */
1081
  function bbp_get_user_engaged_topic_ids( $user_id = 0 ) {
1082
  return bbp_get_user_object_ids( array(
1083
- 'user_id' => $user_id,
1084
- 'meta_key' => '_bbp_engagement',
1085
- 'filter' => 'user_engaged_topic_ids'
1086
  ) );
1087
  }
1088
 
@@ -1093,13 +1015,13 @@ function bbp_get_user_engaged_topic_ids( $user_id = 0 ) {
1093
  *
1094
  * @param int $user_id Optional. User id
1095
  *
1096
- * @return array Return array of favorited ids, or empty array
1097
  */
1098
  function bbp_get_user_favorites_topic_ids( $user_id = 0 ) {
1099
  return bbp_get_user_object_ids( array(
1100
- 'user_id' => $user_id,
1101
- 'meta_key' => '_bbp_favorite',
1102
- 'filter' => 'user_favorites_topic_ids'
1103
  ) );
1104
  }
1105
 
@@ -1110,12 +1032,12 @@ function bbp_get_user_favorites_topic_ids( $user_id = 0 ) {
1110
  *
1111
  * @param int $user_id Optional. User id
1112
  *
1113
- * @return array Return array of subscribed ids, or empty array
1114
  */
1115
  function bbp_get_user_subscribed_forum_ids( $user_id = 0 ) {
1116
  return bbp_get_user_object_ids( array(
1117
  'user_id' => $user_id,
1118
- 'meta_key' => '_bbp_subscription',
1119
  'object_type' => bbp_get_forum_post_type(),
1120
  'filter' => 'user_subscribed_forum_ids'
1121
  ) );
@@ -1128,13 +1050,13 @@ function bbp_get_user_subscribed_forum_ids( $user_id = 0 ) {
1128
  *
1129
  * @param int $user_id Optional. User id
1130
  *
1131
- * @return array Return array of subscribed ids, or empty array
1132
  */
1133
  function bbp_get_user_subscribed_topic_ids( $user_id = 0 ) {
1134
  return bbp_get_user_object_ids( array(
1135
- 'user_id' => $user_id,
1136
- 'meta_key' => '_bbp_subscription',
1137
- 'filter' => 'user_subscribed_topic_ids'
1138
  ) );
1139
  }
1140
 
19
  *
20
  * @param int $object_id The object id
21
  * @param int $user_id The user id
22
+ * @param string $rel_key The relationship key
23
+ * @param string $rel_type The relationship type (usually 'post')
24
  * @param bool $unique Whether meta key should be unique to the object
25
  *
26
  * @return bool Returns true on success, false on failure
27
  */
28
+ function bbp_add_user_to_object( $object_id = 0, $user_id = 0, $rel_key = '', $rel_type = 'post', $unique = false ) {
29
+ $object_id = absint( $object_id );
30
+ $user_id = absint( $user_id );
31
+ $retval = bbp_user_engagements_interface( $rel_key, $rel_type )->add_user_to_object( $object_id, $user_id, $rel_key, $rel_type, $unique );
32
 
33
  // Filter & return
34
+ return (bool) apply_filters( 'bbp_add_user_to_object', $retval, $object_id, $user_id, $rel_key, $rel_type, $unique );
35
  }
36
 
37
  /**
41
  *
42
  * @param int $object_id The object id
43
  * @param int $user_id The user id
44
+ * @param string $rel_key The relationship key
45
+ * @param string $rel_type The relationship type (usually 'post')
46
  *
47
  * @return bool Returns true on success, false on failure
48
  */
49
+ function bbp_remove_user_from_object( $object_id = 0, $user_id = 0, $rel_key = '', $rel_type = 'post' ) {
50
+ $retval = bbp_user_engagements_interface( $rel_key, $rel_type )->remove_user_from_object( $object_id, $user_id, $rel_key, $rel_type );
51
 
52
  // Filter & return
53
+ return (bool) apply_filters( 'bbp_remove_user_from_object', $retval, $object_id, $user_id, $rel_key, $rel_type );
54
  }
55
 
56
  /**
58
  *
59
  * @since 2.6.0 bbPress (r6109)
60
  *
61
+ * @param int $user_id The user id
62
+ * @param string $rel_key The relationship key
63
+ * @param string $rel_type The relationship type (usually 'post')
64
  *
65
  * @return bool Returns true on success, false on failure
66
  */
67
+ function bbp_remove_user_from_all_objects( $user_id = 0, $rel_key = '', $rel_type = 'post' ) {
68
+ $user_id = absint( $user_id );
69
+ $retval = bbp_user_engagements_interface( $rel_key, $rel_type )->remove_user_from_all_objects( $user_id, $rel_key, $rel_type );
70
 
71
  // Filter & return
72
+ return (bool) apply_filters( 'bbp_remove_user_from_all_objects', $retval, $user_id, $rel_key, $rel_type );
73
  }
74
 
75
  /**
79
  *
80
  * @param int $object_id The object id
81
  * @param int $user_id The user id
82
+ * @param string $rel_key The relationship key
83
+ * @param string $rel_type The relationship type (usually 'post')
84
  *
85
  * @return bool Returns true on success, false on failure
86
  */
87
+ function bbp_remove_object_from_all_users( $object_id = 0, $rel_key = '', $rel_type = 'post' ) {
88
+ $object_id = absint( $object_id );
89
+ $retval = bbp_user_engagements_interface( $rel_key, $rel_type )->remove_object_from_all_users( $object_id, $rel_key, $rel_type );
90
 
91
  // Filter & return
92
+ return (bool) apply_filters( 'bbp_remove_object_from_all_users', $retval, $object_id, $rel_key, $rel_type );
93
  }
94
 
95
  /**
97
  *
98
  * @since 2.6.0 bbPress (r6109)
99
  *
100
+ * @param string $rel_key The relationship key
101
+ * @param string $rel_type The relationship type (usually 'post')
102
  *
103
  * @return bool Returns true on success, false on failure
104
  */
105
+ function bbp_remove_all_users_from_all_objects( $rel_key = '', $rel_type = 'post' ) {
106
+ $retval = bbp_user_engagements_interface( $rel_key, $rel_type )->remove_all_users_from_all_objects( $rel_key, $rel_type );
107
 
108
  // Filter & return
109
+ return (bool) apply_filters( 'bbp_remove_all_users_from_all_objects', $retval, $rel_key, $rel_type );
110
  }
111
 
112
  /**
115
  * @since 2.6.0 bbPress (r6109)
116
  *
117
  * @param int $object_id The object id
118
+ * @param string $rel_key The key used to index this relationship
119
+ * @param string $rel_type The type of meta to look in
120
  *
121
  * @return array Returns ids of users
122
  */
123
+ function bbp_get_users_for_object( $object_id = 0, $rel_key = '', $rel_type = 'post' ) {
124
+ $object_id = absint( $object_id );
125
+ $retval = bbp_user_engagements_interface( $rel_key, $rel_type )->get_users_for_object( $object_id, $rel_key, $rel_type );
126
 
127
  // Filter & return
128
+ return (array) apply_filters( 'bbp_get_users_for_object', $retval, $object_id, $rel_key, $rel_type );
129
  }
130
 
131
  /**
135
  *
136
  * @param int $object_id The object id
137
  * @param int $user_id The user id
138
+ * @param string $rel_key The relationship key
139
+ * @param string $rel_type The relationship type (usually 'post')
140
  *
141
  * @return bool Returns true if object has a user, false if not
142
  */
143
+ function bbp_is_object_of_user( $object_id = 0, $user_id = 0, $rel_key = '', $rel_type = 'post' ) {
144
+ $object_id = absint( $object_id );
145
+ $user_id = absint( $user_id );
146
+ $user_ids = bbp_get_users_for_object( $object_id, $rel_key, $rel_type );
147
+ $retval = is_numeric( array_search( $user_id, $user_ids, true ) );
148
+
149
+ // Filter & return
150
+ return (bool) apply_filters( 'bbp_is_object_of_user', $retval, $object_id, $user_id, $rel_key, $rel_type );
151
+ }
152
+
153
+ /**
154
+ * Get the query part responsible for JOINing objects to user IDs
155
+ *
156
+ * @since 2.6.0 bbPress (r6747)
157
+ *
158
+ * @param array $args Default query arguments
159
+ * @param string $context Additional context
160
+ * @param string $rel_key The relationship key
161
+ * @param string $rel_type The relationship type (usually 'post')
162
+ *
163
+ * @return array
164
+ */
165
+ function bbp_get_user_object_query( $args = array(), $context = '', $rel_key = '', $rel_type = 'post' ) {
166
+ $retval = bbp_user_engagements_interface( $rel_key, $rel_type )->get_query( $args, "get_user_{$context}", $rel_key, $rel_type );
167
 
168
  // Filter & return
169
+ return (array) apply_filters( 'bbp_get_user_object_query', $retval, $args, $context, $rel_key, $rel_type );
170
  }
171
 
172
  /** Engagements ***************************************************************/
240
  * @return bool True if user has engaged, otherwise false
241
  */
242
  function bbp_get_user_engagements( $args = array() ) {
243
+ $r = bbp_get_user_object_query( $args, 'engagements', '_bbp_engagement' );
244
+ $query = bbp_has_topics( $r );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
 
246
  // Filter & return
247
+ return apply_filters( 'bbp_get_user_engagements', $query, 0, $r, $args );
248
  }
249
 
250
  /**
458
  * @since 2.0.0 bbPress (r2652)
459
  * @since 2.6.0 bbPress (r6618) Signature changed to accept an array of arguments
460
  *
461
+ * @param array $args Optional. Arguments to pass into bbp_has_topics()
462
  *
463
  * @return bool True if user has favorites, otherwise false
464
  */
465
  function bbp_get_user_favorites( $args = array() ) {
466
+ $r = bbp_get_user_object_query( $args, 'favorites', '_bbp_favorite' );
467
+ $query = bbp_has_topics( $r );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
468
 
469
  // Filter & return
470
+ return apply_filters( 'bbp_get_user_favorites', $query, 0, $r, $args );
471
  }
472
 
473
  /**
500
  * @param int $user_id Optional. User id
501
  * @param int $topic_id Optional. Topic id
502
  *
503
+ * @return bool True if the topic was added to user's favorites, otherwise false
504
  */
505
  function bbp_add_user_favorite( $user_id = 0, $topic_id = 0 ) {
506
  $user_id = bbp_get_user_id( $user_id, false, false );
534
  * @param int $user_id Optional. User id
535
  * @param int $topic_id Optional. Topic id
536
  *
537
+ * @return bool True if the topic was removed from user's favorites, otherwise false
538
  */
539
  function bbp_remove_user_favorite( $user_id, $topic_id ) {
540
  $user_id = bbp_get_user_id( $user_id, false, false );
576
  }
577
 
578
  // Bail if no topic ID is passed
579
+ if ( empty( $_GET['object_id'] ) ) {
580
  return $success;
581
  }
582
 
592
  }
593
 
594
  // What action is taking place?
595
+ $topic_id = bbp_get_topic_id( $_GET['object_id'] );
596
  $user_id = bbp_get_user_id( 0, true, true );
597
 
598
  // Check for empty topic
661
  *
662
  * @since 2.6.0 bbPress (r5156)
663
  *
664
+ * @param int $object_id Optional. ID of object (forum, topic, or something else)
665
  */
666
  function bbp_get_subscribers( $object_id = 0, $type = 'post' ) {
667
  $users = bbp_get_users_for_object( $object_id, '_bbp_subscription', $type );
676
  * @since 2.0.0 bbPress (r2668)
677
  * @since 2.6.0 bbPress (r6618) Signature changed to accept an array of arguments
678
  *
679
+ * @param array $args Optional. Arguments to pass into bbp_has_topics()
680
  *
681
+ * @return bool True if user has topic subscriptions, otherwise false
682
  */
683
  function bbp_get_user_topic_subscriptions( $args = array() ) {
684
+ $r = bbp_get_user_object_query( $args, 'topic_subscriptions', '_bbp_subscription' );
685
+ $query = bbp_has_topics( $r );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
686
 
687
  // Filter & return
688
+ return apply_filters( 'bbp_get_user_topic_subscriptions', $query, 0, $r, $args );
689
  }
690
 
691
  /**
694
  * @since 2.5.0 bbPress (r5156)
695
  * @since 2.6.0 bbPress (r6618) Signature changed to accept an array of arguments
696
  *
697
+ * @param array $args Optional. Arguments to pass into bbp_has_forums()
698
  *
699
  * @return bool True if user has forum subscriptions, otherwise false
700
  */
701
  function bbp_get_user_forum_subscriptions( $args = array() ) {
702
+ $r = bbp_get_user_object_query( $args, 'forum_subscriptions', '_bbp_subscription' );
703
+ $query = bbp_has_forums( $r );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
704
 
705
  // Filter & return
706
+ return apply_filters( 'bbp_get_user_forum_subscriptions', $query, 0, $r, $args );
707
  }
708
 
709
  /**
710
+ * Check if an object (forum or topic) is in user's subscription list or not
711
  *
712
  * @since 2.5.0 bbPress (r5156)
713
  *
714
  * @param int $user_id Optional. User id
715
+ * @param int $object_id Optional. Object id
716
  *
717
+ * @return bool True if the object (forum or topic) is in user's subscriptions, otherwise false
718
  */
719
  function bbp_is_user_subscribed( $user_id = 0, $object_id = 0, $type = 'post' ) {
720
  $retval = bbp_is_object_of_user( $object_id, $user_id, '_bbp_subscription', $type );
730
  * @since 2.6.0 bbPress (r6544) Added $type parameter
731
  *
732
  * @param int $user_id Optional. User id
733
+ * @param int $object_id Optional. Object id
734
  * @param string $type Optional. Type of object being subscribed to
735
  *
736
+ * @return bool True if the object was added to user subscriptions, otherwise false
737
  */
738
  function bbp_add_user_subscription( $user_id = 0, $object_id = 0, $type = 'post' ) {
739
 
764
  * @since 2.6.0 bbPress (r6544) Added $type parameter
765
  *
766
  * @param int $user_id Optional. User id
767
+ * @param int $object_id Optional. Object id
768
  * @param string $type Optional. Type of object being subscribed to
769
  *
770
+ * @return bool True if the object was removed from user subscriptions, otherwise false
 
771
  */
772
  function bbp_remove_user_subscription( $user_id = 0, $object_id = 0, $type = 'post' ) {
773
 
895
 
896
  /** Query Helpers *************************************************************/
897
 
898
+ /**
899
+ * These functions are no longer used in bbPress due to general performance
900
+ * concerns on large installations. They are provided here for convenience and
901
+ * backwards compatibility only.
902
+ */
903
+
904
  /**
905
  * Get a user's object IDs
906
  *
912
  * @since 2.6.0 bbPress (r6606)
913
  *
914
  * @param int $user_id The user id
915
+ * @param string $rel_key The relationship key
916
+ * @param string $rel_type The relationship type (usually 'post')
917
  * @param array $args The arguments to override defaults
918
  *
919
  * @return array|bool Results if user has objects, otherwise null
925
  $r = bbp_parse_args( $args, array(
926
  'user_id' => 0,
927
  'object_type' => bbp_get_topic_post_type(),
928
+ 'rel_key' => '',
929
+ 'rel_type' => 'post',
930
  'filter' => 'user_object_ids',
931
  'args' => array()
932
  ), 'get_user_object_ids' );
933
 
934
  // Sanitize arguments
935
  $r['user_id'] = bbp_get_user_id( $r['user_id'] );
936
+ $r['rel_key'] = sanitize_key( $r['rel_key'] );
937
+ $r['rel_type'] = sanitize_key( $r['rel_type'] );
938
  $r['object_type'] = sanitize_key( $r['object_type'] );
939
  $r['filter'] = sanitize_key( $r['filter'] );
940
 
941
  // Defaults
942
+ if ( 'post' === $r['rel_type'] ) {
943
  $defaults = array(
944
  'fields' => 'ids',
945
  'post_type' => $r['object_type'],
946
  'posts_per_page' => -1,
947
  'meta_query' => array( array(
948
+ 'key' => $r['rel_key'],
949
  'value' => $r['user_id'],
950
  'compare' => 'NUMERIC'
951
  ),
964
  $query_args = bbp_parse_args( $r['args'], $defaults, "get_{$r['filter']}_args" );
965
 
966
  // Queries
967
+ if ( 'post' === $r['rel_type'] ) {
968
  $query = new WP_Query( $query_args );
969
  $object_ids = $query->posts;
970
  }
985
  function bbp_get_moderator_forum_ids( $user_id = 0 ) {
986
  return bbp_get_user_object_ids( array(
987
  'user_id' => $user_id,
988
+ 'rel_key' => '_bbp_moderator_id',
989
  'object_type' => bbp_get_forum_post_type(),
990
  'filter' => 'moderator_forum_ids'
991
  ) );
1002
  */
1003
  function bbp_get_user_engaged_topic_ids( $user_id = 0 ) {
1004
  return bbp_get_user_object_ids( array(
1005
+ 'user_id' => $user_id,
1006
+ 'rel_key' => '_bbp_engagement',
1007
+ 'filter' => 'user_engaged_topic_ids'
1008
  ) );
1009
  }
1010
 
1015
  *
1016
  * @param int $user_id Optional. User id
1017
  *
1018
+ * @return array Return array of favorite topic ids, or empty array
1019
  */
1020
  function bbp_get_user_favorites_topic_ids( $user_id = 0 ) {
1021
  return bbp_get_user_object_ids( array(
1022
+ 'user_id' => $user_id,
1023
+ 'rel_key' => '_bbp_favorite',
1024
+ 'filter' => 'user_favorites_topic_ids'
1025
  ) );
1026
  }
1027
 
1032
  *
1033
  * @param int $user_id Optional. User id
1034
  *
1035
+ * @return array Return array of subscribed forum ids, or empty array
1036
  */
1037
  function bbp_get_user_subscribed_forum_ids( $user_id = 0 ) {
1038
  return bbp_get_user_object_ids( array(
1039
  'user_id' => $user_id,
1040
+ 'rel_key' => '_bbp_subscription',
1041
  'object_type' => bbp_get_forum_post_type(),
1042
  'filter' => 'user_subscribed_forum_ids'
1043
  ) );
1050
  *
1051
  * @param int $user_id Optional. User id
1052
  *
1053
+ * @return array Return array of subscribed topic ids, or empty array
1054
  */
1055
  function bbp_get_user_subscribed_topic_ids( $user_id = 0 ) {
1056
  return bbp_get_user_object_ids( array(
1057
+ 'user_id' => $user_id,
1058
+ 'rel_key' => '_bbp_subscription',
1059
+ 'filter' => 'user_subscribed_topic_ids'
1060
  ) );
1061
  }
1062
 
includes/users/functions.php CHANGED
@@ -61,7 +61,7 @@ function bbp_is_anonymous() {
61
  * @param string $key Which value to echo?
62
  */
63
  function bbp_current_anonymous_user_data( $key = '' ) {
64
- echo bbp_get_current_anonymous_user_data( $key );
65
  }
66
 
67
  /**
@@ -87,9 +87,6 @@ function bbp_current_anonymous_user_data( $key = '' ) {
87
  'comment_author_url' => 'comment_author_url',
88
  );
89
 
90
- // Sanitize core cookies
91
- sanitize_comment_cookies();
92
-
93
  // Get the current poster's info from the cookies
94
  $bbp_current_poster = wp_get_current_commenter();
95
 
@@ -163,7 +160,7 @@ function bbp_current_author_ip() {
163
  */
164
  function bbp_current_author_ua() {
165
  $retval = ! empty( $_SERVER['HTTP_USER_AGENT'] )
166
- ? substr( $_SERVER['HTTP_USER_AGENT'], 0, 254 )
167
  : '';
168
 
169
  // Filter & return
@@ -667,7 +664,7 @@ function bbp_get_user_topic_count_raw( $user_id = 0 ) {
667
  function bbp_get_user_reply_count_raw( $user_id = 0 ) {
668
  $user_id = bbp_get_user_id( $user_id );
669
  $bbp_db = bbp_db();
670
- $statii = "'" . implode( "', '", bbp_get_public_topic_statuses() ) . "'";
671
  $sql = "SELECT COUNT(*)
672
  FROM {$bbp_db->posts}
673
  WHERE post_author = %d
@@ -980,11 +977,14 @@ function bbp_user_maybe_convert_pass() {
980
  return;
981
  }
982
 
 
 
 
983
  // Try to convert the old password for this user
984
  $converter = bbp_new_converter( $row->meta_value );
985
 
986
  // Try to call the conversion method
987
- if ( is_a( $converter, 'BBP_Converter_Base' ) && method_exists( $converter, 'callback_pass' ) ) {
988
  $converter->callback_pass( $username, $_POST['pwd'] );
989
  }
990
  }
61
  * @param string $key Which value to echo?
62
  */
63
  function bbp_current_anonymous_user_data( $key = '' ) {
64
+ echo esc_attr( bbp_get_current_anonymous_user_data( $key ) );
65
  }
66
 
67
  /**
87
  'comment_author_url' => 'comment_author_url',
88
  );
89
 
 
 
 
90
  // Get the current poster's info from the cookies
91
  $bbp_current_poster = wp_get_current_commenter();
92
 
160
  */
161
  function bbp_current_author_ua() {
162
  $retval = ! empty( $_SERVER['HTTP_USER_AGENT'] )
163
+ ? mb_substr( $_SERVER['HTTP_USER_AGENT'], 0, 254 )
164
  : '';
165
 
166
  // Filter & return
664
  function bbp_get_user_reply_count_raw( $user_id = 0 ) {
665
  $user_id = bbp_get_user_id( $user_id );
666
  $bbp_db = bbp_db();
667
+ $statii = "'" . implode( "', '", bbp_get_public_reply_statuses() ) . "'";
668
  $sql = "SELECT COUNT(*)
669
  FROM {$bbp_db->posts}
670
  WHERE post_author = %d
977
  return;
978
  }
979
 
980
+ // Setup the converter
981
+ bbp_setup_converter();
982
+
983
  // Try to convert the old password for this user
984
  $converter = bbp_new_converter( $row->meta_value );
985
 
986
  // Try to call the conversion method
987
+ if ( ( $converter instanceof BBP_Converter_Base ) && method_exists( $converter, 'callback_pass' ) ) {
988
  $converter->callback_pass( $username, $_POST['pwd'] );
989
  }
990
  }
includes/users/options.php CHANGED
@@ -205,7 +205,7 @@ function bbp_user_topic_count( $user_id = 0, $integer = false ) {
205
  return false;
206
  }
207
 
208
- $count = bbp_number_not_negative( get_user_option( '_bbp_topic_count', $user_id ) );
209
  $filter = ( true === $integer )
210
  ? 'bbp_get_user_topic_count_int'
211
  : 'bbp_get_user_topic_count';
@@ -245,7 +245,7 @@ function bbp_user_reply_count( $user_id = 0, $integer = false ) {
245
  return false;
246
  }
247
 
248
- $count = bbp_number_not_negative( get_user_option( '_bbp_reply_count', $user_id ) );
249
  $filter = ( true === $integer )
250
  ? 'bbp_get_user_reply_count_int'
251
  : 'bbp_get_user_reply_count';
@@ -286,7 +286,7 @@ function bbp_user_post_count( $user_id = 0, $integer = false ) {
286
 
287
  $topics = bbp_get_user_topic_count( $user_id, true );
288
  $replies = bbp_get_user_reply_count( $user_id, true );
289
- $count = bbp_number_not_negative( $topics + $replies );
290
  $filter = ( true === $integer )
291
  ? 'bbp_get_user_post_count_int'
292
  : 'bbp_get_user_post_count';
205
  return false;
206
  }
207
 
208
+ $count = get_user_option( '_bbp_topic_count', $user_id );
209
  $filter = ( true === $integer )
210
  ? 'bbp_get_user_topic_count_int'
211
  : 'bbp_get_user_topic_count';
245
  return false;
246
  }
247
 
248
+ $count = get_user_option( '_bbp_reply_count', $user_id );
249
  $filter = ( true === $integer )
250
  ? 'bbp_get_user_reply_count_int'
251
  : 'bbp_get_user_reply_count';
286
 
287
  $topics = bbp_get_user_topic_count( $user_id, true );
288
  $replies = bbp_get_user_reply_count( $user_id, true );
289
+ $count = $topics + $replies;
290
  $filter = ( true === $integer )
291
  ? 'bbp_get_user_post_count_int'
292
  : 'bbp_get_user_post_count';
includes/users/template.php CHANGED
@@ -534,10 +534,10 @@ function bbp_user_profile_url( $user_id = 0, $user_nicename = '' ) {
534
  return false;
535
  }
536
 
537
- // Allow early overriding of the profile URL to cut down on processing
538
- $early_profile_url = apply_filters( 'bbp_pre_get_user_profile_url', $user_id );
539
- if ( is_string( $early_profile_url ) ) {
540
- return $early_profile_url;
541
  }
542
 
543
  // Pretty permalinks
@@ -548,6 +548,7 @@ function bbp_user_profile_url( $user_id = 0, $user_nicename = '' ) {
548
  $user_nicename = bbp_get_user_nicename( $user_id );
549
  }
550
 
 
551
  $url = trailingslashit( bbp_get_root_url() . bbp_get_user_slug() ) . $user_nicename;
552
  $url = user_trailingslashit( $url );
553
  $url = home_url( $url );
@@ -623,10 +624,10 @@ function bbp_user_profile_edit_url( $user_id = 0, $user_nicename = '' ) {
623
  return false;
624
  }
625
 
626
- // Allow early overriding of the profile edit URL to cut down on processing
627
- $early_profile_url = apply_filters( 'bbp_pre_get_user_profile_edit_url', $user_id );
628
- if ( is_string( $early_profile_url ) ) {
629
- return $early_profile_url;
630
  }
631
 
632
  // Get user profile URL
@@ -728,7 +729,7 @@ function bbp_admin_link( $args = array() ) {
728
 
729
  // Parse arguments against default values
730
  $r = bbp_parse_args( $args, array(
731
- 'text' => __( 'Admin', 'bbpress' ),
732
  'before' => '',
733
  'after' => ''
734
  ), 'get_admin_link' );
@@ -814,7 +815,7 @@ function bbp_get_fallback_display_name( $object_id = 0 ) {
814
  * @param int $post_id
815
  */
816
  function bbp_author_display_name( $post_id = 0 ) {
817
- echo bbp_get_author_display_name( $post_id );
818
  }
819
 
820
  /**
@@ -845,7 +846,7 @@ function bbp_author_display_name( $post_id = 0 ) {
845
 
846
  // Not an edit, so rely on current user cookie data
847
  } else {
848
- $retval = bbp_current_anonymous_user_data( 'name' );
849
  }
850
 
851
  // Filter & return
@@ -864,7 +865,7 @@ function bbp_author_display_name( $post_id = 0 ) {
864
  * @param int $post_id
865
  */
866
  function bbp_author_email( $post_id = 0 ) {
867
- echo bbp_get_author_email( $post_id );
868
  }
869
 
870
  /**
@@ -895,7 +896,7 @@ function bbp_author_email( $post_id = 0 ) {
895
 
896
  // Not an edit, so rely on current user cookie data
897
  } else {
898
- $retval = bbp_current_anonymous_user_data( 'email' );
899
  }
900
 
901
  // Filter & return
@@ -945,7 +946,7 @@ function bbp_author_url( $post_id = 0 ) {
945
 
946
  // Not an edit, so rely on current user cookie data
947
  } else {
948
- $retval = bbp_current_anonymous_user_data( 'url' );
949
  }
950
 
951
  // Filter & return
@@ -982,10 +983,10 @@ function bbp_favorites_permalink( $user_id = 0 ) {
982
  return false;
983
  }
984
 
985
- // Allow early overriding of the profile URL to cut down on processing
986
- $early_profile_url = apply_filters( 'bbp_pre_get_favorites_permalink', $user_id );
987
- if ( is_string( $early_profile_url ) ) {
988
- return $early_profile_url;
989
  }
990
 
991
  // Get user profile URL & page
@@ -1071,8 +1072,8 @@ function bbp_user_favorites_link( $args = array(), $user_id = 0, $wrap = true )
1071
 
1072
  // Parse arguments against default values
1073
  $r = bbp_parse_args( $args, array(
1074
- 'favorite' => __( 'Favorite', 'bbpress' ),
1075
- 'favorited' => __( 'Unfavorite', 'bbpress' ),
1076
  'user_id' => 0,
1077
  'object_id' => 0,
1078
  'object_type' => 'post',
@@ -1173,10 +1174,10 @@ function bbp_subscriptions_permalink( $user_id = 0 ) {
1173
  return false;
1174
  }
1175
 
1176
- // Allow early overriding of the profile URL to cut down on processing
1177
- $early_profile_url = apply_filters( 'bbp_pre_get_subscriptions_permalink', $user_id );
1178
- if ( is_string( $early_profile_url ) ) {
1179
- return $early_profile_url;
1180
  }
1181
 
1182
  // Get user profile URL
@@ -1363,7 +1364,7 @@ function bbp_notice_edit_user_success() {
1363
  return;
1364
  } ?>
1365
 
1366
- <div class="bbp-template-notice updated">
1367
  <ul>
1368
  <li><?php esc_html_e( 'User updated.', 'bbpress' ); ?></li>
1369
  </ul>
@@ -1409,7 +1410,7 @@ function bbp_notice_edit_user_pending_email() {
1409
 
1410
  <div class="bbp-template-notice info">
1411
  <ul>
1412
- <li><?php printf( __( 'There is a pending email address change to %1$s. %2$s', 'bbpress' ), $coded_email, $dismiss_link ); ?></li>
1413
  </ul>
1414
  </div>
1415
 
@@ -1612,10 +1613,10 @@ function bbp_user_topics_created_url( $user_id = 0 ) {
1612
  return false;
1613
  }
1614
 
1615
- // Allow early overriding of the profile URL to cut down on processing
1616
- $early_url = apply_filters( 'bbp_pre_get_user_topics_created_url', $user_id );
1617
- if ( is_string( $early_url ) ) {
1618
- return $early_url;
1619
  }
1620
 
1621
  // Get user profile URL
@@ -1665,10 +1666,10 @@ function bbp_user_replies_created_url( $user_id = 0 ) {
1665
  return false;
1666
  }
1667
 
1668
- // Allow early overriding of the profile URL to cut down on processing
1669
- $early_url = apply_filters( 'bbp_pre_get_user_replies_created_url', $user_id );
1670
- if ( is_string( $early_url ) ) {
1671
- return $early_url;
1672
  }
1673
 
1674
  // Get user profile URL
@@ -1718,10 +1719,10 @@ function bbp_user_engagements_url( $user_id = 0 ) {
1718
  return false;
1719
  }
1720
 
1721
- // Allow early overriding of the profile URL to cut down on processing
1722
- $early_url = apply_filters( 'bbp_pre_get_user_engagements_url', $user_id );
1723
- if ( is_string( $early_url ) ) {
1724
- return $early_url;
1725
  }
1726
 
1727
  // Get user profile URL
@@ -1820,11 +1821,11 @@ function bbp_login_notices() {
1820
 
1821
  // loggedout was passed
1822
  if ( ! empty( $_GET['loggedout'] ) && ( true === $_GET['loggedout'] ) ) {
1823
- bbp_add_error( 'loggedout', __( 'You are now logged out.', 'bbpress' ), 'message' );
1824
 
1825
  // registration is disabled
1826
  } elseif ( ! empty( $_GET['registration'] ) && ( 'disabled' === $_GET['registration'] ) ) {
1827
- bbp_add_error( 'registerdisabled', __( 'New user registration is currently not allowed.', 'bbpress' ) );
1828
 
1829
  // Prompt user to check their email
1830
  } elseif ( ! empty( $_GET['checkemail'] ) && in_array( $_GET['checkemail'], array( 'confirm', 'newpass', 'registered' ), true ) ) {
@@ -1833,17 +1834,17 @@ function bbp_login_notices() {
1833
 
1834
  // Email needs confirmation
1835
  case 'confirm' :
1836
- bbp_add_error( 'confirm', __( 'Check your e-mail for the confirmation link.', 'bbpress' ), 'message' );
1837
  break;
1838
 
1839
  // User requested a new password
1840
  case 'newpass' :
1841
- bbp_add_error( 'newpass', __( 'Check your e-mail for your new password.', 'bbpress' ), 'message' );
1842
  break;
1843
 
1844
  // User is newly registered
1845
  case 'registered' :
1846
- bbp_add_error( 'registered', __( 'Registration complete. Please check your e-mail.', 'bbpress' ), 'message' );
1847
  break;
1848
  }
1849
  }
@@ -1980,59 +1981,68 @@ function bbp_author_link( $args = array() ) {
1980
  return bbp_get_reply_author_link( $r );
1981
  }
1982
 
1983
- // Get the post author and proceed
1984
- $user_id = get_post_field( 'post_author', $r['post_id'] );
1985
 
1986
  // Neither a reply nor a topic, so could be a revision
1987
  if ( ! empty( $r['post_id'] ) ) {
1988
 
 
 
 
 
 
1989
  // Generate title with the display name of the author
1990
  if ( empty( $r['link_title'] ) ) {
1991
- $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 ) );
 
 
 
 
 
1992
  }
1993
 
1994
- // Assemble some link bits
1995
- $link_title = ! empty( $r['link_title'] )
 
1996
  ? ' title="' . esc_attr( $r['link_title'] ) . '"'
1997
  : '';
1998
 
1999
- $anonymous = bbp_is_reply_anonymous( $r['post_id'] );
2000
-
2001
- // Declare empty array
2002
- $author_links = array();
2003
-
2004
- // Get avatar
2005
- if ( 'avatar' === $r['type'] || 'both' === $r['type'] ) {
2006
- $author_links[] = get_avatar( $user_id, $r['size'] );
2007
  }
2008
 
2009
- // Get display name
2010
- if ( 'name' === $r['type'] || 'both' === $r['type'] ) {
2011
- $author_links[] = esc_html( get_the_author_meta( 'display_name', $user_id ) );
2012
  }
2013
 
2014
- // Add links if not anonymous
2015
- if ( empty( $anonymous ) && bbp_user_has_profile( $user_id ) ) {
2016
- $author_url = bbp_get_user_profile_url( $user_id );
 
 
2017
 
2018
- foreach ( $author_links as $link_text ) {
2019
- $author_link[] = sprintf( '<a href="%1$s"%2$s>%3$s</a>', esc_url( $author_url ), $link_title, $link_text );
2020
- }
 
 
2021
 
2022
- $author_link = implode( $r['sep'], $author_link );
 
 
2023
 
2024
- // No links if anonymous
2025
- } else {
2026
- $author_link = implode( $r['sep'], $author_links );
2027
- }
2028
 
2029
- // No post so link is empty
2030
- } else {
2031
- $author_link = '';
2032
  }
2033
 
2034
  // Filter & return
2035
- return apply_filters( 'bbp_get_author_link', $author_link, $r );
2036
  }
2037
 
2038
  /** Capabilities **************************************************************/
@@ -2175,8 +2185,9 @@ function bbp_current_user_can_publish_replies() {
2175
  *
2176
  * @since 2.0.0 bbPress (r3127)
2177
  *
2178
- * @param type $args
2179
- * @return type
 
2180
  */
2181
  function bbp_get_forums_for_current_user( $args = array() ) {
2182
 
534
  return false;
535
  }
536
 
537
+ // Bail if intercepted
538
+ $intercept = bbp_maybe_intercept( 'bbp_pre_get_user_profile_url', func_get_args() );
539
+ if ( bbp_is_intercepted( $intercept ) ) {
540
+ return $intercept;
541
  }
542
 
543
  // Pretty permalinks
548
  $user_nicename = bbp_get_user_nicename( $user_id );
549
  }
550
 
551
+ // Run through home_url()
552
  $url = trailingslashit( bbp_get_root_url() . bbp_get_user_slug() ) . $user_nicename;
553
  $url = user_trailingslashit( $url );
554
  $url = home_url( $url );
624
  return false;
625
  }
626
 
627
+ // Bail if intercepted
628
+ $intercept = bbp_maybe_intercept( 'bbp_pre_get_user_profile_edit_url', func_get_args() );
629
+ if ( bbp_is_intercepted( $intercept ) ) {
630
+ return $intercept;
631
  }
632
 
633
  // Get user profile URL
729
 
730
  // Parse arguments against default values
731
  $r = bbp_parse_args( $args, array(
732
+ 'text' => esc_html__( 'Admin', 'bbpress' ),
733
  'before' => '',
734
  'after' => ''
735
  ), 'get_admin_link' );
815
  * @param int $post_id
816
  */
817
  function bbp_author_display_name( $post_id = 0 ) {
818
+ echo esc_attr( bbp_get_author_display_name( $post_id ) );
819
  }
820
 
821
  /**
846
 
847
  // Not an edit, so rely on current user cookie data
848
  } else {
849
+ $retval = bbp_get_current_anonymous_user_data( 'name' );
850
  }
851
 
852
  // Filter & return
865
  * @param int $post_id
866
  */
867
  function bbp_author_email( $post_id = 0 ) {
868
+ echo esc_attr( bbp_get_author_email( $post_id ) );
869
  }
870
 
871
  /**
896
 
897
  // Not an edit, so rely on current user cookie data
898
  } else {
899
+ $retval = bbp_get_current_anonymous_user_data( 'email' );
900
  }
901
 
902
  // Filter & return
946
 
947
  // Not an edit, so rely on current user cookie data
948
  } else {
949
+ $retval = bbp_get_current_anonymous_user_data( 'url' );
950
  }
951
 
952
  // Filter & return
983
  return false;
984
  }
985
 
986
+ // Bail if intercepted
987
+ $intercept = bbp_maybe_intercept( 'bbp_pre_get_favorites_permalink', func_get_args() );
988
+ if ( bbp_is_intercepted( $intercept ) ) {
989
+ return $intercept;
990
  }
991
 
992
  // Get user profile URL & page
1072
 
1073
  // Parse arguments against default values
1074
  $r = bbp_parse_args( $args, array(
1075
+ 'favorite' => esc_html__( 'Favorite', 'bbpress' ),
1076
+ 'favorited' => esc_html__( 'Unfavorite', 'bbpress' ),
1077
  'user_id' => 0,
1078
  'object_id' => 0,
1079
  'object_type' => 'post',
1174
  return false;
1175
  }
1176
 
1177
+ // Bail if intercepted
1178
+ $intercept = bbp_maybe_intercept( 'bbp_pre_get_subscriptions_permalink', func_get_args() );
1179
+ if ( bbp_is_intercepted( $intercept ) ) {
1180
+ return $intercept;
1181
  }
1182
 
1183
  // Get user profile URL
1364
  return;
1365
  } ?>
1366
 
1367
+ <div class="bbp-template-notice">
1368
  <ul>
1369
  <li><?php esc_html_e( 'User updated.', 'bbpress' ); ?></li>
1370
  </ul>
1410
 
1411
  <div class="bbp-template-notice info">
1412
  <ul>
1413
+ <li><?php printf( esc_html__( 'There is a pending email address change to %1$s. %2$s', 'bbpress' ), $coded_email, $dismiss_link ); ?></li>
1414
  </ul>
1415
  </div>
1416
 
1613
  return false;
1614
  }
1615
 
1616
+ // Bail if intercepted
1617
+ $intercept = bbp_maybe_intercept( 'bbp_pre_get_user_topics_created_url', func_get_args() );
1618
+ if ( bbp_is_intercepted( $intercept ) ) {
1619
+ return $intercept;
1620
  }
1621
 
1622
  // Get user profile URL
1666
  return false;
1667
  }
1668
 
1669
+ // Bail if intercepted
1670
+ $intercept = bbp_maybe_intercept( 'bbp_pre_get_user_replies_created_url', func_get_args() );
1671
+ if ( bbp_is_intercepted( $intercept ) ) {
1672
+ return $intercept;
1673
  }
1674
 
1675
  // Get user profile URL
1719
  return false;
1720
  }
1721
 
1722
+ // Bail if intercepted
1723
+ $intercept = bbp_maybe_intercept( 'bbp_pre_get_user_engagements_url', func_get_args() );
1724
+ if ( bbp_is_intercepted( $intercept ) ) {
1725
+ return $intercept;
1726
  }
1727
 
1728
  // Get user profile URL
1821
 
1822
  // loggedout was passed
1823
  if ( ! empty( $_GET['loggedout'] ) && ( true === $_GET['loggedout'] ) ) {
1824
+ bbp_add_error( 'loggedout', esc_html__( 'You are now logged out.', 'bbpress' ), 'message' );
1825
 
1826
  // registration is disabled
1827
  } elseif ( ! empty( $_GET['registration'] ) && ( 'disabled' === $_GET['registration'] ) ) {
1828
+ bbp_add_error( 'registerdisabled', esc_html__( 'New user registration is currently not allowed.', 'bbpress' ) );
1829
 
1830
  // Prompt user to check their email
1831
  } elseif ( ! empty( $_GET['checkemail'] ) && in_array( $_GET['checkemail'], array( 'confirm', 'newpass', 'registered' ), true ) ) {
1834
 
1835
  // Email needs confirmation
1836
  case 'confirm' :
1837
+ bbp_add_error( 'confirm', esc_html__( 'Check your e-mail for the confirmation link.', 'bbpress' ), 'message' );
1838
  break;
1839
 
1840
  // User requested a new password
1841
  case 'newpass' :
1842
+ bbp_add_error( 'newpass', esc_html__( 'Check your e-mail for your new password.', 'bbpress' ), 'message' );
1843
  break;
1844
 
1845
  // User is newly registered
1846
  case 'registered' :
1847
+ bbp_add_error( 'registered', esc_html__( 'Registration complete. Please check your e-mail.', 'bbpress' ), 'message' );
1848
  break;
1849
  }
1850
  }
1981
  return bbp_get_reply_author_link( $r );
1982
  }
1983
 
1984
+ // Default return value
1985
+ $author_link = '';
1986
 
1987
  // Neither a reply nor a topic, so could be a revision
1988
  if ( ! empty( $r['post_id'] ) ) {
1989
 
1990
+ // Get some useful reply information
1991
+ $user_id = get_post_field( 'post_author', $r['post_id'] );
1992
+ $author_url = bbp_get_user_profile_url( $user_id );
1993
+ $anonymous = bbp_is_reply_anonymous( $r['post_id'] );
1994
+
1995
  // Generate title with the display name of the author
1996
  if ( empty( $r['link_title'] ) ) {
1997
+ $author = get_the_author_meta( 'display_name', $user_id );
1998
+ $title = empty( $anonymous )
1999
+ ? esc_attr__( "View %s's profile", 'bbpress' )
2000
+ : esc_attr__( "Visit %s's website", 'bbpress' );
2001
+
2002
+ $r['link_title'] = sprintf( $title, $author );
2003
  }
2004
 
2005
+ // Setup title and author_links array
2006
+ $author_links = array();
2007
+ $link_title = ! empty( $r['link_title'] )
2008
  ? ' title="' . esc_attr( $r['link_title'] ) . '"'
2009
  : '';
2010
 
2011
+ // Get avatar (unescaped, because HTML)
2012
+ if ( ( 'avatar' === $r['type'] ) || ( 'both' === $r['type'] ) ) {
2013
+ $author_links['avatar'] = get_avatar( $user_id, $r['size'] );
 
 
 
 
 
2014
  }
2015
 
2016
+ // Get display name (escaped, because never HTML)
2017
+ if ( ( 'name' === $r['type'] ) || ( 'both' === $r['type'] ) ) {
2018
+ $author_links['name'] = esc_html( get_the_author_meta( 'display_name', $user_id ) );
2019
  }
2020
 
2021
+ // Empty array
2022
+ $links = array();
2023
+ $sprint = empty( $anonymous ) && bbp_user_has_profile( $user_id )
2024
+ ? '<a href="%1$s"%2$s%3$s>%4$s</a>'
2025
+ : '<span %2$s%3$s>%4$s</span>';
2026
 
2027
+ // Wrap each link
2028
+ foreach ( $author_links as $link => $link_text ) {
2029
+ $link_class = ' class="bbp-author-' . esc_attr( $link ) . '"';
2030
+ $links[] = sprintf( $sprint, esc_url( $author_url ), $link_title, $link_class, $link_text );
2031
+ }
2032
 
2033
+ // Juggle
2034
+ $author_links = $links;
2035
+ unset( $links );
2036
 
2037
+ // Filter sections
2038
+ $sections = apply_filters( 'bbp_get_author_links', $author_links, $r, $args );
 
 
2039
 
2040
+ // Assemble sections into author link
2041
+ $author_link = implode( $r['sep'], $sections );
 
2042
  }
2043
 
2044
  // Filter & return
2045
+ return apply_filters( 'bbp_get_author_link', $author_link, $r, $args );
2046
  }
2047
 
2048
  /** Capabilities **************************************************************/
2185
  *
2186
  * @since 2.0.0 bbPress (r3127)
2187
  *
2188
+ * @param array $args
2189
+ *
2190
+ * @return array
2191
  */
2192
  function bbp_get_forums_for_current_user( $args = array() ) {
2193
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: matt, johnjamesjacoby, jmdodd, netweb, sergeybiryukov
3
  Tags: forums, discussion, support, theme, akismet, multisite
4
  Requires at least: 4.7
5
  Tested up to: 4.9
6
- Stable tag: 2.5.14
7
  License: GPLv2 or later
8
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -54,6 +54,9 @@ bbPress is intentionally simple yet infinitely powerful forum software, built by
54
 
55
  == Changelog ==
56
 
 
 
 
57
  = 2.5.14 =
58
  * Released on September 9, 2016
59
 
@@ -316,7 +319,7 @@ bbPress is intentionally simple yet infinitely powerful forum software, built by
316
  * Green admin color scheme for WordPress 3.2
317
  * Audit usage of get strings for moderator level and above users
318
  * Normalize theme, shortcodes, and template parts
319
- * Added blacklist_keys support
320
  * Added actions to topic/reply forms
321
  * Added Forum Participant role for multisite use
322
  * Added humans.txt
3
  Tags: forums, discussion, support, theme, akismet, multisite
4
  Requires at least: 4.7
5
  Tested up to: 4.9
6
+ Stable tag: 2.6.0
7
  License: GPLv2 or later
8
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
9
 
54
 
55
  == Changelog ==
56
 
57
+ = 2.6.0 =
58
+ * Released on September 4, 2018
59
+
60
  = 2.5.14 =
61
  * Released on September 9, 2016
62
 
319
  * Green admin color scheme for WordPress 3.2
320
  * Audit usage of get strings for moderator level and above users
321
  * Normalize theme, shortcodes, and template parts
322
+ * Added strict moderation support
323
  * Added actions to topic/reply forms
324
  * Added Forum Participant role for multisite use
325
  * Added humans.txt
templates/default/bbpress-functions.php CHANGED
@@ -155,7 +155,7 @@ class BBP_Default extends BBP_Theme_Compat {
155
 
156
  // Editor scripts
157
  // @see https://bbpress.trac.wordpress.org/ticket/2930
158
- if ( bbp_use_wp_editor() ) {
159
  $scripts['bbpress-editor'] = array(
160
  'file' => 'js/editor' . $suffix . '.js',
161
  'dependencies' => array( 'jquery' )
155
 
156
  // Editor scripts
157
  // @see https://bbpress.trac.wordpress.org/ticket/2930
158
+ if ( bbp_use_wp_editor() && is_bbpress() ) {
159
  $scripts['bbpress-editor'] = array(
160
  'file' => 'js/editor' . $suffix . '.js',
161
  'dependencies' => array( 'jquery' )
templates/default/bbpress/form-forum.php CHANGED
@@ -24,7 +24,7 @@ if ( bbp_is_forum_edit() ) : ?>
24
 
25
  <div id="new-forum-<?php bbp_forum_id(); ?>" class="bbp-forum-form">
26
 
27
- <form id="new-post" name="new-post" method="post" action="<?php bbp_forum_permalink(); ?>">
28
 
29
  <?php do_action( 'bbp_theme_before_forum_form' ); ?>
30
 
24
 
25
  <div id="new-forum-<?php bbp_forum_id(); ?>" class="bbp-forum-form">
26
 
27
+ <form id="new-post" name="new-post" method="post">
28
 
29
  <?php do_action( 'bbp_theme_before_forum_form' ); ?>
30
 
templates/default/bbpress/form-reply-move.php CHANGED
@@ -20,7 +20,7 @@ defined( 'ABSPATH' ) || exit;
20
 
21
  <div id="move-reply-<?php bbp_topic_id(); ?>" class="bbp-reply-move">
22
 
23
- <form id="move_reply" name="move_reply" method="post" action="<?php bbp_reply_permalink(); ?>">
24
 
25
  <fieldset class="bbp-form">
26
 
20
 
21
  <div id="move-reply-<?php bbp_topic_id(); ?>" class="bbp-reply-move">
22
 
23
+ <form id="move_reply" name="move_reply" method="post">
24
 
25
  <fieldset class="bbp-form">
26
 
templates/default/bbpress/form-reply.php CHANGED
@@ -22,7 +22,7 @@ if ( bbp_is_reply_edit() ) : ?>
22
 
23
  <div id="new-reply-<?php bbp_topic_id(); ?>" class="bbp-reply-form">
24
 
25
- <form id="new-post" name="new-post" method="post" action="<?php bbp_reply_permalink() ?>">
26
 
27
  <?php do_action( 'bbp_theme_before_reply_form' ); ?>
28
 
@@ -82,7 +82,7 @@ if ( bbp_is_reply_edit() ) : ?>
82
 
83
  <?php endif; ?>
84
 
85
- <?php if ( bbp_allow_topic_tags() && current_user_can( 'assign_topic_tags' ) ) : ?>
86
 
87
  <?php do_action( 'bbp_theme_before_reply_form_tags' ); ?>
88
 
22
 
23
  <div id="new-reply-<?php bbp_topic_id(); ?>" class="bbp-reply-form">
24
 
25
+ <form id="new-post" name="new-post" method="post">
26
 
27
  <?php do_action( 'bbp_theme_before_reply_form' ); ?>
28
 
82
 
83
  <?php endif; ?>
84
 
85
+ <?php if ( bbp_allow_topic_tags() && current_user_can( 'assign_topic_tags', bbp_get_topic_id() ) ) : ?>
86
 
87
  <?php do_action( 'bbp_theme_before_reply_form_tags' ); ?>
88
 
templates/default/bbpress/form-search.php CHANGED
@@ -13,7 +13,7 @@ defined( 'ABSPATH' ) || exit;
13
  if ( bbp_allow_search() ) : ?>
14
 
15
  <div class="bbp-search-form">
16
- <form role="search" method="get" id="bbp-search-form" action="<?php bbp_search_url(); ?>">
17
  <div>
18
  <label class="screen-reader-text hidden" for="bbp_search"><?php esc_html_e( 'Search for:', 'bbpress' ); ?></label>
19
  <input type="hidden" name="action" value="bbp-search-request" />
13
  if ( bbp_allow_search() ) : ?>
14
 
15
  <div class="bbp-search-form">
16
+ <form role="search" method="get" id="bbp-search-form">
17
  <div>
18
  <label class="screen-reader-text hidden" for="bbp_search"><?php esc_html_e( 'Search for:', 'bbpress' ); ?></label>
19
  <input type="hidden" name="action" value="bbp-search-request" />
templates/default/bbpress/form-topic-merge.php CHANGED
@@ -20,7 +20,7 @@ defined( 'ABSPATH' ) || exit;
20
 
21
  <div id="merge-topic-<?php bbp_topic_id(); ?>" class="bbp-topic-merge">
22
 
23
- <form id="merge_topic" name="merge_topic" method="post" action="<?php bbp_topic_permalink(); ?>">
24
 
25
  <fieldset class="bbp-form">
26
 
20
 
21
  <div id="merge-topic-<?php bbp_topic_id(); ?>" class="bbp-topic-merge">
22
 
23
+ <form id="merge_topic" name="merge_topic" method="post">
24
 
25
  <fieldset class="bbp-form">
26
 
templates/default/bbpress/form-topic-split.php CHANGED
@@ -20,7 +20,7 @@ defined( 'ABSPATH' ) || exit;
20
 
21
  <div id="split-topic-<?php bbp_topic_id(); ?>" class="bbp-topic-split">
22
 
23
- <form id="split_topic" name="split_topic" method="post" action="<?php bbp_topic_permalink(); ?>">
24
 
25
  <fieldset class="bbp-form">
26
 
20
 
21
  <div id="split-topic-<?php bbp_topic_id(); ?>" class="bbp-topic-split">
22
 
23
+ <form id="split_topic" name="split_topic" method="post">
24
 
25
  <fieldset class="bbp-form">
26
 
templates/default/bbpress/form-topic-tag.php CHANGED
@@ -34,7 +34,7 @@ if ( current_user_can( 'edit_topic_tags' ) ) : ?>
34
  </ul>
35
  </div>
36
 
37
- <form id="rename_tag" name="rename_tag" method="post" action="<?php bbp_topic_tag_link(); ?>">
38
 
39
  <div>
40
  <label for="tag-name"><?php esc_html_e( 'Name:', 'bbpress' ); ?></label>
@@ -74,7 +74,7 @@ if ( current_user_can( 'edit_topic_tags' ) ) : ?>
74
  </ul>
75
  </div>
76
 
77
- <form id="merge_tag" name="merge_tag" method="post" action="<?php bbp_topic_tag_link(); ?>">
78
 
79
  <div>
80
  <label for="tag-existing-name"><?php esc_html_e( 'Existing tag:', 'bbpress' ); ?></label>
@@ -111,7 +111,7 @@ if ( current_user_can( 'edit_topic_tags' ) ) : ?>
111
  </ul>
112
  </div>
113
 
114
- <form id="delete_tag" name="delete_tag" method="post" action="<?php bbp_topic_tag_link(); ?>">
115
 
116
  <div class="bbp-submit-wrapper">
117
  <button type="submit" class="button submit" onclick="return confirm('<?php echo esc_js( sprintf( esc_html__( 'Are you sure you want to delete the "%s" tag? This is permanent and cannot be undone.', 'bbpress' ), bbp_get_topic_tag_name() ) ); ?>');"><?php esc_attr_e( 'Delete', 'bbpress' ); ?></button>
34
  </ul>
35
  </div>
36
 
37
+ <form id="rename_tag" name="rename_tag" method="post">
38
 
39
  <div>
40
  <label for="tag-name"><?php esc_html_e( 'Name:', 'bbpress' ); ?></label>
74
  </ul>
75
  </div>
76
 
77
+ <form id="merge_tag" name="merge_tag" method="post">
78
 
79
  <div>
80
  <label for="tag-existing-name"><?php esc_html_e( 'Existing tag:', 'bbpress' ); ?></label>
111
  </ul>
112
  </div>
113
 
114
+ <form id="delete_tag" name="delete_tag" method="post">
115
 
116
  <div class="bbp-submit-wrapper">
117
  <button type="submit" class="button submit" onclick="return confirm('<?php echo esc_js( sprintf( esc_html__( 'Are you sure you want to delete the "%s" tag? This is permanent and cannot be undone.', 'bbpress' ), bbp_get_topic_tag_name() ) ); ?>');"><?php esc_attr_e( 'Delete', 'bbpress' ); ?></button>
templates/default/bbpress/form-topic.php CHANGED
@@ -32,7 +32,7 @@ if ( ! bbp_is_single_forum() ) : ?>
32
 
33
  <div id="new-topic-<?php bbp_topic_id(); ?>" class="bbp-topic-form">
34
 
35
- <form id="new-post" name="new-post" method="post" action="<?php bbp_topic_permalink(); ?>">
36
 
37
  <?php do_action( 'bbp_theme_before_topic_form' ); ?>
38
 
@@ -103,7 +103,7 @@ if ( ! bbp_is_single_forum() ) : ?>
103
 
104
  <?php endif; ?>
105
 
106
- <?php if ( bbp_allow_topic_tags() && current_user_can( 'assign_topic_tags' ) ) : ?>
107
 
108
  <?php do_action( 'bbp_theme_before_topic_form_tags' ); ?>
109
 
32
 
33
  <div id="new-topic-<?php bbp_topic_id(); ?>" class="bbp-topic-form">
34
 
35
+ <form id="new-post" name="new-post" method="post">
36
 
37
  <?php do_action( 'bbp_theme_before_topic_form' ); ?>
38
 
103
 
104
  <?php endif; ?>
105
 
106
+ <?php if ( bbp_allow_topic_tags() && current_user_can( 'assign_topic_tags', bbp_get_topic_id() ) ) : ?>
107
 
108
  <?php do_action( 'bbp_theme_before_topic_form_tags' ); ?>
109
 
templates/default/bbpress/form-user-edit.php CHANGED
@@ -12,7 +12,7 @@ defined( 'ABSPATH' ) || exit;
12
 
13
  ?>
14
 
15
- <form id="bbp-your-profile" action="<?php bbp_user_profile_edit_url( bbp_get_displayed_user_id() ); ?>" method="post" enctype="multipart/form-data">
16
 
17
  <h2 class="entry-title"><?php esc_html_e( 'Name', 'bbpress' ) ?></h2>
18
 
12
 
13
  ?>
14
 
15
+ <form id="bbp-your-profile" method="post" enctype="multipart/form-data">
16
 
17
  <h2 class="entry-title"><?php esc_html_e( 'Name', 'bbpress' ) ?></h2>
18
 
templates/default/bbpress/form-user-login.php CHANGED
@@ -35,7 +35,7 @@ defined( 'ABSPATH' ) || exit;
35
 
36
  <div class="bbp-submit-wrapper">
37
 
38
- <button type="submit" name="user-submit" class="button submit user-submit"><?php esc_html_e( 'Log In', 'bbpress' ); ?></button>
39
 
40
  <?php bbp_user_login_fields(); ?>
41
 
35
 
36
  <div class="bbp-submit-wrapper">
37
 
38
+ <button type="submit" name="user-submit" id="user-submit" class="button submit user-submit"><?php esc_html_e( 'Log In', 'bbpress' ); ?></button>
39
 
40
  <?php bbp_user_login_fields(); ?>
41
 
templates/default/css/bbpress-rtl.css CHANGED
@@ -23,7 +23,9 @@
23
  height: 1px;
24
  width: 1px;
25
  overflow: hidden;
26
- clip: rect(0 0 0 0);
 
 
27
  border: 0;
28
  word-wrap: normal !important; /* many screen reader and browser combinations announce broken words as they would appear visually */
29
  }
@@ -34,12 +36,14 @@
34
  margin-bottom: 20px;
35
  overflow: hidden;
36
  font-size: 12px;
 
37
  }
38
 
39
  #bbpress-forums a,
40
  #bbpress-forums a:hover {
41
  box-shadow: none;
42
  border: none;
 
43
  }
44
 
45
  #bbpress-forums hr {
@@ -225,16 +229,16 @@ li.bbp-topic-freshness {
225
  float: none;
226
  }
227
 
228
- #bbpress-forums div.bbp-forum-author a.bbp-author-name,
229
- #bbpress-forums div.bbp-topic-author a.bbp-author-name,
230
- #bbpress-forums div.bbp-reply-author a.bbp-author-name {
231
  margin: 0 12px;
232
  word-wrap: break-word;
233
  display: inline-block;
234
  }
235
 
236
- #bbpress-forums div.bbp-topic-author a.bbp-author-name,
237
- #bbpress-forums div.bbp-reply-author a.bbp-author-name {
238
  clear: right;
239
  display: block;
240
  }
@@ -542,7 +546,7 @@ td.bbp-topic-counts {
542
  border: 1px solid #aca;
543
  background-color: #dfd;
544
  font-weight: 700;
545
- font-size: 13px;
546
  }
547
 
548
  .bbp-row-actions #favorite-toggle a:hover {
@@ -570,7 +574,7 @@ td.bbp-topic-counts {
570
  border: 1px solid #aca;
571
  background-color: #dfd;
572
  font-weight: 700;
573
- font-size: 13px;
574
  }
575
 
576
  .bbp-row-actions #subscription-toggle a:hover {
@@ -617,50 +621,56 @@ td.bbp-topic-counts {
617
  display: inline;
618
  }
619
 
620
- .bbp-pagination-links a,
621
- .bbp-pagination-links span.current {
 
 
 
 
 
 
622
  display: block;
623
  float: right;
 
 
624
  padding: 0 5px;
625
  margin-right: 5px;
626
  border: 1px solid #efefef;
 
 
 
627
  text-decoration: none;
628
  }
629
 
630
- .bbp-pagination-links a:hover,
631
- .bbp-pagination-links span.current {
632
- background: #eee;
633
- opacity: 0.8;
634
- border: 1px solid #ddd;
635
- }
636
-
637
- .bbp-pagination-links span.dots {
638
  display: block;
639
  float: right;
640
  padding: 1px 4px;
641
  margin-right: 5px;
642
  }
643
 
644
- .bbp-pagination {
645
- float: right;
646
- width: 100%;
647
- margin-bottom: 15px;
648
- }
649
-
650
- .bbp-topic-pagination {
651
  display: inline-block;
652
  margin-right: 5px;
653
  margin-bottom: 2px;
654
  }
655
 
656
- .bbp-topic-pagination a {
657
  font-size: 10px;
658
  line-height: 10px;
659
  padding: 1px 3px;
660
  border: 1px solid #ddd;
 
661
  text-decoration: none;
662
  }
663
 
 
 
 
 
 
 
 
664
 
665
  /* =Forms
666
  -------------------------------------------------------------- */
@@ -1411,8 +1421,8 @@ body.my-account #bbpress-forums {
1411
  width: 100%;
1412
  }
1413
 
1414
- #bbpress-forums div.bbp-topic-author a.bbp-author-name,
1415
- #bbpress-forums div.bbp-reply-author a.bbp-author-name {
1416
  clear: none;
1417
  display: inline-block;
1418
  margin-right: 0;
23
  height: 1px;
24
  width: 1px;
25
  overflow: hidden;
26
+ clip: rect(1px, 1px, 1px, 1px);
27
+ -webkit-clip-path: inset(50%);
28
+ clip-path: inset(50%);
29
  border: 0;
30
  word-wrap: normal !important; /* many screen reader and browser combinations announce broken words as they would appear visually */
31
  }
36
  margin-bottom: 20px;
37
  overflow: hidden;
38
  font-size: 12px;
39
+ line-height: 18px;
40
  }
41
 
42
  #bbpress-forums a,
43
  #bbpress-forums a:hover {
44
  box-shadow: none;
45
  border: none;
46
+ transition: none;
47
  }
48
 
49
  #bbpress-forums hr {
229
  float: none;
230
  }
231
 
232
+ #bbpress-forums div.bbp-forum-author .bbp-author-name,
233
+ #bbpress-forums div.bbp-topic-author .bbp-author-name,
234
+ #bbpress-forums div.bbp-reply-author .bbp-author-name {
235
  margin: 0 12px;
236
  word-wrap: break-word;
237
  display: inline-block;
238
  }
239
 
240
+ #bbpress-forums div.bbp-topic-author .bbp-author-name,
241
+ #bbpress-forums div.bbp-reply-author .bbp-author-name {
242
  clear: right;
243
  display: block;
244
  }
546
  border: 1px solid #aca;
547
  background-color: #dfd;
548
  font-weight: 700;
549
+ font-size: 12px;
550
  }
551
 
552
  .bbp-row-actions #favorite-toggle a:hover {
574
  border: 1px solid #aca;
575
  background-color: #dfd;
576
  font-weight: 700;
577
+ font-size: 12px;
578
  }
579
 
580
  .bbp-row-actions #subscription-toggle a:hover {
621
  display: inline;
622
  }
623
 
624
+ .bbp-pagination {
625
+ float: right;
626
+ width: 100%;
627
+ margin-bottom: 15px;
628
+ }
629
+
630
+ #bbpress-forums .bbp-pagination-links a,
631
+ #bbpress-forums .bbp-pagination-links span.current {
632
  display: block;
633
  float: right;
634
+ font-size: 12px;
635
+ line-height: 18px;
636
  padding: 0 5px;
637
  margin-right: 5px;
638
  border: 1px solid #efefef;
639
+ border-radius: 0;
640
+ background: transparent;
641
+ color: inherit;
642
  text-decoration: none;
643
  }
644
 
645
+ #bbpress-forums .bbp-pagination-links span.dots {
 
 
 
 
 
 
 
646
  display: block;
647
  float: right;
648
  padding: 1px 4px;
649
  margin-right: 5px;
650
  }
651
 
652
+ #bbpress-forums .bbp-topic-pagination {
 
 
 
 
 
 
653
  display: inline-block;
654
  margin-right: 5px;
655
  margin-bottom: 2px;
656
  }
657
 
658
+ #bbpress-forums .bbp-topic-pagination a {
659
  font-size: 10px;
660
  line-height: 10px;
661
  padding: 1px 3px;
662
  border: 1px solid #ddd;
663
+ color: inherit;
664
  text-decoration: none;
665
  }
666
 
667
+ #bbpress-forums .bbp-topic-pagination a:hover,
668
+ #bbpress-forums .bbp-pagination-links a:hover,
669
+ #bbpress-forums .bbp-pagination-links span.current {
670
+ background: #eee;
671
+ opacity: 0.8;
672
+ border: 1px solid #ddd;
673
+ }
674
 
675
  /* =Forms
676
  -------------------------------------------------------------- */
1421
  width: 100%;
1422
  }
1423
 
1424
+ #bbpress-forums div.bbp-topic-author .bbp-author-name,
1425
+ #bbpress-forums div.bbp-reply-author .bbp-author-name {
1426
  clear: none;
1427
  display: inline-block;
1428
  margin-right: 0;
templates/default/css/bbpress-rtl.min.css CHANGED
@@ -1 +1 @@
1
- .hidden,.js .hide-if-js{display:none}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0;word-wrap:normal!important}#bbpress-forums{background:0 0;clear:both;margin-bottom:20px;overflow:hidden;font-size:12px}#bbpress-forums a,#bbpress-forums a:hover{box-shadow:none;border:none}#bbpress-forums hr{margin:0 0 24px}#bbpress-forums div.even,#bbpress-forums ul.even{background-color:#fff}#bbpress-forums div.odd,#bbpress-forums ul.odd{background-color:#fbfbfb}body.reply-edit .reply{float:none}#bbpress-forums div.reply{height:auto;width:100%}#bbpress-forums div.bbp-forum-header,#bbpress-forums div.bbp-reply-header,#bbpress-forums div.bbp-topic-header{background-color:#f4f4f4}#bbpress-forums .status-spam.even,#bbpress-forums .status-trash.even{background-color:#fee}#bbpress-forums .status-spam.odd,#bbpress-forums .status-trash.odd{background-color:#fdd}#bbpress-forums .status-pending.even,#bbpress-forums .status-pending.odd,#bbpress-forums ul.status-pending a{background-color:#fef7f1}#bbpress-forums ul.status-closed,#bbpress-forums ul.status-closed a{color:#ccc}#bbpress-forums ul{background:0 0;list-style:none;margin:0;padding:0}#bbpress-forums ul.bbp-threaded-replies{margin-right:50px}#bbpress-forums li{background:0 0;margin:0;list-style:none}#bbpress-forums ul.bbp-forums,#bbpress-forums ul.bbp-lead-topic,#bbpress-forums ul.bbp-replies,#bbpress-forums ul.bbp-search-results,#bbpress-forums ul.bbp-topics{font-size:12px;overflow:hidden;border:1px solid #eee;margin-bottom:20px;clear:both}#bbpress-forums li.bbp-body,#bbpress-forums li.bbp-footer,#bbpress-forums li.bbp-header{clear:both}#bbpress-forums li.bbp-footer,#bbpress-forums li.bbp-header{background:#f3f3f3;border-top:1px solid #eee;font-weight:700;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:1}li.bbp-forum-info,li.bbp-topic-title{float:right;text-align:right;width:55%}li.bbp-forum-reply-count,li.bbp-forum-topic-count,li.bbp-topic-reply-count,li.bbp-topic-voice-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}#bbpress-forums #favorite-toggle,#bbpress-forums #subscription-toggle{float:left}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{background:0 0;border:none;font-size:16px;line-height:1;margin:8px 0;padding:0;text-transform:none}#bbpress-forums div.bbp-forum-author,#bbpress-forums div.bbp-reply-author,#bbpress-forums div.bbp-topic-author{float:right;text-align:center;width:115px}#bbpress-forums div.bbp-forum-author img.avatar,#bbpress-forums div.bbp-reply-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar{border:none;max-width:80px;padding:0;margin:12px auto 0;float:none}#bbpress-forums div.bbp-forum-author a.bbp-author-name,#bbpress-forums div.bbp-reply-author a.bbp-author-name,#bbpress-forums div.bbp-topic-author a.bbp-author-name{margin:0 12px;word-wrap:break-word;display:inline-block}#bbpress-forums div.bbp-reply-author a.bbp-author-name,#bbpress-forums div.bbp-topic-author a.bbp-author-name{clear:right;display:block}#bbpress-forums div.bbp-forum-author .bbp-author-role,#bbpress-forums div.bbp-reply-author .bbp-author-role,#bbpress-forums div.bbp-topic-author .bbp-author-role{font-size:11px;font-style:italic}#bbpress-forums li.bbp-footer .bbp-forum-author,#bbpress-forums li.bbp-footer .bbp-reply-author,#bbpress-forums li.bbp-footer .bbp-search-author,#bbpress-forums li.bbp-footer .bbp-topic-author,#bbpress-forums li.bbp-header .bbp-forum-author,#bbpress-forums li.bbp-header .bbp-reply-author,#bbpress-forums li.bbp-header .bbp-search-author,#bbpress-forums li.bbp-header .bbp-topic-author{float:right;margin:0;padding:0;width:120px}#bbpress-forums li.bbp-footer .bbp-forum-content,#bbpress-forums li.bbp-footer .bbp-reply-content,#bbpress-forums li.bbp-footer .bbp-search-content,#bbpress-forums li.bbp-footer .bbp-topic-content,#bbpress-forums li.bbp-header .bbp-forum-content,#bbpress-forums li.bbp-header .bbp-reply-content,#bbpress-forums li.bbp-header .bbp-search-content,#bbpress-forums li.bbp-header .bbp-topic-content{margin-right:140px;padding:0;text-align:right}div.bbp-forum-header,div.bbp-reply-header,div.bbp-topic-header,li.bbp-body div.hentry{margin:0;overflow:hidden;padding:8px}div.bbp-forum-header,div.bbp-reply-header,div.bbp-topic-header{border-top:1px solid #ddd;clear:both}span.bbp-author-ip{font-size:11px;font-weight:700;word-wrap:break-word;color:#aaa}#bbpress-forums div.bbp-forum-content,#bbpress-forums div.bbp-reply-content,#bbpress-forums div.bbp-topic-content{margin-right:130px;padding:12px 0 12px 12px;text-align:right}#bbpress-forums div.bbp-forum-content:after,#bbpress-forums div.bbp-reply-content:after,#bbpress-forums div.bbp-topic-content:after{clear:both;content:".";display:block;float:none;height:0;font-size:0;visibility:hidden}#bbpress-forums div.bbp-reply-content a,#bbpress-forums div.bbp-topic-content a{background:0 0;border:none;display:inline;font-weight:400;margin:0;padding:0}#bbpress-forums div.bbp-reply-content a.bbp-user-mention,#bbpress-forums div.bbp-topic-content a.bbp-user-mention{background:0 0;border:none;text-decoration:none;text-shadow:none;display:inline;font-weight:600;margin:0;padding:0}#bbpress-forums div.bbp-reply-content h1,#bbpress-forums div.bbp-reply-content h2,#bbpress-forums div.bbp-reply-content h3,#bbpress-forums div.bbp-reply-content h4,#bbpress-forums div.bbp-reply-content h5,#bbpress-forums div.bbp-reply-content h6,#bbpress-forums div.bbp-topic-content h1,#bbpress-forums div.bbp-topic-content h2,#bbpress-forums div.bbp-topic-content h3,#bbpress-forums div.bbp-topic-content h4,#bbpress-forums div.bbp-topic-content h5,#bbpress-forums div.bbp-topic-content h6{clear:none;line-height:1;margin:24px 0;padding:0}#bbpress-forums div.bbp-reply-content img,#bbpress-forums div.bbp-topic-content img{max-width:100%;height:auto}#bbpress-forums div.bbp-reply-content ol,#bbpress-forums div.bbp-reply-content ul,#bbpress-forums div.bbp-topic-content ol,#bbpress-forums div.bbp-topic-content ul{margin:0 15px 15px;padding:0}#bbpress-forums div.bbp-reply-content ul li,#bbpress-forums div.bbp-topic-content ul li{list-style-type:disc}#bbpress-forums div.bbp-reply-content ol li,#bbpress-forums div.bbp-topic-content ol li{list-style-type:decimal}#bbpress-forums div.bbp-reply-content ol li li,#bbpress-forums div.bbp-topic-content ol li li{list-style-type:lower-alpha}#bbpress-forums div.bbp-reply-content ol li li li,#bbpress-forums div.bbp-topic-content ol li li li{list-style-type:upper-roman}#bbpress-forums div.bbp-reply-content code,#bbpress-forums div.bbp-reply-content pre,#bbpress-forums div.bbp-topic-content code,#bbpress-forums div.bbp-topic-content pre{font-family:Inconsolata,Consolas,Monaco,"Lucida Console",monospace;display:inline-block;background-color:#f9f9f9;border:1px solid #ddd;padding:0 5px;max-width:95%;vertical-align:middle;margin-top:-3px;overflow-x:auto}#bbpress-forums div.bbp-reply-content pre,#bbpress-forums div.bbp-topic-content pre{display:block;line-height:18px;margin:0 0 24px;padding:5px 10px;white-space:pre;overflow:auto}#bbpress-forums div.bbp-reply-content pre code,#bbpress-forums div.bbp-topic-content pre code{display:block;border:none;padding:0;margin:0;background-color:transparent;overflow-wrap:normal;overflow:auto;max-width:100%}#bbpress-forums div.bbp-reply-to{margin-right:130px;padding:12px 0 12px 12px;text-align:left}#bbpress-forums div#bbp-cancel-reply-to{text-align:left}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;clear:both}#bbp-topic-hot-tags{clear:both}#bbpress-forums #bbp-search-form{clear:right}#bbpress-forums #bbp-search-form .hidden{height:0;width:0;overflow:hidden;position:absolute;background:0 0;right:-999em}#bbpress-forums #bbp-search-form #bbp_search{display:inline-block;width:auto}#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:400;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-reply-header a.bbp-reply-permalink,.bbp-topic-header a.bbp-topic-permalink{float:left;margin-right:10px;color:#ccc}.bbp-row-actions #favorite-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:700;font-size:13px}.bbp-row-actions #favorite-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-row-actions #favorite-toggle span.is-favorite a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-row-actions #favorite-toggle span.is-favorite a:hover{color:#c88;border-color:#c88;background-color:#fdd}.bbp-row-actions #subscription-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:700;font-size:13px}.bbp-row-actions #subscription-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-row-actions #subscription-toggle span.is-subscribed a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-row-actions #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{font-size:11px;margin:5px 0;padding:0;word-wrap:break-word}#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;border:1px solid #eee;padding:10px 20px;margin-bottom:10px}#bbpress-forums fieldset.bbp-form legend{padding:5px;width:auto;border:none}#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-lost-pass fieldset label,#bbp-register fieldset label{width:100px}#bbpress-forums fieldset.bbp-form input,#bbpress-forums fieldset.bbp-form p,#bbpress-forums fieldset.bbp-form select,#bbpress-forums fieldset.bbp-form textarea{margin:0 0 8px}textarea#bbp_forum_content,textarea#bbp_reply_content,textarea#bbp_topic_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-reply-form,.bbp-topic-form,.bbp-topic-tag-form{clear:right}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,body.topic-edit .bbp-topic-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.reply-edit .bbp-reply-form code,body.single-forum .bbp-topic-form code,body.single-topic .bbp-reply-form code,body.topic-edit .bbp-topic-form code{font-size:10px;background-color:#f0fff8;border:1px solid #ceefe1;display:block;padding:8px;margin-top:5px;width:369px}#delete_tag,#merge_tag{display:inline}div.bbp-submit-wrapper{margin-top:15px;float:left;clear:both}p.form-allowed-tags{max-width:100%}#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 td,#bbpress-forums div.bbp-the-content-wrapper tr{border:none;padding:0;margin:0;width:auto;line-height:1}#bbpress-forums div.bbp-the-content-wrapper input[type=button]{padding:5px 7px;margin:0 0 0 -1px;line-height:1;border:1px solid transparent;background-color:transparent;box-shadow:none;text-shadow:none;border-radius:0;text-transform:uppercase;font-size:11px}#bbpress-forums div.bbp-the-content-wrapper input[type=button]:hover{border-color:rgba(0,0,0,.1);background-color:rgba(255,255,255,.5)}#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}#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;width:60%;background-color:#f9f9f9;border:1px solid #ddd}#bbpress-forums #bbp-your-profile fieldset input,#bbpress-forums #bbp-your-profile fieldset textarea{margin-bottom:0;width:60%;background-color:#f9f9f9;border:1px solid #ddd;box-shadow:none;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,.1);outline-color:rgba(240,255,240,.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 0 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 p.description{margin:5px 20% 0 0;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:none;padding:0;clear:none;float:none}#bbpress-forums #bbp-your-profile fieldset fieldset.capabilities dl{margin:0}#bbpress-forums #bbp-your-profile fieldset.submit button{float:left}#bbpress-forums #bbp-your-profile fieldset fieldset.password{width:60%;display:inline}#bbpress-forums #bbp-your-profile fieldset fieldset.password .password-button-wrapper,#bbpress-forums #bbp-your-profile fieldset fieldset.password .password-input-wrapper{width:100%;margin:0;display:inline-block}#bbpress-forums #bbp-your-profile fieldset fieldset.password .password-button-wrapper button{width:46%;margin:4% 2%;box-sizing:border-box;display:inline-block}#bbpress-forums #bbp-your-profile fieldset fieldset.password input,#bbpress-forums #bbp-your-profile fieldset fieldset.passwword textarea{width:100%}#bbpress-forums #bbp-your-profile fieldset fieldset.password button .dashicons{display:none}#bbpress-forums #bbp-your-profile fieldset fieldset.password span.description{margin-right:0;margin-bottom:20px}#bbpress-forums #password #pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:0;padding:8px;text-align:center;box-sizing:border-box;display:inline-block}#bbpress-forums #password #pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#bbpress-forums #password #pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#bbpress-forums #password #pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#bbpress-forums #password #pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#bbpress-forums #password #pass1-text.short,#bbpress-forums #password #pass1.short{border-color:#e35b5b}#bbpress-forums #password #pass1-text.bad,#bbpress-forums #password#pass1.bad{border-color:#f78b53}#bbpress-forums #password #pass1-text.good,#bbpress-forums #password #pass1.good{border-color:#ffc733}#bbpress-forums #password #pass1-text.strong,#bbpress-forums #password #pass1.strong{border-color:#83c373}#bbpress-forums .indicator-hint{padding-top:8px}#bbpress-forums #pass1-text,#bbpress-forums .pw-weak,#bbpress-forums .show-password #pass1{display:none}#bbpress-forums .show-password #pass1-text{display:inline-block}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 li,div.bbp-template-notice p{margin:.5em 0 6px!important;padding:2px;font-size:12px;line-height:1.4}.bbp-forum-content ul.sticky,.bbp-topics ul.sticky,.bbp-topics ul.super-sticky,.bbp-topics-front ul.super-sticky{background-color:#ffffe0!important;font-size:1.1em}#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log,#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log,#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log{border-top:1px dotted #ddd;width:100%;margin:0;padding:8px 0 0;font-size:11px;color:#aaa}#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log li,#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log li,#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log li{list-style-type:none}.bbp-login-form fieldset legend{display:none}.bbp-login-form .bbp-email input,.bbp-login-form .bbp-password input,.bbp-login-form .bbp-username input{padding:5px}.bbp-login-form label{width:140px;display:inline-block}#sidebar .bbp-login-form label{width:70px}.bbp-login-form .bbp-email,.bbp-login-form .bbp-password,.bbp-login-form .bbp-remember-me,.bbp-login-form .bbp-submit-wrapper,.bbp-login-form .bbp-username{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:700;font-size:1.3em;clear:none;margin-bottom:10px}#bbpress-forums img.avatar{box-shadow:none;display:inline-block}#bbpress-forums .widget_display_replies img.avatar,#bbpress-forums .widget_display_topics img.avatar,#bbpress-forums div.bbp-template-notice img.avatar,#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{float:none;vertical-align:middle;border:3px double #ddd}fieldset div.avatar{float:left}.activity-list li.bbp_reply_create .activity-content .activity-inner,.activity-list li.bbp_topic_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:1;padding-bottom:10px}#bbpress-forums #bbp-user-wrapper{float:right;width:100%}#bbpress-forums .bbp-user-section{overflow:auto;clear:left}#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 fieldset.bbp-form,#bbpress-forums #bbp-user-wrapper ul.bbp-forums,#bbpress-forums #bbp-user-wrapper ul.bbp-lead-topic,#bbpress-forums #bbp-user-wrapper ul.bbp-replies,#bbpress-forums #bbp-user-wrapper ul.bbp-topics{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:none;height:150px;padding:0;margin:0 0 20px;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:none;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}.bbp-alert-outer{height:100%;width:100%;top:0;right:0;position:fixed;background-color:rgba(0,0,0,.2);z-index:99999}.bbp-alert-inner{width:350px;text-align:center;background:#fff;position:fixed;top:50%;right:50%;margin-top:-75px;margin-right:-185px;border-radius:3px;border:1px solid #aaa;padding:15px 10px 10px}.bbp-alert-outer .bbp-alert-inner p{margin:10px 0}.bbp-alert-actions a{padding:5px 20px;text-decoration:none}@media only screen and (max-width:480px){#bbpress-forums div.bbp-topic-tags{clear:right;float:right}div.bbp-search-form button,div.bbp-search-form input{font-size:11px;padding:2px}li.bbp-forum-info,li.bbp-topic-title{width:45%}li.bbp-forum-reply-count,li.bbp-forum-topic-count,li.bbp-topic-reply-count,li.bbp-topic-voice-count{width:15%}span.bbp-reply-post-date,span.bbp-topic-post-date{float:right}span.bbp-admin-links{clear:right;float:right}#bbpress-forums .bbp-forums-list li{display:block;font-size:11px}#bbpress-forums .bbp-body div.bbp-reply-author,#bbpress-forums .bbp-body div.bbp-topic-author{margin:-15px 10px 10px;min-height:100px;padding-right:80px;position:relative;text-align:right;width:100%}#bbpress-forums div.bbp-reply-author a.bbp-author-name,#bbpress-forums div.bbp-topic-author a.bbp-author-name{clear:none;display:inline-block;margin-right:0;word-wrap:break-word}#bbpress-forums div.bbp-reply-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar{position:absolute;top:15px;right:0;width:60px;height:auto}#bbpress-forums div.bbp-reply-author .bbp-author-role,#bbpress-forums div.bbp-topic-author .bbp-author-role{font-size:12px;font-style:normal}#bbpress-forums .bbp-body div.bbp-reply-content,#bbpress-forums .bbp-body div.bbp-topic-content{clear:both;margin:10px;padding:0}#bbpress-forums div.bbp-reply-content p,#bbpress-forums div.bbp-topic-content p{margin-bottom:1em}div.bbp-submit-wrapper{float:right}#bbpress-forums fieldset.bbp-form{padding:0 10px 10px}#bbpress-forums #bbp-user-body{clear:both;margin-right:0;word-wrap:break-word}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{font-size:14px}}@media only screen and (max-width:320px){#bbpress-forums div.bbp-search-form{margin-bottom:10px}#bbpress-forums li.bbp-body li.bbp-forum-info,#bbpress-forums li.bbp-body li.bbp-topic-title,#bbpress-forums li.bbp-header li.bbp-forum-info,#bbpress-forums li.bbp-header li.bbp-topic-title{width:100%}#bbpress-forums li.bbp-header li.bbp-forum-info,#bbpress-forums li.bbp-header li.bbp-topic-title{text-align:center;text-transform:uppercase}#bbpress-forums li.bbp-body li.bbp-forum-reply-count,#bbpress-forums li.bbp-body li.bbp-forum-topic-count,#bbpress-forums li.bbp-body li.bbp-topic-reply-count,#bbpress-forums li.bbp-body li.bbp-topic-voice-count,#bbpress-forums li.bbp-header li.bbp-forum-reply-count,#bbpress-forums li.bbp-header li.bbp-forum-topic-count,#bbpress-forums li.bbp-header li.bbp-topic-reply-count,#bbpress-forums li.bbp-header li.bbp-topic-voice-count{width:20%}#bbpress-forums li.bbp-body li.bbp-forum-freshness,#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-header li.bbp-forum-freshness,#bbpress-forums li.bbp-header li.bbp-topic-freshness{width:58%}#bbpress-forums li.bbp-body li.bbp-forum-freshness,#bbpress-forums li.bbp-body li.bbp-forum-reply-count,#bbpress-forums li.bbp-body li.bbp-forum-topic-count,#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-body li.bbp-topic-reply-count,#bbpress-forums li.bbp-body li.bbp-topic-voice-count{margin-top:7px}#bbpress-forums li.bbp-footer,#bbpress-forums li.bbp-header{font-size:10px}#bbpress-forums li.bbp-header div.bbp-reply-author,#bbpress-forums li.bbp-header div.bbp-search-author,#bbpress-forums li.bbp-header div.bbp-topic-author{text-align:right;width:25%}#bbpress-forums li.bbp-header div.bbp-reply-content,#bbpress-forums li.bbp-header div.bbp-search-content,#bbpress-forums li.bbp-header div.bbp-topic-content{margin-right:25%}#bbpress-forums div.bbp-template-notice img.avatar,#bbpress-forums p.bbp-topic-meta img.avatar{width:14px;height:auto}#bbpress-forums div.bbp-the-content-wrapper td.mceToolbar{padding:1px}#bbpress-forums div.bbp-the-content-wrapper td.mceToolbar td{width:20px;height:20px}#bbpress-forums div.wp-editor-container{width:100%;overflow:auto}#bbpress-forums input#bbp_topic_tags,#bbpress-forums input#bbp_topic_title{width:95%}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{font-size:14px}}@media only screen and (max-width:240px){#bbpress-forums li.bbp-body li.bbp-forum-reply-count,#bbpress-forums li.bbp-body li.bbp-forum-topic-count,#bbpress-forums li.bbp-body li.bbp-topic-reply-count,#bbpress-forums li.bbp-body li.bbp-topic-voice-count,#bbpress-forums li.bbp-footer div.bbp-reply-author,#bbpress-forums li.bbp-footer div.bbp-search-author,#bbpress-forums li.bbp-footer div.bbp-topic-author,#bbpress-forums li.bbp-header li.bbp-forum-reply-count,#bbpress-forums li.bbp-header li.bbp-forum-topic-count,#bbpress-forums li.bbp-header li.bbp-topic-reply-count,#bbpress-forums li.bbp-header li.bbp-topic-voice-count{width:45%}#bbpress-forums li.bbp-body li.bbp-forum-freshness,#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-header li.bbp-forum-freshness,#bbpress-forums li.bbp-header li.bbp-topic-freshness{clear:both;width:100%}#bbpress-forums li.bbp-header li.bbp-forum-freshness,#bbpress-forums li.bbp-header li.bbp-topic-freshness{text-align:center}#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-header div.bbp-reply-author,#bbpress-forums li.bbp-header div.bbp-reply-content,#bbpress-forums li.bbp-header div.bbp-search-author,#bbpress-forums li.bbp-header div.bbp-search-content,#bbpress-forums li.bbp-header div.bbp-topic-author,#bbpress-forums li.bbp-header div.bbp-topic-content{margin-right:0;text-align:right}#bbpress-forums li.bbp-body li.bbp-topic-freshness p.bbp-topic-meta{display:inline-block}#bbpress-forums li.bbp-header{overflow:hidden}#bbpress-forums li.bbp-footer div.bbp-reply-content,#bbpress-forums li.bbp-footer div.bbp-search-content,#bbpress-forums li.bbp-footer div.bbp-topic-content{display:inline-block;margin-right:0}#bbpress-forums li.bbp-body div.bbp-reply-author,#bbpress-forums li.bbp-body div.bbp-topic-author{min-height:60px;padding-right:60px}#bbpress-forums div.bbp-reply-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar{width:40px;height:auto}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{font-size:12px}}
1
+ .hidden,.js .hide-if-js{display:none}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0;word-wrap:normal!important}#bbpress-forums{background:0 0;clear:both;margin-bottom:20px;overflow:hidden;font-size:12px;line-height:18px}#bbpress-forums a,#bbpress-forums a:hover{box-shadow:none;border:none;transition:none}#bbpress-forums hr{margin:0 0 24px}#bbpress-forums div.even,#bbpress-forums ul.even{background-color:#fff}#bbpress-forums div.odd,#bbpress-forums ul.odd{background-color:#fbfbfb}body.reply-edit .reply{float:none}#bbpress-forums div.reply{height:auto;width:100%}#bbpress-forums div.bbp-forum-header,#bbpress-forums div.bbp-reply-header,#bbpress-forums div.bbp-topic-header{background-color:#f4f4f4}#bbpress-forums .status-spam.even,#bbpress-forums .status-trash.even{background-color:#fee}#bbpress-forums .status-spam.odd,#bbpress-forums .status-trash.odd{background-color:#fdd}#bbpress-forums .status-pending.even,#bbpress-forums .status-pending.odd,#bbpress-forums ul.status-pending a{background-color:#fef7f1}#bbpress-forums ul.status-closed,#bbpress-forums ul.status-closed a{color:#ccc}#bbpress-forums ul{background:0 0;list-style:none;margin:0;padding:0}#bbpress-forums ul.bbp-threaded-replies{margin-right:50px}#bbpress-forums li{background:0 0;margin:0;list-style:none}#bbpress-forums ul.bbp-forums,#bbpress-forums ul.bbp-lead-topic,#bbpress-forums ul.bbp-replies,#bbpress-forums ul.bbp-search-results,#bbpress-forums ul.bbp-topics{font-size:12px;overflow:hidden;border:1px solid #eee;margin-bottom:20px;clear:both}#bbpress-forums li.bbp-body,#bbpress-forums li.bbp-footer,#bbpress-forums li.bbp-header{clear:both}#bbpress-forums li.bbp-footer,#bbpress-forums li.bbp-header{background:#f3f3f3;border-top:1px solid #eee;font-weight:700;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:1}li.bbp-forum-info,li.bbp-topic-title{float:right;text-align:right;width:55%}li.bbp-forum-reply-count,li.bbp-forum-topic-count,li.bbp-topic-reply-count,li.bbp-topic-voice-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}#bbpress-forums #favorite-toggle,#bbpress-forums #subscription-toggle{float:left}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{background:0 0;border:none;font-size:16px;line-height:1;margin:8px 0;padding:0;text-transform:none}#bbpress-forums div.bbp-forum-author,#bbpress-forums div.bbp-reply-author,#bbpress-forums div.bbp-topic-author{float:right;text-align:center;width:115px}#bbpress-forums div.bbp-forum-author img.avatar,#bbpress-forums div.bbp-reply-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar{border:none;max-width:80px;padding:0;margin:12px auto 0;float:none}#bbpress-forums div.bbp-forum-author .bbp-author-name,#bbpress-forums div.bbp-reply-author .bbp-author-name,#bbpress-forums div.bbp-topic-author .bbp-author-name{margin:0 12px;word-wrap:break-word;display:inline-block}#bbpress-forums div.bbp-reply-author .bbp-author-name,#bbpress-forums div.bbp-topic-author .bbp-author-name{clear:right;display:block}#bbpress-forums div.bbp-forum-author .bbp-author-role,#bbpress-forums div.bbp-reply-author .bbp-author-role,#bbpress-forums div.bbp-topic-author .bbp-author-role{font-size:11px;font-style:italic}#bbpress-forums li.bbp-footer .bbp-forum-author,#bbpress-forums li.bbp-footer .bbp-reply-author,#bbpress-forums li.bbp-footer .bbp-search-author,#bbpress-forums li.bbp-footer .bbp-topic-author,#bbpress-forums li.bbp-header .bbp-forum-author,#bbpress-forums li.bbp-header .bbp-reply-author,#bbpress-forums li.bbp-header .bbp-search-author,#bbpress-forums li.bbp-header .bbp-topic-author{float:right;margin:0;padding:0;width:120px}#bbpress-forums li.bbp-footer .bbp-forum-content,#bbpress-forums li.bbp-footer .bbp-reply-content,#bbpress-forums li.bbp-footer .bbp-search-content,#bbpress-forums li.bbp-footer .bbp-topic-content,#bbpress-forums li.bbp-header .bbp-forum-content,#bbpress-forums li.bbp-header .bbp-reply-content,#bbpress-forums li.bbp-header .bbp-search-content,#bbpress-forums li.bbp-header .bbp-topic-content{margin-right:140px;padding:0;text-align:right}div.bbp-forum-header,div.bbp-reply-header,div.bbp-topic-header,li.bbp-body div.hentry{margin:0;overflow:hidden;padding:8px}div.bbp-forum-header,div.bbp-reply-header,div.bbp-topic-header{border-top:1px solid #ddd;clear:both}span.bbp-author-ip{font-size:11px;font-weight:700;word-wrap:break-word;color:#aaa}#bbpress-forums div.bbp-forum-content,#bbpress-forums div.bbp-reply-content,#bbpress-forums div.bbp-topic-content{margin-right:130px;padding:12px 0 12px 12px;text-align:right}#bbpress-forums div.bbp-forum-content:after,#bbpress-forums div.bbp-reply-content:after,#bbpress-forums div.bbp-topic-content:after{clear:both;content:".";display:block;float:none;height:0;font-size:0;visibility:hidden}#bbpress-forums div.bbp-reply-content a,#bbpress-forums div.bbp-topic-content a{background:0 0;border:none;display:inline;font-weight:400;margin:0;padding:0}#bbpress-forums div.bbp-reply-content a.bbp-user-mention,#bbpress-forums div.bbp-topic-content a.bbp-user-mention{background:0 0;border:none;text-decoration:none;text-shadow:none;display:inline;font-weight:600;margin:0;padding:0}#bbpress-forums div.bbp-reply-content h1,#bbpress-forums div.bbp-reply-content h2,#bbpress-forums div.bbp-reply-content h3,#bbpress-forums div.bbp-reply-content h4,#bbpress-forums div.bbp-reply-content h5,#bbpress-forums div.bbp-reply-content h6,#bbpress-forums div.bbp-topic-content h1,#bbpress-forums div.bbp-topic-content h2,#bbpress-forums div.bbp-topic-content h3,#bbpress-forums div.bbp-topic-content h4,#bbpress-forums div.bbp-topic-content h5,#bbpress-forums div.bbp-topic-content h6{clear:none;line-height:1;margin:24px 0;padding:0}#bbpress-forums div.bbp-reply-content img,#bbpress-forums div.bbp-topic-content img{max-width:100%;height:auto}#bbpress-forums div.bbp-reply-content ol,#bbpress-forums div.bbp-reply-content ul,#bbpress-forums div.bbp-topic-content ol,#bbpress-forums div.bbp-topic-content ul{margin:0 15px 15px;padding:0}#bbpress-forums div.bbp-reply-content ul li,#bbpress-forums div.bbp-topic-content ul li{list-style-type:disc}#bbpress-forums div.bbp-reply-content ol li,#bbpress-forums div.bbp-topic-content ol li{list-style-type:decimal}#bbpress-forums div.bbp-reply-content ol li li,#bbpress-forums div.bbp-topic-content ol li li{list-style-type:lower-alpha}#bbpress-forums div.bbp-reply-content ol li li li,#bbpress-forums div.bbp-topic-content ol li li li{list-style-type:upper-roman}#bbpress-forums div.bbp-reply-content code,#bbpress-forums div.bbp-reply-content pre,#bbpress-forums div.bbp-topic-content code,#bbpress-forums div.bbp-topic-content pre{font-family:Inconsolata,Consolas,Monaco,"Lucida Console",monospace;display:inline-block;background-color:#f9f9f9;border:1px solid #ddd;padding:0 5px;max-width:95%;vertical-align:middle;margin-top:-3px;overflow-x:auto}#bbpress-forums div.bbp-reply-content pre,#bbpress-forums div.bbp-topic-content pre{display:block;line-height:18px;margin:0 0 24px;padding:5px 10px;white-space:pre;overflow:auto}#bbpress-forums div.bbp-reply-content pre code,#bbpress-forums div.bbp-topic-content pre code{display:block;border:none;padding:0;margin:0;background-color:transparent;overflow-wrap:normal;overflow:auto;max-width:100%}#bbpress-forums div.bbp-reply-to{margin-right:130px;padding:12px 0 12px 12px;text-align:left}#bbpress-forums div#bbp-cancel-reply-to{text-align:left}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;clear:both}#bbp-topic-hot-tags{clear:both}#bbpress-forums #bbp-search-form{clear:right}#bbpress-forums #bbp-search-form .hidden{height:0;width:0;overflow:hidden;position:absolute;background:0 0;right:-999em}#bbpress-forums #bbp-search-form #bbp_search{display:inline-block;width:auto}#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:400;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-reply-header a.bbp-reply-permalink,.bbp-topic-header a.bbp-topic-permalink{float:left;margin-right:10px;color:#ccc}.bbp-row-actions #favorite-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:700;font-size:12px}.bbp-row-actions #favorite-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-row-actions #favorite-toggle span.is-favorite a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-row-actions #favorite-toggle span.is-favorite a:hover{color:#c88;border-color:#c88;background-color:#fdd}.bbp-row-actions #subscription-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:700;font-size:12px}.bbp-row-actions #subscription-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-row-actions #subscription-toggle span.is-subscribed a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-row-actions #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{font-size:11px;margin:5px 0;padding:0;word-wrap:break-word}#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{float:right;width:100%;margin-bottom:15px}#bbpress-forums .bbp-pagination-links a,#bbpress-forums .bbp-pagination-links span.current{display:block;float:right;font-size:12px;line-height:18px;padding:0 5px;margin-right:5px;border:1px solid #efefef;border-radius:0;background:0 0;color:inherit;text-decoration:none}#bbpress-forums .bbp-pagination-links span.dots{display:block;float:right;padding:1px 4px;margin-right:5px}#bbpress-forums .bbp-topic-pagination{display:inline-block;margin-right:5px;margin-bottom:2px}#bbpress-forums .bbp-topic-pagination a{font-size:10px;line-height:10px;padding:1px 3px;border:1px solid #ddd;color:inherit;text-decoration:none}#bbpress-forums .bbp-pagination-links a:hover,#bbpress-forums .bbp-pagination-links span.current,#bbpress-forums .bbp-topic-pagination a:hover{background:#eee;opacity:.8;border:1px solid #ddd}#bbpress-forums fieldset.bbp-form{clear:right;border:1px solid #eee;padding:10px 20px;margin-bottom:10px}#bbpress-forums fieldset.bbp-form legend{padding:5px;width:auto;border:none}#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-lost-pass fieldset label,#bbp-register fieldset label{width:100px}#bbpress-forums fieldset.bbp-form input,#bbpress-forums fieldset.bbp-form p,#bbpress-forums fieldset.bbp-form select,#bbpress-forums fieldset.bbp-form textarea{margin:0 0 8px}textarea#bbp_forum_content,textarea#bbp_reply_content,textarea#bbp_topic_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-reply-form,.bbp-topic-form,.bbp-topic-tag-form{clear:right}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,body.topic-edit .bbp-topic-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.reply-edit .bbp-reply-form code,body.single-forum .bbp-topic-form code,body.single-topic .bbp-reply-form code,body.topic-edit .bbp-topic-form code{font-size:10px;background-color:#f0fff8;border:1px solid #ceefe1;display:block;padding:8px;margin-top:5px;width:369px}#delete_tag,#merge_tag{display:inline}div.bbp-submit-wrapper{margin-top:15px;float:left;clear:both}p.form-allowed-tags{max-width:100%}#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 td,#bbpress-forums div.bbp-the-content-wrapper tr{border:none;padding:0;margin:0;width:auto;line-height:1}#bbpress-forums div.bbp-the-content-wrapper input[type=button]{padding:5px 7px;margin:0 0 0 -1px;line-height:1;border:1px solid transparent;background-color:transparent;box-shadow:none;text-shadow:none;border-radius:0;text-transform:uppercase;font-size:11px}#bbpress-forums div.bbp-the-content-wrapper input[type=button]:hover{border-color:rgba(0,0,0,.1);background-color:rgba(255,255,255,.5)}#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}#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;width:60%;background-color:#f9f9f9;border:1px solid #ddd}#bbpress-forums #bbp-your-profile fieldset input,#bbpress-forums #bbp-your-profile fieldset textarea{margin-bottom:0;width:60%;background-color:#f9f9f9;border:1px solid #ddd;box-shadow:none;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,.1);outline-color:rgba(240,255,240,.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 0 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 p.description{margin:5px 20% 0 0;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:none;padding:0;clear:none;float:none}#bbpress-forums #bbp-your-profile fieldset fieldset.capabilities dl{margin:0}#bbpress-forums #bbp-your-profile fieldset.submit button{float:left}#bbpress-forums #bbp-your-profile fieldset fieldset.password{width:60%;display:inline}#bbpress-forums #bbp-your-profile fieldset fieldset.password .password-button-wrapper,#bbpress-forums #bbp-your-profile fieldset fieldset.password .password-input-wrapper{width:100%;margin:0;display:inline-block}#bbpress-forums #bbp-your-profile fieldset fieldset.password .password-button-wrapper button{width:46%;margin:4% 2%;box-sizing:border-box;display:inline-block}#bbpress-forums #bbp-your-profile fieldset fieldset.password input,#bbpress-forums #bbp-your-profile fieldset fieldset.passwword textarea{width:100%}#bbpress-forums #bbp-your-profile fieldset fieldset.password button .dashicons{display:none}#bbpress-forums #bbp-your-profile fieldset fieldset.password span.description{margin-right:0;margin-bottom:20px}#bbpress-forums #password #pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:0;padding:8px;text-align:center;box-sizing:border-box;display:inline-block}#bbpress-forums #password #pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#bbpress-forums #password #pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#bbpress-forums #password #pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#bbpress-forums #password #pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#bbpress-forums #password #pass1-text.short,#bbpress-forums #password #pass1.short{border-color:#e35b5b}#bbpress-forums #password #pass1-text.bad,#bbpress-forums #password#pass1.bad{border-color:#f78b53}#bbpress-forums #password #pass1-text.good,#bbpress-forums #password #pass1.good{border-color:#ffc733}#bbpress-forums #password #pass1-text.strong,#bbpress-forums #password #pass1.strong{border-color:#83c373}#bbpress-forums .indicator-hint{padding-top:8px}#bbpress-forums #pass1-text,#bbpress-forums .pw-weak,#bbpress-forums .show-password #pass1{display:none}#bbpress-forums .show-password #pass1-text{display:inline-block}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 li,div.bbp-template-notice p{margin:.5em 0 6px!important;padding:2px;font-size:12px;line-height:1.4}.bbp-forum-content ul.sticky,.bbp-topics ul.sticky,.bbp-topics ul.super-sticky,.bbp-topics-front ul.super-sticky{background-color:#ffffe0!important;font-size:1.1em}#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log,#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log,#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log{border-top:1px dotted #ddd;width:100%;margin:0;padding:8px 0 0;font-size:11px;color:#aaa}#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log li,#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log li,#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log li{list-style-type:none}.bbp-login-form fieldset legend{display:none}.bbp-login-form .bbp-email input,.bbp-login-form .bbp-password input,.bbp-login-form .bbp-username input{padding:5px}.bbp-login-form label{width:140px;display:inline-block}#sidebar .bbp-login-form label{width:70px}.bbp-login-form .bbp-email,.bbp-login-form .bbp-password,.bbp-login-form .bbp-remember-me,.bbp-login-form .bbp-submit-wrapper,.bbp-login-form .bbp-username{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:700;font-size:1.3em;clear:none;margin-bottom:10px}#bbpress-forums img.avatar{box-shadow:none;display:inline-block}#bbpress-forums .widget_display_replies img.avatar,#bbpress-forums .widget_display_topics img.avatar,#bbpress-forums div.bbp-template-notice img.avatar,#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{float:none;vertical-align:middle;border:3px double #ddd}fieldset div.avatar{float:left}.activity-list li.bbp_reply_create .activity-content .activity-inner,.activity-list li.bbp_topic_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:1;padding-bottom:10px}#bbpress-forums #bbp-user-wrapper{float:right;width:100%}#bbpress-forums .bbp-user-section{overflow:auto;clear:left}#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 fieldset.bbp-form,#bbpress-forums #bbp-user-wrapper ul.bbp-forums,#bbpress-forums #bbp-user-wrapper ul.bbp-lead-topic,#bbpress-forums #bbp-user-wrapper ul.bbp-replies,#bbpress-forums #bbp-user-wrapper ul.bbp-topics{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:none;height:150px;padding:0;margin:0 0 20px;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:none;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}.bbp-alert-outer{height:100%;width:100%;top:0;right:0;position:fixed;background-color:rgba(0,0,0,.2);z-index:99999}.bbp-alert-inner{width:350px;text-align:center;background:#fff;position:fixed;top:50%;right:50%;margin-top:-75px;margin-right:-185px;border-radius:3px;border:1px solid #aaa;padding:15px 10px 10px}.bbp-alert-outer .bbp-alert-inner p{margin:10px 0}.bbp-alert-actions a{padding:5px 20px;text-decoration:none}@media only screen and (max-width:480px){#bbpress-forums div.bbp-topic-tags{clear:right;float:right}div.bbp-search-form button,div.bbp-search-form input{font-size:11px;padding:2px}li.bbp-forum-info,li.bbp-topic-title{width:45%}li.bbp-forum-reply-count,li.bbp-forum-topic-count,li.bbp-topic-reply-count,li.bbp-topic-voice-count{width:15%}span.bbp-reply-post-date,span.bbp-topic-post-date{float:right}span.bbp-admin-links{clear:right;float:right}#bbpress-forums .bbp-forums-list li{display:block;font-size:11px}#bbpress-forums .bbp-body div.bbp-reply-author,#bbpress-forums .bbp-body div.bbp-topic-author{margin:-15px 10px 10px;min-height:100px;padding-right:80px;position:relative;text-align:right;width:100%}#bbpress-forums div.bbp-reply-author .bbp-author-name,#bbpress-forums div.bbp-topic-author .bbp-author-name{clear:none;display:inline-block;margin-right:0;word-wrap:break-word}#bbpress-forums div.bbp-reply-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar{position:absolute;top:15px;right:0;width:60px;height:auto}#bbpress-forums div.bbp-reply-author .bbp-author-role,#bbpress-forums div.bbp-topic-author .bbp-author-role{font-size:12px;font-style:normal}#bbpress-forums .bbp-body div.bbp-reply-content,#bbpress-forums .bbp-body div.bbp-topic-content{clear:both;margin:10px;padding:0}#bbpress-forums div.bbp-reply-content p,#bbpress-forums div.bbp-topic-content p{margin-bottom:1em}div.bbp-submit-wrapper{float:right}#bbpress-forums fieldset.bbp-form{padding:0 10px 10px}#bbpress-forums #bbp-user-body{clear:both;margin-right:0;word-wrap:break-word}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{font-size:14px}}@media only screen and (max-width:320px){#bbpress-forums div.bbp-search-form{margin-bottom:10px}#bbpress-forums li.bbp-body li.bbp-forum-info,#bbpress-forums li.bbp-body li.bbp-topic-title,#bbpress-forums li.bbp-header li.bbp-forum-info,#bbpress-forums li.bbp-header li.bbp-topic-title{width:100%}#bbpress-forums li.bbp-header li.bbp-forum-info,#bbpress-forums li.bbp-header li.bbp-topic-title{text-align:center;text-transform:uppercase}#bbpress-forums li.bbp-body li.bbp-forum-reply-count,#bbpress-forums li.bbp-body li.bbp-forum-topic-count,#bbpress-forums li.bbp-body li.bbp-topic-reply-count,#bbpress-forums li.bbp-body li.bbp-topic-voice-count,#bbpress-forums li.bbp-header li.bbp-forum-reply-count,#bbpress-forums li.bbp-header li.bbp-forum-topic-count,#bbpress-forums li.bbp-header li.bbp-topic-reply-count,#bbpress-forums li.bbp-header li.bbp-topic-voice-count{width:20%}#bbpress-forums li.bbp-body li.bbp-forum-freshness,#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-header li.bbp-forum-freshness,#bbpress-forums li.bbp-header li.bbp-topic-freshness{width:58%}#bbpress-forums li.bbp-body li.bbp-forum-freshness,#bbpress-forums li.bbp-body li.bbp-forum-reply-count,#bbpress-forums li.bbp-body li.bbp-forum-topic-count,#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-body li.bbp-topic-reply-count,#bbpress-forums li.bbp-body li.bbp-topic-voice-count{margin-top:7px}#bbpress-forums li.bbp-footer,#bbpress-forums li.bbp-header{font-size:10px}#bbpress-forums li.bbp-header div.bbp-reply-author,#bbpress-forums li.bbp-header div.bbp-search-author,#bbpress-forums li.bbp-header div.bbp-topic-author{text-align:right;width:25%}#bbpress-forums li.bbp-header div.bbp-reply-content,#bbpress-forums li.bbp-header div.bbp-search-content,#bbpress-forums li.bbp-header div.bbp-topic-content{margin-right:25%}#bbpress-forums div.bbp-template-notice img.avatar,#bbpress-forums p.bbp-topic-meta img.avatar{width:14px;height:auto}#bbpress-forums div.bbp-the-content-wrapper td.mceToolbar{padding:1px}#bbpress-forums div.bbp-the-content-wrapper td.mceToolbar td{width:20px;height:20px}#bbpress-forums div.wp-editor-container{width:100%;overflow:auto}#bbpress-forums input#bbp_topic_tags,#bbpress-forums input#bbp_topic_title{width:95%}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{font-size:14px}}@media only screen and (max-width:240px){#bbpress-forums li.bbp-body li.bbp-forum-reply-count,#bbpress-forums li.bbp-body li.bbp-forum-topic-count,#bbpress-forums li.bbp-body li.bbp-topic-reply-count,#bbpress-forums li.bbp-body li.bbp-topic-voice-count,#bbpress-forums li.bbp-footer div.bbp-reply-author,#bbpress-forums li.bbp-footer div.bbp-search-author,#bbpress-forums li.bbp-footer div.bbp-topic-author,#bbpress-forums li.bbp-header li.bbp-forum-reply-count,#bbpress-forums li.bbp-header li.bbp-forum-topic-count,#bbpress-forums li.bbp-header li.bbp-topic-reply-count,#bbpress-forums li.bbp-header li.bbp-topic-voice-count{width:45%}#bbpress-forums li.bbp-body li.bbp-forum-freshness,#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-header li.bbp-forum-freshness,#bbpress-forums li.bbp-header li.bbp-topic-freshness{clear:both;width:100%}#bbpress-forums li.bbp-header li.bbp-forum-freshness,#bbpress-forums li.bbp-header li.bbp-topic-freshness{text-align:center}#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-header div.bbp-reply-author,#bbpress-forums li.bbp-header div.bbp-reply-content,#bbpress-forums li.bbp-header div.bbp-search-author,#bbpress-forums li.bbp-header div.bbp-search-content,#bbpress-forums li.bbp-header div.bbp-topic-author,#bbpress-forums li.bbp-header div.bbp-topic-content{margin-right:0;text-align:right}#bbpress-forums li.bbp-body li.bbp-topic-freshness p.bbp-topic-meta{display:inline-block}#bbpress-forums li.bbp-header{overflow:hidden}#bbpress-forums li.bbp-footer div.bbp-reply-content,#bbpress-forums li.bbp-footer div.bbp-search-content,#bbpress-forums li.bbp-footer div.bbp-topic-content{display:inline-block;margin-right:0}#bbpress-forums li.bbp-body div.bbp-reply-author,#bbpress-forums li.bbp-body div.bbp-topic-author{min-height:60px;padding-right:60px}#bbpress-forums div.bbp-reply-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar{width:40px;height:auto}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{font-size:12px}}
templates/default/css/bbpress.css CHANGED
@@ -23,7 +23,9 @@
23
  height: 1px;
24
  width: 1px;
25
  overflow: hidden;
26
- clip: rect(0 0 0 0);
 
 
27
  border: 0;
28
  word-wrap: normal !important; /* many screen reader and browser combinations announce broken words as they would appear visually */
29
  }
@@ -34,12 +36,14 @@
34
  margin-bottom: 20px;
35
  overflow: hidden;
36
  font-size: 12px;
 
37
  }
38
 
39
  #bbpress-forums a,
40
  #bbpress-forums a:hover {
41
  box-shadow: none;
42
  border: none;
 
43
  }
44
 
45
  #bbpress-forums hr {
@@ -225,16 +229,16 @@ li.bbp-topic-freshness {
225
  float: none;
226
  }
227
 
228
- #bbpress-forums div.bbp-forum-author a.bbp-author-name,
229
- #bbpress-forums div.bbp-topic-author a.bbp-author-name,
230
- #bbpress-forums div.bbp-reply-author a.bbp-author-name {
231
  margin: 0 12px;
232
  word-wrap: break-word;
233
  display: inline-block;
234
  }
235
 
236
- #bbpress-forums div.bbp-topic-author a.bbp-author-name,
237
- #bbpress-forums div.bbp-reply-author a.bbp-author-name {
238
  clear: left;
239
  display: block;
240
  }
@@ -542,7 +546,7 @@ td.bbp-topic-counts {
542
  border: 1px solid #aca;
543
  background-color: #dfd;
544
  font-weight: 700;
545
- font-size: 13px;
546
  }
547
 
548
  .bbp-row-actions #favorite-toggle a:hover {
@@ -570,7 +574,7 @@ td.bbp-topic-counts {
570
  border: 1px solid #aca;
571
  background-color: #dfd;
572
  font-weight: 700;
573
- font-size: 13px;
574
  }
575
 
576
  .bbp-row-actions #subscription-toggle a:hover {
@@ -617,50 +621,56 @@ td.bbp-topic-counts {
617
  display: inline;
618
  }
619
 
620
- .bbp-pagination-links a,
621
- .bbp-pagination-links span.current {
 
 
 
 
 
 
622
  display: block;
623
  float: left;
 
 
624
  padding: 0 5px;
625
  margin-left: 5px;
626
  border: 1px solid #efefef;
 
 
 
627
  text-decoration: none;
628
  }
629
 
630
- .bbp-pagination-links a:hover,
631
- .bbp-pagination-links span.current {
632
- background: #eee;
633
- opacity: 0.8;
634
- border: 1px solid #ddd;
635
- }
636
-
637
- .bbp-pagination-links span.dots {
638
  display: block;
639
  float: left;
640
  padding: 1px 4px;
641
  margin-left: 5px;
642
  }
643
 
644
- .bbp-pagination {
645
- float: left;
646
- width: 100%;
647
- margin-bottom: 15px;
648
- }
649
-
650
- .bbp-topic-pagination {
651
  display: inline-block;
652
  margin-left: 5px;
653
  margin-bottom: 2px;
654
  }
655
 
656
- .bbp-topic-pagination a {
657
  font-size: 10px;
658
  line-height: 10px;
659
  padding: 1px 3px;
660
  border: 1px solid #ddd;
 
661
  text-decoration: none;
662
  }
663
 
 
 
 
 
 
 
 
664
 
665
  /* =Forms
666
  -------------------------------------------------------------- */
@@ -1411,8 +1421,8 @@ body.my-account #bbpress-forums {
1411
  width: 100%;
1412
  }
1413
 
1414
- #bbpress-forums div.bbp-topic-author a.bbp-author-name,
1415
- #bbpress-forums div.bbp-reply-author a.bbp-author-name {
1416
  clear: none;
1417
  display: inline-block;
1418
  margin-left: 0;
23
  height: 1px;
24
  width: 1px;
25
  overflow: hidden;
26
+ clip: rect(1px, 1px, 1px, 1px);
27
+ -webkit-clip-path: inset(50%);
28
+ clip-path: inset(50%);
29
  border: 0;
30
  word-wrap: normal !important; /* many screen reader and browser combinations announce broken words as they would appear visually */
31
  }
36
  margin-bottom: 20px;
37
  overflow: hidden;
38
  font-size: 12px;
39
+ line-height: 18px;
40
  }
41
 
42
  #bbpress-forums a,
43
  #bbpress-forums a:hover {
44
  box-shadow: none;
45
  border: none;
46
+ transition: none;
47
  }
48
 
49
  #bbpress-forums hr {
229
  float: none;
230
  }
231
 
232
+ #bbpress-forums div.bbp-forum-author .bbp-author-name,
233
+ #bbpress-forums div.bbp-topic-author .bbp-author-name,
234
+ #bbpress-forums div.bbp-reply-author .bbp-author-name {
235
  margin: 0 12px;
236
  word-wrap: break-word;
237
  display: inline-block;
238
  }
239
 
240
+ #bbpress-forums div.bbp-topic-author .bbp-author-name,
241
+ #bbpress-forums div.bbp-reply-author .bbp-author-name {
242
  clear: left;
243
  display: block;
244
  }
546
  border: 1px solid #aca;
547
  background-color: #dfd;
548
  font-weight: 700;
549
+ font-size: 12px;
550
  }
551
 
552
  .bbp-row-actions #favorite-toggle a:hover {
574
  border: 1px solid #aca;
575
  background-color: #dfd;
576
  font-weight: 700;
577
+ font-size: 12px;
578
  }
579
 
580
  .bbp-row-actions #subscription-toggle a:hover {
621
  display: inline;
622
  }
623
 
624
+ .bbp-pagination {
625
+ float: left;
626
+ width: 100%;
627
+ margin-bottom: 15px;
628
+ }
629
+
630
+ #bbpress-forums .bbp-pagination-links a,
631
+ #bbpress-forums .bbp-pagination-links span.current {
632
  display: block;
633
  float: left;
634
+ font-size: 12px;
635
+ line-height: 18px;
636
  padding: 0 5px;
637
  margin-left: 5px;
638
  border: 1px solid #efefef;
639
+ border-radius: 0;
640
+ background: transparent;
641
+ color: inherit;
642
  text-decoration: none;
643
  }
644
 
645
+ #bbpress-forums .bbp-pagination-links span.dots {
 
 
 
 
 
 
 
646
  display: block;
647
  float: left;
648
  padding: 1px 4px;
649
  margin-left: 5px;
650
  }
651
 
652
+ #bbpress-forums .bbp-topic-pagination {
 
 
 
 
 
 
653
  display: inline-block;
654
  margin-left: 5px;
655
  margin-bottom: 2px;
656
  }
657
 
658
+ #bbpress-forums .bbp-topic-pagination a {
659
  font-size: 10px;
660
  line-height: 10px;
661
  padding: 1px 3px;
662
  border: 1px solid #ddd;
663
+ color: inherit;
664
  text-decoration: none;
665
  }
666
 
667
+ #bbpress-forums .bbp-topic-pagination a:hover,
668
+ #bbpress-forums .bbp-pagination-links a:hover,
669
+ #bbpress-forums .bbp-pagination-links span.current {
670
+ background: #eee;
671
+ opacity: 0.8;
672
+ border: 1px solid #ddd;
673
+ }
674
 
675
  /* =Forms
676
  -------------------------------------------------------------- */
1421
  width: 100%;
1422
  }
1423
 
1424
+ #bbpress-forums div.bbp-topic-author .bbp-author-name,
1425
+ #bbpress-forums div.bbp-reply-author .bbp-author-name {
1426
  clear: none;
1427
  display: inline-block;
1428
  margin-left: 0;
templates/default/css/bbpress.min.css CHANGED
@@ -1 +1 @@
1
- .hidden,.js .hide-if-js{display:none}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0;word-wrap:normal!important}#bbpress-forums{background:0 0;clear:both;margin-bottom:20px;overflow:hidden;font-size:12px}#bbpress-forums a,#bbpress-forums a:hover{box-shadow:none;border:none}#bbpress-forums hr{margin:0 0 24px}#bbpress-forums div.even,#bbpress-forums ul.even{background-color:#fff}#bbpress-forums div.odd,#bbpress-forums ul.odd{background-color:#fbfbfb}body.reply-edit .reply{float:none}#bbpress-forums div.reply{height:auto;width:100%}#bbpress-forums div.bbp-forum-header,#bbpress-forums div.bbp-reply-header,#bbpress-forums div.bbp-topic-header{background-color:#f4f4f4}#bbpress-forums .status-spam.even,#bbpress-forums .status-trash.even{background-color:#fee}#bbpress-forums .status-spam.odd,#bbpress-forums .status-trash.odd{background-color:#fdd}#bbpress-forums .status-pending.even,#bbpress-forums .status-pending.odd,#bbpress-forums ul.status-pending a{background-color:#fef7f1}#bbpress-forums ul.status-closed,#bbpress-forums ul.status-closed a{color:#ccc}#bbpress-forums ul{background:0 0;list-style:none;margin:0;padding:0}#bbpress-forums ul.bbp-threaded-replies{margin-left:50px}#bbpress-forums li{background:0 0;margin:0;list-style:none}#bbpress-forums ul.bbp-forums,#bbpress-forums ul.bbp-lead-topic,#bbpress-forums ul.bbp-replies,#bbpress-forums ul.bbp-search-results,#bbpress-forums ul.bbp-topics{font-size:12px;overflow:hidden;border:1px solid #eee;margin-bottom:20px;clear:both}#bbpress-forums li.bbp-body,#bbpress-forums li.bbp-footer,#bbpress-forums li.bbp-header{clear:both}#bbpress-forums li.bbp-footer,#bbpress-forums li.bbp-header{background:#f3f3f3;border-top:1px solid #eee;font-weight:700;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:1}li.bbp-forum-info,li.bbp-topic-title{float:left;text-align:left;width:55%}li.bbp-forum-reply-count,li.bbp-forum-topic-count,li.bbp-topic-reply-count,li.bbp-topic-voice-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}#bbpress-forums #favorite-toggle,#bbpress-forums #subscription-toggle{float:right}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{background:0 0;border:none;font-size:16px;line-height:1;margin:8px 0;padding:0;text-transform:none}#bbpress-forums div.bbp-forum-author,#bbpress-forums div.bbp-reply-author,#bbpress-forums div.bbp-topic-author{float:left;text-align:center;width:115px}#bbpress-forums div.bbp-forum-author img.avatar,#bbpress-forums div.bbp-reply-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar{border:none;max-width:80px;padding:0;margin:12px auto 0;float:none}#bbpress-forums div.bbp-forum-author a.bbp-author-name,#bbpress-forums div.bbp-reply-author a.bbp-author-name,#bbpress-forums div.bbp-topic-author a.bbp-author-name{margin:0 12px;word-wrap:break-word;display:inline-block}#bbpress-forums div.bbp-reply-author a.bbp-author-name,#bbpress-forums div.bbp-topic-author a.bbp-author-name{clear:left;display:block}#bbpress-forums div.bbp-forum-author .bbp-author-role,#bbpress-forums div.bbp-reply-author .bbp-author-role,#bbpress-forums div.bbp-topic-author .bbp-author-role{font-size:11px;font-style:italic}#bbpress-forums li.bbp-footer .bbp-forum-author,#bbpress-forums li.bbp-footer .bbp-reply-author,#bbpress-forums li.bbp-footer .bbp-search-author,#bbpress-forums li.bbp-footer .bbp-topic-author,#bbpress-forums li.bbp-header .bbp-forum-author,#bbpress-forums li.bbp-header .bbp-reply-author,#bbpress-forums li.bbp-header .bbp-search-author,#bbpress-forums li.bbp-header .bbp-topic-author{float:left;margin:0;padding:0;width:120px}#bbpress-forums li.bbp-footer .bbp-forum-content,#bbpress-forums li.bbp-footer .bbp-reply-content,#bbpress-forums li.bbp-footer .bbp-search-content,#bbpress-forums li.bbp-footer .bbp-topic-content,#bbpress-forums li.bbp-header .bbp-forum-content,#bbpress-forums li.bbp-header .bbp-reply-content,#bbpress-forums li.bbp-header .bbp-search-content,#bbpress-forums li.bbp-header .bbp-topic-content{margin-left:140px;padding:0;text-align:left}div.bbp-forum-header,div.bbp-reply-header,div.bbp-topic-header,li.bbp-body div.hentry{margin:0;overflow:hidden;padding:8px}div.bbp-forum-header,div.bbp-reply-header,div.bbp-topic-header{border-top:1px solid #ddd;clear:both}span.bbp-author-ip{font-size:11px;font-weight:700;word-wrap:break-word;color:#aaa}#bbpress-forums div.bbp-forum-content,#bbpress-forums div.bbp-reply-content,#bbpress-forums div.bbp-topic-content{margin-left:130px;padding:12px 12px 12px 0;text-align:left}#bbpress-forums div.bbp-forum-content:after,#bbpress-forums div.bbp-reply-content:after,#bbpress-forums div.bbp-topic-content:after{clear:both;content:".";display:block;float:none;height:0;font-size:0;visibility:hidden}#bbpress-forums div.bbp-reply-content a,#bbpress-forums div.bbp-topic-content a{background:0 0;border:none;display:inline;font-weight:400;margin:0;padding:0}#bbpress-forums div.bbp-reply-content a.bbp-user-mention,#bbpress-forums div.bbp-topic-content a.bbp-user-mention{background:0 0;border:none;text-decoration:none;text-shadow:none;display:inline;font-weight:600;margin:0;padding:0}#bbpress-forums div.bbp-reply-content h1,#bbpress-forums div.bbp-reply-content h2,#bbpress-forums div.bbp-reply-content h3,#bbpress-forums div.bbp-reply-content h4,#bbpress-forums div.bbp-reply-content h5,#bbpress-forums div.bbp-reply-content h6,#bbpress-forums div.bbp-topic-content h1,#bbpress-forums div.bbp-topic-content h2,#bbpress-forums div.bbp-topic-content h3,#bbpress-forums div.bbp-topic-content h4,#bbpress-forums div.bbp-topic-content h5,#bbpress-forums div.bbp-topic-content h6{clear:none;line-height:1;margin:24px 0;padding:0}#bbpress-forums div.bbp-reply-content img,#bbpress-forums div.bbp-topic-content img{max-width:100%;height:auto}#bbpress-forums div.bbp-reply-content ol,#bbpress-forums div.bbp-reply-content ul,#bbpress-forums div.bbp-topic-content ol,#bbpress-forums div.bbp-topic-content ul{margin:0 15px 15px;padding:0}#bbpress-forums div.bbp-reply-content ul li,#bbpress-forums div.bbp-topic-content ul li{list-style-type:disc}#bbpress-forums div.bbp-reply-content ol li,#bbpress-forums div.bbp-topic-content ol li{list-style-type:decimal}#bbpress-forums div.bbp-reply-content ol li li,#bbpress-forums div.bbp-topic-content ol li li{list-style-type:lower-alpha}#bbpress-forums div.bbp-reply-content ol li li li,#bbpress-forums div.bbp-topic-content ol li li li{list-style-type:upper-roman}#bbpress-forums div.bbp-reply-content code,#bbpress-forums div.bbp-reply-content pre,#bbpress-forums div.bbp-topic-content code,#bbpress-forums div.bbp-topic-content pre{font-family:Inconsolata,Consolas,Monaco,"Lucida Console",monospace;display:inline-block;background-color:#f9f9f9;border:1px solid #ddd;padding:0 5px;max-width:95%;vertical-align:middle;margin-top:-3px;overflow-x:auto}#bbpress-forums div.bbp-reply-content pre,#bbpress-forums div.bbp-topic-content pre{display:block;line-height:18px;margin:0 0 24px;padding:5px 10px;white-space:pre;overflow:auto}#bbpress-forums div.bbp-reply-content pre code,#bbpress-forums div.bbp-topic-content pre code{display:block;border:none;padding:0;margin:0;background-color:transparent;overflow-wrap:normal;overflow:auto;max-width:100%}#bbpress-forums div.bbp-reply-to{margin-left:130px;padding:12px 12px 12px 0;text-align:right}#bbpress-forums div#bbp-cancel-reply-to{text-align:right}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;clear:both}#bbp-topic-hot-tags{clear:both}#bbpress-forums #bbp-search-form{clear:left}#bbpress-forums #bbp-search-form .hidden{height:0;width:0;overflow:hidden;position:absolute;background:0 0;left:-999em}#bbpress-forums #bbp-search-form #bbp_search{display:inline-block;width:auto}#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:400;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-reply-header a.bbp-reply-permalink,.bbp-topic-header a.bbp-topic-permalink{float:right;margin-left:10px;color:#ccc}.bbp-row-actions #favorite-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:700;font-size:13px}.bbp-row-actions #favorite-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-row-actions #favorite-toggle span.is-favorite a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-row-actions #favorite-toggle span.is-favorite a:hover{color:#c88;border-color:#c88;background-color:#fdd}.bbp-row-actions #subscription-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:700;font-size:13px}.bbp-row-actions #subscription-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-row-actions #subscription-toggle span.is-subscribed a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-row-actions #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{font-size:11px;margin:5px 0;padding:0;word-wrap:break-word}#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;border:1px solid #eee;padding:10px 20px;margin-bottom:10px}#bbpress-forums fieldset.bbp-form legend{padding:5px;width:auto;border:none}#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-lost-pass fieldset label,#bbp-register fieldset label{width:100px}#bbpress-forums fieldset.bbp-form input,#bbpress-forums fieldset.bbp-form p,#bbpress-forums fieldset.bbp-form select,#bbpress-forums fieldset.bbp-form textarea{margin:0 0 8px}textarea#bbp_forum_content,textarea#bbp_reply_content,textarea#bbp_topic_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-reply-form,.bbp-topic-form,.bbp-topic-tag-form{clear:left}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,body.topic-edit .bbp-topic-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.reply-edit .bbp-reply-form code,body.single-forum .bbp-topic-form code,body.single-topic .bbp-reply-form code,body.topic-edit .bbp-topic-form code{font-size:10px;background-color:#f0fff8;border:1px solid #ceefe1;display:block;padding:8px;margin-top:5px;width:369px}#delete_tag,#merge_tag{display:inline}div.bbp-submit-wrapper{margin-top:15px;float:right;clear:both}p.form-allowed-tags{max-width:100%}#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 td,#bbpress-forums div.bbp-the-content-wrapper tr{border:none;padding:0;margin:0;width:auto;line-height:1}#bbpress-forums div.bbp-the-content-wrapper input[type=button]{padding:5px 7px;margin:0 -1px 0 0;line-height:1;border:1px solid transparent;background-color:transparent;box-shadow:none;text-shadow:none;border-radius:0;text-transform:uppercase;font-size:11px}#bbpress-forums div.bbp-the-content-wrapper input[type=button]:hover{border-color:rgba(0,0,0,.1);background-color:rgba(255,255,255,.5)}#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}#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;width:60%;background-color:#f9f9f9;border:1px solid #ddd}#bbpress-forums #bbp-your-profile fieldset input,#bbpress-forums #bbp-your-profile fieldset textarea{margin-bottom:0;width:60%;background-color:#f9f9f9;border:1px solid #ddd;box-shadow:none;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,.1);outline-color:rgba(240,255,240,.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 p.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:none;padding:0;clear:none;float:none}#bbpress-forums #bbp-your-profile fieldset fieldset.capabilities dl{margin:0}#bbpress-forums #bbp-your-profile fieldset.submit button{float:right}#bbpress-forums #bbp-your-profile fieldset fieldset.password{width:60%;display:inline}#bbpress-forums #bbp-your-profile fieldset fieldset.password .password-button-wrapper,#bbpress-forums #bbp-your-profile fieldset fieldset.password .password-input-wrapper{width:100%;margin:0;display:inline-block}#bbpress-forums #bbp-your-profile fieldset fieldset.password .password-button-wrapper button{width:46%;margin:4% 2%;box-sizing:border-box;display:inline-block}#bbpress-forums #bbp-your-profile fieldset fieldset.password input,#bbpress-forums #bbp-your-profile fieldset fieldset.passwword textarea{width:100%}#bbpress-forums #bbp-your-profile fieldset fieldset.password button .dashicons{display:none}#bbpress-forums #bbp-your-profile fieldset fieldset.password span.description{margin-left:0;margin-bottom:20px}#bbpress-forums #password #pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:0;padding:8px;text-align:center;box-sizing:border-box;display:inline-block}#bbpress-forums #password #pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#bbpress-forums #password #pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#bbpress-forums #password #pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#bbpress-forums #password #pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#bbpress-forums #password #pass1-text.short,#bbpress-forums #password #pass1.short{border-color:#e35b5b}#bbpress-forums #password #pass1-text.bad,#bbpress-forums #password#pass1.bad{border-color:#f78b53}#bbpress-forums #password #pass1-text.good,#bbpress-forums #password #pass1.good{border-color:#ffc733}#bbpress-forums #password #pass1-text.strong,#bbpress-forums #password #pass1.strong{border-color:#83c373}#bbpress-forums .indicator-hint{padding-top:8px}#bbpress-forums #pass1-text,#bbpress-forums .pw-weak,#bbpress-forums .show-password #pass1{display:none}#bbpress-forums .show-password #pass1-text{display:inline-block}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 li,div.bbp-template-notice p{margin:.5em 0 6px!important;padding:2px;font-size:12px;line-height:1.4}.bbp-forum-content ul.sticky,.bbp-topics ul.sticky,.bbp-topics ul.super-sticky,.bbp-topics-front ul.super-sticky{background-color:#ffffe0!important;font-size:1.1em}#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log,#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log,#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log{border-top:1px dotted #ddd;width:100%;margin:0;padding:8px 0 0;font-size:11px;color:#aaa}#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log li,#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log li,#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log li{list-style-type:none}.bbp-login-form fieldset legend{display:none}.bbp-login-form .bbp-email input,.bbp-login-form .bbp-password input,.bbp-login-form .bbp-username input{padding:5px}.bbp-login-form label{width:140px;display:inline-block}#sidebar .bbp-login-form label{width:70px}.bbp-login-form .bbp-email,.bbp-login-form .bbp-password,.bbp-login-form .bbp-remember-me,.bbp-login-form .bbp-submit-wrapper,.bbp-login-form .bbp-username{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:700;font-size:1.3em;clear:none;margin-bottom:10px}#bbpress-forums img.avatar{box-shadow:none;display:inline-block}#bbpress-forums .widget_display_replies img.avatar,#bbpress-forums .widget_display_topics img.avatar,#bbpress-forums div.bbp-template-notice img.avatar,#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{float:none;vertical-align:middle;border:3px double #ddd}fieldset div.avatar{float:right}.activity-list li.bbp_reply_create .activity-content .activity-inner,.activity-list li.bbp_topic_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:1;padding-bottom:10px}#bbpress-forums #bbp-user-wrapper{float:left;width:100%}#bbpress-forums .bbp-user-section{overflow:auto;clear:right}#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 fieldset.bbp-form,#bbpress-forums #bbp-user-wrapper ul.bbp-forums,#bbpress-forums #bbp-user-wrapper ul.bbp-lead-topic,#bbpress-forums #bbp-user-wrapper ul.bbp-replies,#bbpress-forums #bbp-user-wrapper ul.bbp-topics{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:none;height:150px;padding:0;margin:0 0 20px;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:none;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}.bbp-alert-outer{height:100%;width:100%;top:0;left:0;position:fixed;background-color:rgba(0,0,0,.2);z-index:99999}.bbp-alert-inner{width:350px;text-align:center;background:#fff;position:fixed;top:50%;left:50%;margin-top:-75px;margin-left:-185px;border-radius:3px;border:1px solid #aaa;padding:15px 10px 10px}.bbp-alert-outer .bbp-alert-inner p{margin:10px 0}.bbp-alert-actions a{padding:5px 20px;text-decoration:none}@media only screen and (max-width:480px){#bbpress-forums div.bbp-topic-tags{clear:left;float:left}div.bbp-search-form button,div.bbp-search-form input{font-size:11px;padding:2px}li.bbp-forum-info,li.bbp-topic-title{width:45%}li.bbp-forum-reply-count,li.bbp-forum-topic-count,li.bbp-topic-reply-count,li.bbp-topic-voice-count{width:15%}span.bbp-reply-post-date,span.bbp-topic-post-date{float:left}span.bbp-admin-links{clear:left;float:left}#bbpress-forums .bbp-forums-list li{display:block;font-size:11px}#bbpress-forums .bbp-body div.bbp-reply-author,#bbpress-forums .bbp-body div.bbp-topic-author{margin:-15px 10px 10px;min-height:100px;padding-left:80px;position:relative;text-align:left;width:100%}#bbpress-forums div.bbp-reply-author a.bbp-author-name,#bbpress-forums div.bbp-topic-author a.bbp-author-name{clear:none;display:inline-block;margin-left:0;word-wrap:break-word}#bbpress-forums div.bbp-reply-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar{position:absolute;top:15px;left:0;width:60px;height:auto}#bbpress-forums div.bbp-reply-author .bbp-author-role,#bbpress-forums div.bbp-topic-author .bbp-author-role{font-size:12px;font-style:normal}#bbpress-forums .bbp-body div.bbp-reply-content,#bbpress-forums .bbp-body div.bbp-topic-content{clear:both;margin:10px;padding:0}#bbpress-forums div.bbp-reply-content p,#bbpress-forums div.bbp-topic-content p{margin-bottom:1em}div.bbp-submit-wrapper{float:left}#bbpress-forums fieldset.bbp-form{padding:0 10px 10px}#bbpress-forums #bbp-user-body{clear:both;margin-left:0;word-wrap:break-word}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{font-size:14px}}@media only screen and (max-width:320px){#bbpress-forums div.bbp-search-form{margin-bottom:10px}#bbpress-forums li.bbp-body li.bbp-forum-info,#bbpress-forums li.bbp-body li.bbp-topic-title,#bbpress-forums li.bbp-header li.bbp-forum-info,#bbpress-forums li.bbp-header li.bbp-topic-title{width:100%}#bbpress-forums li.bbp-header li.bbp-forum-info,#bbpress-forums li.bbp-header li.bbp-topic-title{text-align:center;text-transform:uppercase}#bbpress-forums li.bbp-body li.bbp-forum-reply-count,#bbpress-forums li.bbp-body li.bbp-forum-topic-count,#bbpress-forums li.bbp-body li.bbp-topic-reply-count,#bbpress-forums li.bbp-body li.bbp-topic-voice-count,#bbpress-forums li.bbp-header li.bbp-forum-reply-count,#bbpress-forums li.bbp-header li.bbp-forum-topic-count,#bbpress-forums li.bbp-header li.bbp-topic-reply-count,#bbpress-forums li.bbp-header li.bbp-topic-voice-count{width:20%}#bbpress-forums li.bbp-body li.bbp-forum-freshness,#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-header li.bbp-forum-freshness,#bbpress-forums li.bbp-header li.bbp-topic-freshness{width:58%}#bbpress-forums li.bbp-body li.bbp-forum-freshness,#bbpress-forums li.bbp-body li.bbp-forum-reply-count,#bbpress-forums li.bbp-body li.bbp-forum-topic-count,#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-body li.bbp-topic-reply-count,#bbpress-forums li.bbp-body li.bbp-topic-voice-count{margin-top:7px}#bbpress-forums li.bbp-footer,#bbpress-forums li.bbp-header{font-size:10px}#bbpress-forums li.bbp-header div.bbp-reply-author,#bbpress-forums li.bbp-header div.bbp-search-author,#bbpress-forums li.bbp-header div.bbp-topic-author{text-align:left;width:25%}#bbpress-forums li.bbp-header div.bbp-reply-content,#bbpress-forums li.bbp-header div.bbp-search-content,#bbpress-forums li.bbp-header div.bbp-topic-content{margin-left:25%}#bbpress-forums div.bbp-template-notice img.avatar,#bbpress-forums p.bbp-topic-meta img.avatar{width:14px;height:auto}#bbpress-forums div.bbp-the-content-wrapper td.mceToolbar{padding:1px}#bbpress-forums div.bbp-the-content-wrapper td.mceToolbar td{width:20px;height:20px}#bbpress-forums div.wp-editor-container{width:100%;overflow:auto}#bbpress-forums input#bbp_topic_tags,#bbpress-forums input#bbp_topic_title{width:95%}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{font-size:14px}}@media only screen and (max-width:240px){#bbpress-forums li.bbp-body li.bbp-forum-reply-count,#bbpress-forums li.bbp-body li.bbp-forum-topic-count,#bbpress-forums li.bbp-body li.bbp-topic-reply-count,#bbpress-forums li.bbp-body li.bbp-topic-voice-count,#bbpress-forums li.bbp-footer div.bbp-reply-author,#bbpress-forums li.bbp-footer div.bbp-search-author,#bbpress-forums li.bbp-footer div.bbp-topic-author,#bbpress-forums li.bbp-header li.bbp-forum-reply-count,#bbpress-forums li.bbp-header li.bbp-forum-topic-count,#bbpress-forums li.bbp-header li.bbp-topic-reply-count,#bbpress-forums li.bbp-header li.bbp-topic-voice-count{width:45%}#bbpress-forums li.bbp-body li.bbp-forum-freshness,#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-header li.bbp-forum-freshness,#bbpress-forums li.bbp-header li.bbp-topic-freshness{clear:both;width:100%}#bbpress-forums li.bbp-header li.bbp-forum-freshness,#bbpress-forums li.bbp-header li.bbp-topic-freshness{text-align:center}#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-header div.bbp-reply-author,#bbpress-forums li.bbp-header div.bbp-reply-content,#bbpress-forums li.bbp-header div.bbp-search-author,#bbpress-forums li.bbp-header div.bbp-search-content,#bbpress-forums li.bbp-header div.bbp-topic-author,#bbpress-forums li.bbp-header div.bbp-topic-content{margin-left:0;text-align:left}#bbpress-forums li.bbp-body li.bbp-topic-freshness p.bbp-topic-meta{display:inline-block}#bbpress-forums li.bbp-header{overflow:hidden}#bbpress-forums li.bbp-footer div.bbp-reply-content,#bbpress-forums li.bbp-footer div.bbp-search-content,#bbpress-forums li.bbp-footer div.bbp-topic-content{display:inline-block;margin-left:0}#bbpress-forums li.bbp-body div.bbp-reply-author,#bbpress-forums li.bbp-body div.bbp-topic-author{min-height:60px;padding-left:60px}#bbpress-forums div.bbp-reply-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar{width:40px;height:auto}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{font-size:12px}}
1
+ .hidden,.js .hide-if-js{display:none}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0;word-wrap:normal!important}#bbpress-forums{background:0 0;clear:both;margin-bottom:20px;overflow:hidden;font-size:12px;line-height:18px}#bbpress-forums a,#bbpress-forums a:hover{box-shadow:none;border:none;transition:none}#bbpress-forums hr{margin:0 0 24px}#bbpress-forums div.even,#bbpress-forums ul.even{background-color:#fff}#bbpress-forums div.odd,#bbpress-forums ul.odd{background-color:#fbfbfb}body.reply-edit .reply{float:none}#bbpress-forums div.reply{height:auto;width:100%}#bbpress-forums div.bbp-forum-header,#bbpress-forums div.bbp-reply-header,#bbpress-forums div.bbp-topic-header{background-color:#f4f4f4}#bbpress-forums .status-spam.even,#bbpress-forums .status-trash.even{background-color:#fee}#bbpress-forums .status-spam.odd,#bbpress-forums .status-trash.odd{background-color:#fdd}#bbpress-forums .status-pending.even,#bbpress-forums .status-pending.odd,#bbpress-forums ul.status-pending a{background-color:#fef7f1}#bbpress-forums ul.status-closed,#bbpress-forums ul.status-closed a{color:#ccc}#bbpress-forums ul{background:0 0;list-style:none;margin:0;padding:0}#bbpress-forums ul.bbp-threaded-replies{margin-left:50px}#bbpress-forums li{background:0 0;margin:0;list-style:none}#bbpress-forums ul.bbp-forums,#bbpress-forums ul.bbp-lead-topic,#bbpress-forums ul.bbp-replies,#bbpress-forums ul.bbp-search-results,#bbpress-forums ul.bbp-topics{font-size:12px;overflow:hidden;border:1px solid #eee;margin-bottom:20px;clear:both}#bbpress-forums li.bbp-body,#bbpress-forums li.bbp-footer,#bbpress-forums li.bbp-header{clear:both}#bbpress-forums li.bbp-footer,#bbpress-forums li.bbp-header{background:#f3f3f3;border-top:1px solid #eee;font-weight:700;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:1}li.bbp-forum-info,li.bbp-topic-title{float:left;text-align:left;width:55%}li.bbp-forum-reply-count,li.bbp-forum-topic-count,li.bbp-topic-reply-count,li.bbp-topic-voice-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}#bbpress-forums #favorite-toggle,#bbpress-forums #subscription-toggle{float:right}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{background:0 0;border:none;font-size:16px;line-height:1;margin:8px 0;padding:0;text-transform:none}#bbpress-forums div.bbp-forum-author,#bbpress-forums div.bbp-reply-author,#bbpress-forums div.bbp-topic-author{float:left;text-align:center;width:115px}#bbpress-forums div.bbp-forum-author img.avatar,#bbpress-forums div.bbp-reply-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar{border:none;max-width:80px;padding:0;margin:12px auto 0;float:none}#bbpress-forums div.bbp-forum-author .bbp-author-name,#bbpress-forums div.bbp-reply-author .bbp-author-name,#bbpress-forums div.bbp-topic-author .bbp-author-name{margin:0 12px;word-wrap:break-word;display:inline-block}#bbpress-forums div.bbp-reply-author .bbp-author-name,#bbpress-forums div.bbp-topic-author .bbp-author-name{clear:left;display:block}#bbpress-forums div.bbp-forum-author .bbp-author-role,#bbpress-forums div.bbp-reply-author .bbp-author-role,#bbpress-forums div.bbp-topic-author .bbp-author-role{font-size:11px;font-style:italic}#bbpress-forums li.bbp-footer .bbp-forum-author,#bbpress-forums li.bbp-footer .bbp-reply-author,#bbpress-forums li.bbp-footer .bbp-search-author,#bbpress-forums li.bbp-footer .bbp-topic-author,#bbpress-forums li.bbp-header .bbp-forum-author,#bbpress-forums li.bbp-header .bbp-reply-author,#bbpress-forums li.bbp-header .bbp-search-author,#bbpress-forums li.bbp-header .bbp-topic-author{float:left;margin:0;padding:0;width:120px}#bbpress-forums li.bbp-footer .bbp-forum-content,#bbpress-forums li.bbp-footer .bbp-reply-content,#bbpress-forums li.bbp-footer .bbp-search-content,#bbpress-forums li.bbp-footer .bbp-topic-content,#bbpress-forums li.bbp-header .bbp-forum-content,#bbpress-forums li.bbp-header .bbp-reply-content,#bbpress-forums li.bbp-header .bbp-search-content,#bbpress-forums li.bbp-header .bbp-topic-content{margin-left:140px;padding:0;text-align:left}div.bbp-forum-header,div.bbp-reply-header,div.bbp-topic-header,li.bbp-body div.hentry{margin:0;overflow:hidden;padding:8px}div.bbp-forum-header,div.bbp-reply-header,div.bbp-topic-header{border-top:1px solid #ddd;clear:both}span.bbp-author-ip{font-size:11px;font-weight:700;word-wrap:break-word;color:#aaa}#bbpress-forums div.bbp-forum-content,#bbpress-forums div.bbp-reply-content,#bbpress-forums div.bbp-topic-content{margin-left:130px;padding:12px 12px 12px 0;text-align:left}#bbpress-forums div.bbp-forum-content:after,#bbpress-forums div.bbp-reply-content:after,#bbpress-forums div.bbp-topic-content:after{clear:both;content:".";display:block;float:none;height:0;font-size:0;visibility:hidden}#bbpress-forums div.bbp-reply-content a,#bbpress-forums div.bbp-topic-content a{background:0 0;border:none;display:inline;font-weight:400;margin:0;padding:0}#bbpress-forums div.bbp-reply-content a.bbp-user-mention,#bbpress-forums div.bbp-topic-content a.bbp-user-mention{background:0 0;border:none;text-decoration:none;text-shadow:none;display:inline;font-weight:600;margin:0;padding:0}#bbpress-forums div.bbp-reply-content h1,#bbpress-forums div.bbp-reply-content h2,#bbpress-forums div.bbp-reply-content h3,#bbpress-forums div.bbp-reply-content h4,#bbpress-forums div.bbp-reply-content h5,#bbpress-forums div.bbp-reply-content h6,#bbpress-forums div.bbp-topic-content h1,#bbpress-forums div.bbp-topic-content h2,#bbpress-forums div.bbp-topic-content h3,#bbpress-forums div.bbp-topic-content h4,#bbpress-forums div.bbp-topic-content h5,#bbpress-forums div.bbp-topic-content h6{clear:none;line-height:1;margin:24px 0;padding:0}#bbpress-forums div.bbp-reply-content img,#bbpress-forums div.bbp-topic-content img{max-width:100%;height:auto}#bbpress-forums div.bbp-reply-content ol,#bbpress-forums div.bbp-reply-content ul,#bbpress-forums div.bbp-topic-content ol,#bbpress-forums div.bbp-topic-content ul{margin:0 15px 15px;padding:0}#bbpress-forums div.bbp-reply-content ul li,#bbpress-forums div.bbp-topic-content ul li{list-style-type:disc}#bbpress-forums div.bbp-reply-content ol li,#bbpress-forums div.bbp-topic-content ol li{list-style-type:decimal}#bbpress-forums div.bbp-reply-content ol li li,#bbpress-forums div.bbp-topic-content ol li li{list-style-type:lower-alpha}#bbpress-forums div.bbp-reply-content ol li li li,#bbpress-forums div.bbp-topic-content ol li li li{list-style-type:upper-roman}#bbpress-forums div.bbp-reply-content code,#bbpress-forums div.bbp-reply-content pre,#bbpress-forums div.bbp-topic-content code,#bbpress-forums div.bbp-topic-content pre{font-family:Inconsolata,Consolas,Monaco,"Lucida Console",monospace;display:inline-block;background-color:#f9f9f9;border:1px solid #ddd;padding:0 5px;max-width:95%;vertical-align:middle;margin-top:-3px;overflow-x:auto}#bbpress-forums div.bbp-reply-content pre,#bbpress-forums div.bbp-topic-content pre{display:block;line-height:18px;margin:0 0 24px;padding:5px 10px;white-space:pre;overflow:auto}#bbpress-forums div.bbp-reply-content pre code,#bbpress-forums div.bbp-topic-content pre code{display:block;border:none;padding:0;margin:0;background-color:transparent;overflow-wrap:normal;overflow:auto;max-width:100%}#bbpress-forums div.bbp-reply-to{margin-left:130px;padding:12px 12px 12px 0;text-align:right}#bbpress-forums div#bbp-cancel-reply-to{text-align:right}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;clear:both}#bbp-topic-hot-tags{clear:both}#bbpress-forums #bbp-search-form{clear:left}#bbpress-forums #bbp-search-form .hidden{height:0;width:0;overflow:hidden;position:absolute;background:0 0;left:-999em}#bbpress-forums #bbp-search-form #bbp_search{display:inline-block;width:auto}#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:400;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-reply-header a.bbp-reply-permalink,.bbp-topic-header a.bbp-topic-permalink{float:right;margin-left:10px;color:#ccc}.bbp-row-actions #favorite-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:700;font-size:12px}.bbp-row-actions #favorite-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-row-actions #favorite-toggle span.is-favorite a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-row-actions #favorite-toggle span.is-favorite a:hover{color:#c88;border-color:#c88;background-color:#fdd}.bbp-row-actions #subscription-toggle a{text-decoration:none;padding:0 3px 1px;color:#7c7;border:1px solid #aca;background-color:#dfd;font-weight:700;font-size:12px}.bbp-row-actions #subscription-toggle a:hover{color:#5a5;border-color:#7c7;background-color:#beb}.bbp-row-actions #subscription-toggle span.is-subscribed a{color:#faa;border:1px solid #faa;background-color:#fee}.bbp-row-actions #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{font-size:11px;margin:5px 0;padding:0;word-wrap:break-word}#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{float:left;width:100%;margin-bottom:15px}#bbpress-forums .bbp-pagination-links a,#bbpress-forums .bbp-pagination-links span.current{display:block;float:left;font-size:12px;line-height:18px;padding:0 5px;margin-left:5px;border:1px solid #efefef;border-radius:0;background:0 0;color:inherit;text-decoration:none}#bbpress-forums .bbp-pagination-links span.dots{display:block;float:left;padding:1px 4px;margin-left:5px}#bbpress-forums .bbp-topic-pagination{display:inline-block;margin-left:5px;margin-bottom:2px}#bbpress-forums .bbp-topic-pagination a{font-size:10px;line-height:10px;padding:1px 3px;border:1px solid #ddd;color:inherit;text-decoration:none}#bbpress-forums .bbp-pagination-links a:hover,#bbpress-forums .bbp-pagination-links span.current,#bbpress-forums .bbp-topic-pagination a:hover{background:#eee;opacity:.8;border:1px solid #ddd}#bbpress-forums fieldset.bbp-form{clear:left;border:1px solid #eee;padding:10px 20px;margin-bottom:10px}#bbpress-forums fieldset.bbp-form legend{padding:5px;width:auto;border:none}#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-lost-pass fieldset label,#bbp-register fieldset label{width:100px}#bbpress-forums fieldset.bbp-form input,#bbpress-forums fieldset.bbp-form p,#bbpress-forums fieldset.bbp-form select,#bbpress-forums fieldset.bbp-form textarea{margin:0 0 8px}textarea#bbp_forum_content,textarea#bbp_reply_content,textarea#bbp_topic_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-reply-form,.bbp-topic-form,.bbp-topic-tag-form{clear:left}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,body.topic-edit .bbp-topic-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.reply-edit .bbp-reply-form code,body.single-forum .bbp-topic-form code,body.single-topic .bbp-reply-form code,body.topic-edit .bbp-topic-form code{font-size:10px;background-color:#f0fff8;border:1px solid #ceefe1;display:block;padding:8px;margin-top:5px;width:369px}#delete_tag,#merge_tag{display:inline}div.bbp-submit-wrapper{margin-top:15px;float:right;clear:both}p.form-allowed-tags{max-width:100%}#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 td,#bbpress-forums div.bbp-the-content-wrapper tr{border:none;padding:0;margin:0;width:auto;line-height:1}#bbpress-forums div.bbp-the-content-wrapper input[type=button]{padding:5px 7px;margin:0 -1px 0 0;line-height:1;border:1px solid transparent;background-color:transparent;box-shadow:none;text-shadow:none;border-radius:0;text-transform:uppercase;font-size:11px}#bbpress-forums div.bbp-the-content-wrapper input[type=button]:hover{border-color:rgba(0,0,0,.1);background-color:rgba(255,255,255,.5)}#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}#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;width:60%;background-color:#f9f9f9;border:1px solid #ddd}#bbpress-forums #bbp-your-profile fieldset input,#bbpress-forums #bbp-your-profile fieldset textarea{margin-bottom:0;width:60%;background-color:#f9f9f9;border:1px solid #ddd;box-shadow:none;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,.1);outline-color:rgba(240,255,240,.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 p.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:none;padding:0;clear:none;float:none}#bbpress-forums #bbp-your-profile fieldset fieldset.capabilities dl{margin:0}#bbpress-forums #bbp-your-profile fieldset.submit button{float:right}#bbpress-forums #bbp-your-profile fieldset fieldset.password{width:60%;display:inline}#bbpress-forums #bbp-your-profile fieldset fieldset.password .password-button-wrapper,#bbpress-forums #bbp-your-profile fieldset fieldset.password .password-input-wrapper{width:100%;margin:0;display:inline-block}#bbpress-forums #bbp-your-profile fieldset fieldset.password .password-button-wrapper button{width:46%;margin:4% 2%;box-sizing:border-box;display:inline-block}#bbpress-forums #bbp-your-profile fieldset fieldset.password input,#bbpress-forums #bbp-your-profile fieldset fieldset.passwword textarea{width:100%}#bbpress-forums #bbp-your-profile fieldset fieldset.password button .dashicons{display:none}#bbpress-forums #bbp-your-profile fieldset fieldset.password span.description{margin-left:0;margin-bottom:20px}#bbpress-forums #password #pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:0;padding:8px;text-align:center;box-sizing:border-box;display:inline-block}#bbpress-forums #password #pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#bbpress-forums #password #pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#bbpress-forums #password #pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#bbpress-forums #password #pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#bbpress-forums #password #pass1-text.short,#bbpress-forums #password #pass1.short{border-color:#e35b5b}#bbpress-forums #password #pass1-text.bad,#bbpress-forums #password#pass1.bad{border-color:#f78b53}#bbpress-forums #password #pass1-text.good,#bbpress-forums #password #pass1.good{border-color:#ffc733}#bbpress-forums #password #pass1-text.strong,#bbpress-forums #password #pass1.strong{border-color:#83c373}#bbpress-forums .indicator-hint{padding-top:8px}#bbpress-forums #pass1-text,#bbpress-forums .pw-weak,#bbpress-forums .show-password #pass1{display:none}#bbpress-forums .show-password #pass1-text{display:inline-block}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 li,div.bbp-template-notice p{margin:.5em 0 6px!important;padding:2px;font-size:12px;line-height:1.4}.bbp-forum-content ul.sticky,.bbp-topics ul.sticky,.bbp-topics ul.super-sticky,.bbp-topics-front ul.super-sticky{background-color:#ffffe0!important;font-size:1.1em}#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log,#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log,#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log{border-top:1px dotted #ddd;width:100%;margin:0;padding:8px 0 0;font-size:11px;color:#aaa}#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log li,#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log li,#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log li{list-style-type:none}.bbp-login-form fieldset legend{display:none}.bbp-login-form .bbp-email input,.bbp-login-form .bbp-password input,.bbp-login-form .bbp-username input{padding:5px}.bbp-login-form label{width:140px;display:inline-block}#sidebar .bbp-login-form label{width:70px}.bbp-login-form .bbp-email,.bbp-login-form .bbp-password,.bbp-login-form .bbp-remember-me,.bbp-login-form .bbp-submit-wrapper,.bbp-login-form .bbp-username{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:700;font-size:1.3em;clear:none;margin-bottom:10px}#bbpress-forums img.avatar{box-shadow:none;display:inline-block}#bbpress-forums .widget_display_replies img.avatar,#bbpress-forums .widget_display_topics img.avatar,#bbpress-forums div.bbp-template-notice img.avatar,#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{float:none;vertical-align:middle;border:3px double #ddd}fieldset div.avatar{float:right}.activity-list li.bbp_reply_create .activity-content .activity-inner,.activity-list li.bbp_topic_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:1;padding-bottom:10px}#bbpress-forums #bbp-user-wrapper{float:left;width:100%}#bbpress-forums .bbp-user-section{overflow:auto;clear:right}#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 fieldset.bbp-form,#bbpress-forums #bbp-user-wrapper ul.bbp-forums,#bbpress-forums #bbp-user-wrapper ul.bbp-lead-topic,#bbpress-forums #bbp-user-wrapper ul.bbp-replies,#bbpress-forums #bbp-user-wrapper ul.bbp-topics{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:none;height:150px;padding:0;margin:0 0 20px;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:none;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}.bbp-alert-outer{height:100%;width:100%;top:0;left:0;position:fixed;background-color:rgba(0,0,0,.2);z-index:99999}.bbp-alert-inner{width:350px;text-align:center;background:#fff;position:fixed;top:50%;left:50%;margin-top:-75px;margin-left:-185px;border-radius:3px;border:1px solid #aaa;padding:15px 10px 10px}.bbp-alert-outer .bbp-alert-inner p{margin:10px 0}.bbp-alert-actions a{padding:5px 20px;text-decoration:none}@media only screen and (max-width:480px){#bbpress-forums div.bbp-topic-tags{clear:left;float:left}div.bbp-search-form button,div.bbp-search-form input{font-size:11px;padding:2px}li.bbp-forum-info,li.bbp-topic-title{width:45%}li.bbp-forum-reply-count,li.bbp-forum-topic-count,li.bbp-topic-reply-count,li.bbp-topic-voice-count{width:15%}span.bbp-reply-post-date,span.bbp-topic-post-date{float:left}span.bbp-admin-links{clear:left;float:left}#bbpress-forums .bbp-forums-list li{display:block;font-size:11px}#bbpress-forums .bbp-body div.bbp-reply-author,#bbpress-forums .bbp-body div.bbp-topic-author{margin:-15px 10px 10px;min-height:100px;padding-left:80px;position:relative;text-align:left;width:100%}#bbpress-forums div.bbp-reply-author .bbp-author-name,#bbpress-forums div.bbp-topic-author .bbp-author-name{clear:none;display:inline-block;margin-left:0;word-wrap:break-word}#bbpress-forums div.bbp-reply-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar{position:absolute;top:15px;left:0;width:60px;height:auto}#bbpress-forums div.bbp-reply-author .bbp-author-role,#bbpress-forums div.bbp-topic-author .bbp-author-role{font-size:12px;font-style:normal}#bbpress-forums .bbp-body div.bbp-reply-content,#bbpress-forums .bbp-body div.bbp-topic-content{clear:both;margin:10px;padding:0}#bbpress-forums div.bbp-reply-content p,#bbpress-forums div.bbp-topic-content p{margin-bottom:1em}div.bbp-submit-wrapper{float:left}#bbpress-forums fieldset.bbp-form{padding:0 10px 10px}#bbpress-forums #bbp-user-body{clear:both;margin-left:0;word-wrap:break-word}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{font-size:14px}}@media only screen and (max-width:320px){#bbpress-forums div.bbp-search-form{margin-bottom:10px}#bbpress-forums li.bbp-body li.bbp-forum-info,#bbpress-forums li.bbp-body li.bbp-topic-title,#bbpress-forums li.bbp-header li.bbp-forum-info,#bbpress-forums li.bbp-header li.bbp-topic-title{width:100%}#bbpress-forums li.bbp-header li.bbp-forum-info,#bbpress-forums li.bbp-header li.bbp-topic-title{text-align:center;text-transform:uppercase}#bbpress-forums li.bbp-body li.bbp-forum-reply-count,#bbpress-forums li.bbp-body li.bbp-forum-topic-count,#bbpress-forums li.bbp-body li.bbp-topic-reply-count,#bbpress-forums li.bbp-body li.bbp-topic-voice-count,#bbpress-forums li.bbp-header li.bbp-forum-reply-count,#bbpress-forums li.bbp-header li.bbp-forum-topic-count,#bbpress-forums li.bbp-header li.bbp-topic-reply-count,#bbpress-forums li.bbp-header li.bbp-topic-voice-count{width:20%}#bbpress-forums li.bbp-body li.bbp-forum-freshness,#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-header li.bbp-forum-freshness,#bbpress-forums li.bbp-header li.bbp-topic-freshness{width:58%}#bbpress-forums li.bbp-body li.bbp-forum-freshness,#bbpress-forums li.bbp-body li.bbp-forum-reply-count,#bbpress-forums li.bbp-body li.bbp-forum-topic-count,#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-body li.bbp-topic-reply-count,#bbpress-forums li.bbp-body li.bbp-topic-voice-count{margin-top:7px}#bbpress-forums li.bbp-footer,#bbpress-forums li.bbp-header{font-size:10px}#bbpress-forums li.bbp-header div.bbp-reply-author,#bbpress-forums li.bbp-header div.bbp-search-author,#bbpress-forums li.bbp-header div.bbp-topic-author{text-align:left;width:25%}#bbpress-forums li.bbp-header div.bbp-reply-content,#bbpress-forums li.bbp-header div.bbp-search-content,#bbpress-forums li.bbp-header div.bbp-topic-content{margin-left:25%}#bbpress-forums div.bbp-template-notice img.avatar,#bbpress-forums p.bbp-topic-meta img.avatar{width:14px;height:auto}#bbpress-forums div.bbp-the-content-wrapper td.mceToolbar{padding:1px}#bbpress-forums div.bbp-the-content-wrapper td.mceToolbar td{width:20px;height:20px}#bbpress-forums div.wp-editor-container{width:100%;overflow:auto}#bbpress-forums input#bbp_topic_tags,#bbpress-forums input#bbp_topic_title{width:95%}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{font-size:14px}}@media only screen and (max-width:240px){#bbpress-forums li.bbp-body li.bbp-forum-reply-count,#bbpress-forums li.bbp-body li.bbp-forum-topic-count,#bbpress-forums li.bbp-body li.bbp-topic-reply-count,#bbpress-forums li.bbp-body li.bbp-topic-voice-count,#bbpress-forums li.bbp-footer div.bbp-reply-author,#bbpress-forums li.bbp-footer div.bbp-search-author,#bbpress-forums li.bbp-footer div.bbp-topic-author,#bbpress-forums li.bbp-header li.bbp-forum-reply-count,#bbpress-forums li.bbp-header li.bbp-forum-topic-count,#bbpress-forums li.bbp-header li.bbp-topic-reply-count,#bbpress-forums li.bbp-header li.bbp-topic-voice-count{width:45%}#bbpress-forums li.bbp-body li.bbp-forum-freshness,#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-header li.bbp-forum-freshness,#bbpress-forums li.bbp-header li.bbp-topic-freshness{clear:both;width:100%}#bbpress-forums li.bbp-header li.bbp-forum-freshness,#bbpress-forums li.bbp-header li.bbp-topic-freshness{text-align:center}#bbpress-forums li.bbp-body li.bbp-topic-freshness,#bbpress-forums li.bbp-header div.bbp-reply-author,#bbpress-forums li.bbp-header div.bbp-reply-content,#bbpress-forums li.bbp-header div.bbp-search-author,#bbpress-forums li.bbp-header div.bbp-search-content,#bbpress-forums li.bbp-header div.bbp-topic-author,#bbpress-forums li.bbp-header div.bbp-topic-content{margin-left:0;text-align:left}#bbpress-forums li.bbp-body li.bbp-topic-freshness p.bbp-topic-meta{display:inline-block}#bbpress-forums li.bbp-header{overflow:hidden}#bbpress-forums li.bbp-footer div.bbp-reply-content,#bbpress-forums li.bbp-footer div.bbp-search-content,#bbpress-forums li.bbp-footer div.bbp-topic-content{display:inline-block;margin-left:0}#bbpress-forums li.bbp-body div.bbp-reply-author,#bbpress-forums li.bbp-body div.bbp-topic-author{min-height:60px;padding-left:60px}#bbpress-forums div.bbp-reply-author img.avatar,#bbpress-forums div.bbp-topic-author img.avatar{width:40px;height:auto}#bbpress-forums div.bbp-forum-title h3,#bbpress-forums div.bbp-reply-title h3,#bbpress-forums div.bbp-topic-title h3{font-size:12px}}