wpForo Forum - Version 2.0.6

Version Description

Download this release

Release Info

Developer Tomdever
Plugin Icon 128x128 wpForo Forum
Version 2.0.6
Comparing to
See all releases

Code changes from version 2.0.5 to 2.0.6

admin/pages/board.php CHANGED
@@ -71,7 +71,7 @@ $boardid = (int) wpfval( $_GET, 'boardid' );
71
  <div class="wpf-board-option">
72
  <label for="wpf-board-settings-desc"><?php _e( 'Board Description', 'wpforo' ); ?></label>
73
  <div class="wpf-board-field">
74
- <textarea name="" id="wpf-board-settings-desc" rows="4"><?php echo $board['settings']['desc'] ?></textarea>
75
  </div>
76
  </div>
77
 
@@ -97,7 +97,7 @@ $boardid = (int) wpfval( $_GET, 'boardid' );
97
  <div class="wpf-board-module">
98
  <div class="wpf-module-head">
99
  <?php if( strpos($module['thumb'], '<svg') === FALSE ): ?>
100
- <?php $src = ( $module['thumb'] ) ? $module['thumb'] : WPFORO_URL . "/assets/images/dashboard/addon.png" ?>
101
  <img src="<?php echo esc_url_raw($src) ?>" style="height: 60px;">
102
  <?php else: ?>
103
  <?php echo $module['thumb'] ?>
@@ -159,33 +159,24 @@ $boardid = (int) wpfval( $_GET, 'boardid' );
159
  </div>
160
  <div class="wpf-board-excld_urls">
161
  <label for="wpf-board-excld_urls"><b style="font-weight: bold;">* <?php _e( 'Exclude page URLs', 'wpforo' ) ?></b> <span class="wpf-info">(<?php _e( 'one URL per line', 'wpforo' ) ?>)</span></label>
162
- <textarea id="wpf-board-excld_urls" style="font-size: 12px; width: 100%;" rows="5" name="wpforo_excld_urls" placeholder="<?php echo esc_url( home_url( '/' ) ) ?>sample-page/&#10;<?php echo esc_url( home_url( '/' ) ) ?>hello-world/&#10;<?php echo esc_url( home_url( '/' ) ) ?>category/*&#10; ..."
163
  ><?php echo esc_textarea( implode( PHP_EOL, $board['excld_urls'] ) ) ?></textarea>
164
  </div>
165
  </div>
166
 
167
-
168
-
169
-
170
-
171
-
172
-
173
-
174
-
175
-
176
-
177
-
178
  </div><!-- wpf-board-left END -->
179
 
180
  <div class="wpf-board-right">
181
 
182
- <div class="wpf-board-side-box">
183
- <label><?php _e( 'Status', 'wpforo' ); ?></label>
184
- <div class="wpf-switch-field">
185
- <input type="radio" value="1" name="board[status]" id="wpf-board-status_1" <?php wpfo_check( $board['status'], true ); ?>><label for="wpf-board-status_1"><?php _e( 'Enabled', 'wpforo' ) ?></label> &nbsp;
186
- <input type="radio" value="0" name="board[status]" id="wpf-board-status_0" <?php wpfo_check( $board['status'], false ); ?>><label for="wpf-board-status_0"><?php _e( 'Disabled', 'wpforo' ) ?></label>
 
 
187
  </div>
188
- </div>
189
 
190
  <div class="wpf-board-submit">
191
  <input type="submit" value="<?php _e( 'Save', 'wpforo' ) ?>" class="button button-primary">
71
  <div class="wpf-board-option">
72
  <label for="wpf-board-settings-desc"><?php _e( 'Board Description', 'wpforo' ); ?></label>
73
  <div class="wpf-board-field">
74
+ <textarea name="board[settings][desc]" id="wpf-board-settings-desc" rows="4"><?php echo $board['settings']['desc'] ?></textarea>
75
  </div>
76
  </div>
77
 
97
  <div class="wpf-board-module">
98
  <div class="wpf-module-head">
99
  <?php if( strpos($module['thumb'], '<svg') === FALSE ): ?>
100
+ <?php $src = ( $module['thumb'] ) ?: WPFORO_URL . "/assets/images/dashboard/addon.png" ?>
101
  <img src="<?php echo esc_url_raw($src) ?>" style="height: 60px;">
102
  <?php else: ?>
103
  <?php echo $module['thumb'] ?>
159
  </div>
160
  <div class="wpf-board-excld_urls">
161
  <label for="wpf-board-excld_urls"><b style="font-weight: bold;">* <?php _e( 'Exclude page URLs', 'wpforo' ) ?></b> <span class="wpf-info">(<?php _e( 'one URL per line', 'wpforo' ) ?>)</span></label>
162
+ <textarea id="wpf-board-excld_urls" style="font-size: 12px; width: 100%;" rows="5" name="board[excld_urls]" placeholder="<?php echo esc_url( home_url( '/' ) ) ?>sample-page/&#10;<?php echo esc_url( home_url( '/' ) ) ?>hello-world/&#10;<?php echo esc_url( home_url( '/' ) ) ?>category/*&#10; ..."
163
  ><?php echo esc_textarea( implode( PHP_EOL, $board['excld_urls'] ) ) ?></textarea>
164
  </div>
165
  </div>
166
 
 
 
 
 
 
 
 
 
 
 
 
167
  </div><!-- wpf-board-left END -->
168
 
169
  <div class="wpf-board-right">
170
 
171
+ <?php if( $board['boardid'] || ! wpfkey( $_GET, 'boardid' ) ) : ?>
172
+ <div class="wpf-board-side-box">
173
+ <label><?php _e( 'Status', 'wpforo' ); ?></label>
174
+ <div class="wpf-switch-field">
175
+ <input type="radio" value="1" name="board[status]" id="wpf-board-status_1" <?php wpfo_check( $board['status'], true ); ?>><label for="wpf-board-status_1"><?php _e( 'Enabled', 'wpforo' ) ?></label> &nbsp;
176
+ <input type="radio" value="0" name="board[status]" id="wpf-board-status_0" <?php wpfo_check( $board['status'], false ); ?>><label for="wpf-board-status_0"><?php _e( 'Disabled', 'wpforo' ) ?></label>
177
+ </div>
178
  </div>
179
+ <?php endif; ?>
180
 
181
  <div class="wpf-board-submit">
182
  <input type="submit" value="<?php _e( 'Save', 'wpforo' ) ?>" class="button button-primary">
admin/pages/forum.php CHANGED
@@ -78,11 +78,6 @@ $action = wpfval( $_GET, 'action' );
78
  <div class="publishing-action"><input id="save_menu_footer" class="button button-primary menu-save" name="save_menu" value="<?php _e( 'Save forums order and hierarchy', 'wpforo' ); ?>" onclick="get_forums_hierarchy()" type="button"></div>
79
  </div>
80
  </form>
81
- <script>
82
- var menus = false
83
- navMenuL10n.saveAlert = null
84
- window.onbeforeunload = function () {if (a.menusChanged) {return navMenuL10n.saveAlert}}
85
- </script>
86
  <?php endif; ?><!--checking edit forum permission-->
87
  <?php endif; ?>
88
  <!-- end Forum Hierarchy -->
78
  <div class="publishing-action"><input id="save_menu_footer" class="button button-primary menu-save" name="save_menu" value="<?php _e( 'Save forums order and hierarchy', 'wpforo' ); ?>" onclick="get_forums_hierarchy()" type="button"></div>
79
  </div>
80
  </form>
 
 
 
 
 
81
  <?php endif; ?><!--checking edit forum permission-->
82
  <?php endif; ?>
83
  <!-- end Forum Hierarchy -->
admin/tools-tabs/debug.php CHANGED
@@ -291,13 +291,21 @@ function wpforo_issues() {
291
  $issues['email']['wp_mail']['message'] = __( 'WordPress Email sending function wp_mail() doesn\'t work!', 'wpforo' );
292
  $issues['email']['wp_mail']['solution'] = __( 'In most cases this is a server issue. We recommend you contact to your hosting service support team or open a support topic in wordpress.org support forum. Also there are many good articles regarding this issue in web. For example ', 'wpforo' ) . ' - <a href="https://www.wpbeginner.com/wp-tutorials/how-to-fix-wordpress-not-sending-email-issue/">' . __( 'How to Fix WordPress Not Sending Email Issue', 'wpforo' ) . '</a>';
293
  }
294
- #########################################################
 
 
 
 
 
 
 
 
295
  //Other Issues //////////////////////////////////////////
296
  $phrases = WPF()->db->get_var( "SELECT COUNT(*) FROM `" . WPF()->tables->phrases . "`" );
297
  if( ! $phrases ) {
298
  $issues['other']['empty_phrase_table']['level'] = 3;
299
  $issues['other']['empty_phrase_table']['message'] = __( 'wpForo phrases are missing!', 'wpforo' );
300
- $issues['other']['empty_phrase_table']['solution'] = __( 'Please download wpForo Phrases XML compressed file, unzip it, find english.xml file, navigate to Forums > Settings > General Tab and import it using [Add New] button of "XML Based Language" option.', 'wpforo' ) . ' [ <a href="https://wpforo.com/2wpf/english.xml.zip">' . __( 'Download wpForo Phrases', 'wpforo' ) . '</a> ]';
301
  }
302
 
303
  echo '<table class="wpf-table-data" style="margin: 10px; width: 98%;">';
291
  $issues['email']['wp_mail']['message'] = __( 'WordPress Email sending function wp_mail() doesn\'t work!', 'wpforo' );
292
  $issues['email']['wp_mail']['solution'] = __( 'In most cases this is a server issue. We recommend you contact to your hosting service support team or open a support topic in wordpress.org support forum. Also there are many good articles regarding this issue in web. For example ', 'wpforo' ) . ' - <a href="https://www.wpbeginner.com/wp-tutorials/how-to-fix-wordpress-not-sending-email-issue/">' . __( 'How to Fix WordPress Not Sending Email Issue', 'wpforo' ) . '</a>';
293
  }
294
+ #########################################################
295
+ //Custom Template Files Detected ////////////////////////
296
+ if( is_dir(get_stylesheet_directory(). '/wpforo/' ) ){
297
+ $issues['theme']['custom_theme']['level'] = 1;
298
+ $issues['theme']['custom_theme']['message'] = "Potential Conflict with wpForo Template Files";
299
+ $issues['theme']['custom_theme']['solution'] = "Please make sure the <code style='color:red;'>/wpforo/</code> folder in the current WordPress active theme directory contains wpForo v2.0 template files. If the template files have been moved to this folder from the old v1.x version you should delete them to avoid lots of errors and problems on the forum front-end. You can use an FTP client or the File Manager of your Hosting cPanel to rename or remove the <code style='color:red;'>/wpforo/</code> folder from <code style='color:blue;'>/wp-content/themes/" . basename(get_stylesheet_directory()) . "</code> directory";
300
+ }
301
+
302
+ #########################################################
303
  //Other Issues //////////////////////////////////////////
304
  $phrases = WPF()->db->get_var( "SELECT COUNT(*) FROM `" . WPF()->tables->phrases . "`" );
305
  if( ! $phrases ) {
306
  $issues['other']['empty_phrase_table']['level'] = 3;
307
  $issues['other']['empty_phrase_table']['message'] = __( 'wpForo phrases are missing!', 'wpforo' );
308
+ $issues['other']['empty_phrase_table']['solution'] = __( 'Please navigate to wpForo > Overview admin page and click the [Rebuild Phrases] button', 'wpforo');
309
  }
310
 
311
  echo '<table class="wpf-table-data" style="margin: 10px; width: 98%;">';
admin/tools-tabs/misc.php CHANGED
@@ -79,7 +79,7 @@ if( ! current_user_can( 'administrator' ) ) exit;
79
  <?php _e( 'Recent Posts', 'wpforo' ) ?>
80
  </label>
81
  <label style="min-width: 30%; display: inline-block; padding-bottom: 5px;">
82
- <input name="wpforo_tools_misc[admin_note_pages][]" <?php if( in_array( 'tags', $pages ) ) echo 'checked' ?> value="recent" type="checkbox">&nbsp;
83
  <?php _e( 'Tags', 'wpforo' ) ?>
84
  </label>
85
  <label style="min-width: 30%; display: inline-block; padding-bottom: 5px;">
79
  <?php _e( 'Recent Posts', 'wpforo' ) ?>
80
  </label>
81
  <label style="min-width: 30%; display: inline-block; padding-bottom: 5px;">
82
+ <input name="wpforo_tools_misc[admin_note_pages][]" <?php if( in_array( 'tags', $pages ) ) echo 'checked' ?> value="tags" type="checkbox">&nbsp;
83
  <?php _e( 'Tags', 'wpforo' ) ?>
84
  </label>
85
  <label style="min-width: 30%; display: inline-block; padding-bottom: 5px;">
admin/tools-tabs/tables.php CHANGED
@@ -87,7 +87,7 @@ add_action( 'admin_footer', 'wpforo_debug_page_ajax_actions' );
87
  '<b style="color: #0085ba; font-size:13px;font-family: Courier">[' . __( 'Solve database problems', 'wpforo' ) . ']</b>'
88
  ) ?></p>
89
  <p style="font-size: 14px; font-weight: 600;"><?php _e( 'Problem fixer SQL commands:', 'wpforo' ) ?></p>
90
- <pre style="padding: 10px; line-height: 1.4; border: 1px dashed #dd0000; background-color: #fffdea; color: #000000;"><?php
91
  if( ! empty( $problems ) ) {
92
  echo 'SET AUTOCOMMIT = 0;<br />';
93
  $SQL = wpforo_database_fixer( $problems );
@@ -100,6 +100,9 @@ add_action( 'admin_footer', 'wpforo_debug_page_ajax_actions' );
100
  if( wpfval( $SQL, 'tables' ) ) {
101
  foreach( $SQL['tables'] as $query ) echo $query . '<br><br>';
102
  }
 
 
 
103
  echo ';SET AUTOCOMMIT = 1;';
104
  }
105
  ?></pre>
87
  '<b style="color: #0085ba; font-size:13px;font-family: Courier">[' . __( 'Solve database problems', 'wpforo' ) . ']</b>'
88
  ) ?></p>
89
  <p style="font-size: 14px; font-weight: 600;"><?php _e( 'Problem fixer SQL commands:', 'wpforo' ) ?></p>
90
+ <pre style=" width: 100%; max-width: 1200px; display: block; padding: 10px; line-height: 1.4; border: 1px dashed #dd0000; background-color: #fffdea; color: #000000; overflow-x:auto;"><?php
91
  if( ! empty( $problems ) ) {
92
  echo 'SET AUTOCOMMIT = 0;<br />';
93
  $SQL = wpforo_database_fixer( $problems );
100
  if( wpfval( $SQL, 'tables' ) ) {
101
  foreach( $SQL['tables'] as $query ) echo $query . '<br><br>';
102
  }
103
+ if( wpfval( $SQL, 'data' ) ) {
104
+ foreach( $SQL['data'] as $query ) echo $query . '<br><br>';
105
+ }
106
  echo ';SET AUTOCOMMIT = 1;';
107
  }
108
  ?></pre>
assets/js/ajax.js CHANGED
@@ -16,7 +16,8 @@ function wpforo_post_url_fixer(hash) {
16
  type: 'POST',
17
  data: {
18
  postid: postid,
19
- action: 'wpforo_post_url_fixer'
 
20
  }
21
  }).done(function (response) {
22
  if( /^https?:\/\/[^\r\n\t\s\0'"]+$/.test(response) ){
@@ -53,6 +54,7 @@ $wpf(document).ready(function ($) {
53
  postid,
54
  type,
55
  action: 'wpforo_react',
 
56
  }
57
  }).done(function( response ){
58
  if( response.success ){
@@ -75,6 +77,7 @@ $wpf(document).ready(function ($) {
75
  data: {
76
  postid,
77
  action: 'wpforo_unreact',
 
78
  }
79
  }).done(function( response ){
80
  if( response.success ){
@@ -98,7 +101,8 @@ $wpf(document).ready(function ($) {
98
  data: {
99
  postid: postid,
100
  likestatus: 1,
101
- action: 'wpforo_like_ajax'
 
102
  }
103
  }).done(function (response) {
104
  if (response.success) {
@@ -130,7 +134,8 @@ $wpf(document).ready(function ($) {
130
  data: {
131
  postid: postid,
132
  likestatus: 0,
133
- action: 'wpforo_like_ajax'
 
134
  }
135
  }).done(function (response) {
136
  if (response.success) {
@@ -168,7 +173,8 @@ $wpf(document).ready(function ($) {
168
  itemtype: type,
169
  postid,
170
  votestatus,
171
- action: 'wpforo_vote_ajax'
 
172
  }
173
  }).done(function (response) {
174
  if( response.success ) {
@@ -201,7 +207,8 @@ $wpf(document).ready(function ($) {
201
  itemtype: type,
202
  postid,
203
  votestatus,
204
- action: 'wpforo_vote_ajax'
 
205
  }
206
  }).done(function (response) {
207
  if( response.success ) {
@@ -232,7 +239,8 @@ $wpf(document).ready(function ($) {
232
  data: {
233
  postid: postid,
234
  answerstatus: 0,
235
- action: 'wpforo_answer_ajax'
 
236
  }
237
  }).done(function (response) {
238
  if (response.success) {
@@ -258,7 +266,8 @@ $wpf(document).ready(function ($) {
258
  data: {
259
  postid: postid,
260
  answerstatus: 1,
261
- action: 'wpforo_answer_ajax'
 
262
  }
263
  }).done(function (response) {
264
  if (response.success) {
@@ -294,7 +303,8 @@ $wpf(document).ready(function ($) {
294
  url: wpforo.ajax_url,
295
  data: {
296
  postid: postid,
297
- action: 'wpforo_quote_ajax'
 
298
  }
299
  }).done(function (response) {
300
  var phrase = wpforo_phrase('Reply with quote');
@@ -341,7 +351,8 @@ $wpf(document).ready(function ($) {
341
  data: {
342
  postid: postid,
343
  reportmsg: messagecontent,
344
- action: 'wpforo_report_ajax'
 
345
  }
346
  }).done(function (response) {
347
  wpforo_dialog_hide();
@@ -366,7 +377,8 @@ $wpf(document).ready(function ($) {
366
  data: {
367
  topicid: topicid,
368
  status: 'sticky',
369
- action: 'wpforo_sticky_ajax'
 
370
  }
371
  }).done(function (response) {
372
  if (response.success) {
@@ -396,7 +408,8 @@ $wpf(document).ready(function ($) {
396
  data: {
397
  topicid: topicid,
398
  status: 'unsticky',
399
- action: 'wpforo_sticky_ajax'
 
400
  }
401
  }).done(function (response) {
402
  if (response.success) {
@@ -427,7 +440,8 @@ $wpf(document).ready(function ($) {
427
  data: {
428
  postid: postid,
429
  status: 'approve',
430
- action: 'wpforo_approve_ajax'
 
431
  }
432
  }).done(function (response) {
433
  if (response.success) {
@@ -461,7 +475,8 @@ $wpf(document).ready(function ($) {
461
  data: {
462
  postid: postid,
463
  status: 'unapprove',
464
- action: 'wpforo_approve_ajax'
 
465
  }
466
  }).done(function (response) {
467
  if( response.success ){
@@ -496,7 +511,8 @@ $wpf(document).ready(function ($) {
496
  data: {
497
  topicid: topicid,
498
  status: 'private',
499
- action: 'wpforo_private_ajax'
 
500
  }
501
  }).done(function (response) {
502
  if( response.success ){
@@ -526,7 +542,8 @@ $wpf(document).ready(function ($) {
526
  data: {
527
  topicid: topicid,
528
  status: 'public',
529
- action: 'wpforo_private_ajax'
 
530
  }
531
  }).done(function (response) {
532
  if( response.success ){
@@ -557,7 +574,8 @@ $wpf(document).ready(function ($) {
557
  data: {
558
  postid: postid,
559
  status: 'solved',
560
- action: 'wpforo_solved_ajax'
 
561
  }
562
  }).done(function (response) {
563
  if( response.success ) {
@@ -586,7 +604,8 @@ $wpf(document).ready(function ($) {
586
  data: {
587
  postid: postid,
588
  status: 'unsolved',
589
- action: 'wpforo_solved_ajax'
 
590
  }
591
  }).done(function (response) {
592
  if( response.success ){
@@ -617,7 +636,8 @@ $wpf(document).ready(function ($) {
617
  data: {
618
  topicid: topicid,
619
  status: 'close',
620
- action: 'wpforo_close_ajax'
 
621
  }
622
  }).done(function (response) {
623
  if( response.success ){
@@ -653,7 +673,8 @@ $wpf(document).ready(function ($) {
653
  data: {
654
  topicid: topicid,
655
  status: 'closed',
656
- action: 'wpforo_close_ajax'
 
657
  }
658
  }).done(function (response) {
659
  if( response.success ){
@@ -704,7 +725,8 @@ $wpf(document).ready(function ($) {
704
  url: wpforo.ajax_url,
705
  data: {
706
  postid: parseInt(wrap.data('postid')),
707
- action: 'wpforo_post_edit'
 
708
  }
709
  }).done(function(response){
710
  if( response.success ) show_form(response.data.html, true);
@@ -743,8 +765,9 @@ $wpf(document).ready(function ($) {
743
  forumid: forumid,
744
  postid: postid,
745
  status: status_value,
746
- action: 'wpforo_delete_ajax'
747
- }
 
748
  }).done(function(response){
749
  if( response.success ){
750
  if(is_topic === -1){
@@ -785,7 +808,8 @@ $wpf(document).ready(function ($) {
785
  itemid,
786
  type,
787
  status: 'subscribe',
788
- action: 'wpforo_subscribe_ajax'
 
789
  }
790
  }).done(function (response) {
791
  if( response.success ){
@@ -821,7 +845,8 @@ $wpf(document).ready(function ($) {
821
  itemid,
822
  type,
823
  status: 'unsubscribe',
824
- action: 'wpforo_subscribe_ajax'
 
825
  }
826
  }).done(function (response) {
827
  if( response.success ){
@@ -850,7 +875,8 @@ $wpf(document).ready(function ($) {
850
  type: 'POST',
851
  data: {
852
  forumid: forumid,
853
- action: 'wpforo_topic_portable_form'
 
854
  }
855
  }).done(function (response) {
856
  l.remove();
@@ -932,7 +958,8 @@ $wpf(document).ready(function ($) {
932
  forumid: forumid,
933
  filter: filter,
934
  paged: paged,
935
- action: 'wpforo_layout4_loadmore'
 
936
  }
937
  }).done(function (response) {
938
  if (response.success) {
@@ -971,7 +998,8 @@ $wpf(document).ready(function ($) {
971
  type: 'POST',
972
  data: {
973
  parentid: parentid,
974
- action: 'wpforo_qa_comment_loadrest'
 
975
  }
976
  }).done(function (response) {
977
  if (response.success) {
@@ -1005,7 +1033,8 @@ $wpf(document).ready(function ($) {
1005
  textareaid: textareaid,
1006
  postid: postid,
1007
  body: body,
1008
- action: 'wpforo_post_preview'
 
1009
  }
1010
  }).done(function (response) {
1011
  if( response.success ) {
@@ -1041,7 +1070,8 @@ $wpf(document).ready(function ($) {
1041
  textareaid: textareaid,
1042
  postid: postid,
1043
  body: body,
1044
- action: 'wpforo_save_revision'
 
1045
  }
1046
  }).done(function (response) {
1047
  if( response.success ) {
@@ -1083,7 +1113,8 @@ $wpf(document).ready(function ($) {
1083
  data: {
1084
  textareaid: textareaid,
1085
  postid: postid,
1086
- action: 'wpforo_get_revisions_history'
 
1087
  }
1088
  }).done(function (response) {
1089
  if( response.success ) {
@@ -1114,7 +1145,8 @@ $wpf(document).ready(function ($) {
1114
  type: 'POST',
1115
  data: {
1116
  revisionid: revisionid,
1117
- action: 'wpforo_get_revision'
 
1118
  }
1119
  }).done(function (response) {
1120
  if( response.success ){
@@ -1143,7 +1175,8 @@ $wpf(document).ready(function ($) {
1143
  type: 'POST',
1144
  data: {
1145
  revisionid: revisionid,
1146
- action: 'wpforo_delete_revision'
 
1147
  }
1148
  }).done(function (response) {
1149
  if( response.success ){
@@ -1170,7 +1203,8 @@ $wpf(document).ready(function ($) {
1170
  type: 'POST',
1171
  data: {
1172
  currentstate,
1173
- action: 'wpforo_mute_mentions'
 
1174
  }
1175
  }).done(function (response) {
1176
  if (response.success) {
@@ -1195,7 +1229,8 @@ $wpf(document).ready(function ($) {
1195
  type: 'POST',
1196
  data: {
1197
  currentstate,
1198
- action: 'wpforo_user_ban'
 
1199
  }
1200
  }).done(function(response){
1201
  if (response.success) {
@@ -1305,7 +1340,8 @@ $wpf(document).ready(function ($) {
1305
  type: 'POST',
1306
  data:{
1307
  toggle_status: toggle_status,
1308
- action: 'wpforo_acp_toggle'
 
1309
  }
1310
  }).always(function(){
1311
  $this.removeClass('wpf-processing');
@@ -1410,7 +1446,8 @@ $wpf(document).ready(function ($) {
1410
  type: 'POST',
1411
  data: {
1412
  image_blob: imageblob,
1413
- action: 'wpforo_profile_cover_upload'
 
1414
  }
1415
  }).done(function(){
1416
  that.closest('.wpforo-profile-head').css('background-image', 'url(\'' + imageblob + '\')');
@@ -1434,7 +1471,8 @@ $wpf(document).ready(function ($) {
1434
  data: {
1435
  userid,
1436
  stat: ( stat ? 1 : 0 ),
1437
- action: 'wpforo_follow_unfollow_user'
 
1438
  }
1439
  }).done(function( r ){
1440
  if( r.success ){
@@ -1471,7 +1509,8 @@ $wpf(document).ready(function ($) {
1471
  type: 'POST',
1472
  data: {
1473
  topicid,
1474
- action: 'wpforo_get_topic_head_more_info'
 
1475
  }
1476
  }).done(function( r ){
1477
  if( r.success ){
@@ -1520,7 +1559,8 @@ $wpf(document).ready(function ($) {
1520
  topicid,
1521
  chunksize,
1522
  offset,
1523
- action: 'wpforo_get_topic_overview_chunk'
 
1524
  }
1525
  }).done(function( r ){
1526
  if( r.success ){
@@ -1552,7 +1592,8 @@ $wpf(document).ready(function ($) {
1552
  type: 'POST',
1553
  data: {
1554
  postid,
1555
- action: 'wpforo_get_overview'
 
1556
  }
1557
  }).done(function( r ){
1558
  if( r.success ){
@@ -1576,11 +1617,13 @@ $wpf(document).ready(function ($) {
1576
  var postid = parseInt( wrap.data( 'postid' ) );
1577
  if( ! isNaN( postid ) ){
1578
  $this.addClass( 'wpf-processing' );
 
1579
  $.ajax( {
1580
  type: 'POST',
1581
  data: {
1582
  postid,
1583
- action: ( $this.hasClass( 'wpforo-bookmark' ) ? 'wpforo_bookmark' : 'wpforo_unbookmark' ),
 
1584
  }
1585
  } ).done( function( r ){
1586
  if( r.success ) $this.replaceWith( r.data['button'] );
@@ -1604,6 +1647,7 @@ $wpf(document).ready(function ($) {
1604
  key,
1605
  boardid,
1606
  action: 'wpforo_unsubscribe',
 
1607
  }
1608
  }).done(function( r ){
1609
  if( r.success ) wrap.remove();
@@ -1625,7 +1669,8 @@ $wpf(document).ready(function ($) {
1625
  type: 'POST',
1626
  data: {
1627
  href,
1628
- 'action': 'wpforo_get_member_template'
 
1629
  }
1630
  }).done(function( r ){
1631
  if( r.success ){
@@ -1661,40 +1706,43 @@ $wpf(document).ready(function ($) {
1661
  let ts_input_old_value = '';
1662
  let ts_request;
1663
  wpforo_wrap.on('input propertychange', '.wpf-topic-create form .wpf-field-name-title input[type="text"]', {}, function(){
1664
- if( ts_request && ts_request.readyState !== 4 ) ts_request.abort();
1665
- setTimeout( () => {
1666
- const $this = $( this );
1667
- let input_value = $this.val().trim();
1668
- if( input_value.length && ts_input_old_value !== input_value ){
1669
- wpforo_load_show();
1670
- ts_request = $.ajax({
1671
- type: 'POST',
1672
- data: {
1673
- title: input_value,
1674
- action: 'wpforo_search_existed_topics',
1675
- },
1676
- }).done(function(r){
1677
- const tlist = document.createElement('div');
1678
- tlist.classList.add( 'wpf-suggested-topics-list' );
1679
- $this.siblings( '.wpf-suggested-topics-list' ).remove();
1680
- $this.after( tlist );
1681
- if( r.success ){
1682
- tlist.innerHTML = '<div class="wpf-suggested-topics-title">' + wpforo_phrase('Discussions that my already have the information you are looking for') + ' &nbsp;<i class="fa-solid fa-angles-down"></i></div>';
1683
- r.data.forEach(function( topic ){
1684
- const node = document.createElement( 'div' );
1685
- node.classList.add( 'wpf-suggested-topic-node' );
1686
- node.innerHTML = `<i class="fa-solid fa-caret-right"></i>&nbsp; <a href="${topic['url']}" target="_blank">${topic['title']}</a>`;
1687
- tlist.append( node );
1688
- });
1689
- }
1690
- }).always(function(){
1691
- wpforo_load_hide();
1692
- });
 
 
1693
 
1694
- ts_input_old_value = input_value;
1695
- }
1696
- }, 700);
1697
- wpforo_load_hide();
 
1698
  });
1699
 
1700
  wpforo_wrap.on('focusout', '.wpf-topic-create form .wpf-field-name-title', {}, function(){
@@ -1713,7 +1761,8 @@ function wpforo_init_phrases(){
1713
  dataType: 'json',
1714
  async: false,
1715
  data: {
1716
- action: 'wpforo_get_phrases'
 
1717
  }
1718
  }).done(function (r) {
1719
  window.wpforo_phrases = r;
@@ -1738,7 +1787,8 @@ function wpforo_topic_tools_tab_load() {
1738
  type: 'POST',
1739
  data: {
1740
  active_tab_id: active_tab_id,
1741
- action: 'wpforo_active_tab_content_ajax'
 
1742
  }
1743
  }).done(function(response){
1744
  if( response ){
16
  type: 'POST',
17
  data: {
18
  postid: postid,
19
+ action: 'wpforo_post_url_fixer',
20
+ _wpfnonce: wpforo['nonces']['wpforo_post_url_fixer'],
21
  }
22
  }).done(function (response) {
23
  if( /^https?:\/\/[^\r\n\t\s\0'"]+$/.test(response) ){
54
  postid,
55
  type,
56
  action: 'wpforo_react',
57
+ _wpfnonce: wpforo['nonces']['wpforo_react'],
58
  }
59
  }).done(function( response ){
60
  if( response.success ){
77
  data: {
78
  postid,
79
  action: 'wpforo_unreact',
80
+ _wpfnonce: wpforo['nonces']['wpforo_unreact'],
81
  }
82
  }).done(function( response ){
83
  if( response.success ){
101
  data: {
102
  postid: postid,
103
  likestatus: 1,
104
+ action: 'wpforo_like_ajax',
105
+ _wpfnonce: wpforo['nonces']['wpforo_like_ajax'],
106
  }
107
  }).done(function (response) {
108
  if (response.success) {
134
  data: {
135
  postid: postid,
136
  likestatus: 0,
137
+ action: 'wpforo_like_ajax',
138
+ _wpfnonce: wpforo['nonces']['wpforo_like_ajax'],
139
  }
140
  }).done(function (response) {
141
  if (response.success) {
173
  itemtype: type,
174
  postid,
175
  votestatus,
176
+ action: 'wpforo_vote_ajax',
177
+ _wpfnonce: wpforo['nonces']['wpforo_vote_ajax'],
178
  }
179
  }).done(function (response) {
180
  if( response.success ) {
207
  itemtype: type,
208
  postid,
209
  votestatus,
210
+ action: 'wpforo_vote_ajax',
211
+ _wpfnonce: wpforo['nonces']['wpforo_vote_ajax'],
212
  }
213
  }).done(function (response) {
214
  if( response.success ) {
239
  data: {
240
  postid: postid,
241
  answerstatus: 0,
242
+ action: 'wpforo_answer_ajax',
243
+ _wpfnonce: wpforo['nonces']['wpforo_answer_ajax'],
244
  }
245
  }).done(function (response) {
246
  if (response.success) {
266
  data: {
267
  postid: postid,
268
  answerstatus: 1,
269
+ action: 'wpforo_answer_ajax',
270
+ _wpfnonce: wpforo['nonces']['wpforo_answer_ajax'],
271
  }
272
  }).done(function (response) {
273
  if (response.success) {
303
  url: wpforo.ajax_url,
304
  data: {
305
  postid: postid,
306
+ action: 'wpforo_quote_ajax',
307
+ _wpfnonce: wpforo['nonces']['wpforo_quote_ajax'],
308
  }
309
  }).done(function (response) {
310
  var phrase = wpforo_phrase('Reply with quote');
351
  data: {
352
  postid: postid,
353
  reportmsg: messagecontent,
354
+ action: 'wpforo_report_ajax',
355
+ _wpfnonce: wpforo['nonces']['wpforo_report_ajax'],
356
  }
357
  }).done(function (response) {
358
  wpforo_dialog_hide();
377
  data: {
378
  topicid: topicid,
379
  status: 'sticky',
380
+ action: 'wpforo_sticky_ajax',
381
+ _wpfnonce: wpforo['nonces']['wpforo_sticky_ajax'],
382
  }
383
  }).done(function (response) {
384
  if (response.success) {
408
  data: {
409
  topicid: topicid,
410
  status: 'unsticky',
411
+ action: 'wpforo_sticky_ajax',
412
+ _wpfnonce: wpforo['nonces']['wpforo_sticky_ajax'],
413
  }
414
  }).done(function (response) {
415
  if (response.success) {
440
  data: {
441
  postid: postid,
442
  status: 'approve',
443
+ action: 'wpforo_approve_ajax',
444
+ _wpfnonce: wpforo['nonces']['wpforo_approve_ajax'],
445
  }
446
  }).done(function (response) {
447
  if (response.success) {
475
  data: {
476
  postid: postid,
477
  status: 'unapprove',
478
+ action: 'wpforo_approve_ajax',
479
+ _wpfnonce: wpforo['nonces']['wpforo_approve_ajax'],
480
  }
481
  }).done(function (response) {
482
  if( response.success ){
511
  data: {
512
  topicid: topicid,
513
  status: 'private',
514
+ action: 'wpforo_private_ajax',
515
+ _wpfnonce: wpforo['nonces']['wpforo_private_ajax'],
516
  }
517
  }).done(function (response) {
518
  if( response.success ){
542
  data: {
543
  topicid: topicid,
544
  status: 'public',
545
+ action: 'wpforo_private_ajax',
546
+ _wpfnonce: wpforo['nonces']['wpforo_private_ajax'],
547
  }
548
  }).done(function (response) {
549
  if( response.success ){
574
  data: {
575
  postid: postid,
576
  status: 'solved',
577
+ action: 'wpforo_solved_ajax',
578
+ _wpfnonce: wpforo['nonces']['wpforo_solved_ajax'],
579
  }
580
  }).done(function (response) {
581
  if( response.success ) {
604
  data: {
605
  postid: postid,
606
  status: 'unsolved',
607
+ action: 'wpforo_solved_ajax',
608
+ _wpfnonce: wpforo['nonces']['wpforo_solved_ajax'],
609
  }
610
  }).done(function (response) {
611
  if( response.success ){
636
  data: {
637
  topicid: topicid,
638
  status: 'close',
639
+ action: 'wpforo_close_ajax',
640
+ _wpfnonce: wpforo['nonces']['wpforo_close_ajax'],
641
  }
642
  }).done(function (response) {
643
  if( response.success ){
673
  data: {
674
  topicid: topicid,
675
  status: 'closed',
676
+ action: 'wpforo_close_ajax',
677
+ _wpfnonce: wpforo['nonces']['wpforo_close_ajax'],
678
  }
679
  }).done(function (response) {
680
  if( response.success ){
725
  url: wpforo.ajax_url,
726
  data: {
727
  postid: parseInt(wrap.data('postid')),
728
+ action: 'wpforo_post_edit',
729
+ _wpfnonce: wpforo['nonces']['wpforo_post_edit'],
730
  }
731
  }).done(function(response){
732
  if( response.success ) show_form(response.data.html, true);
765
  forumid: forumid,
766
  postid: postid,
767
  status: status_value,
768
+ action: 'wpforo_delete_ajax',
769
+ _wpfnonce: wpforo['nonces']['wpforo_delete_ajax'],
770
+ }
771
  }).done(function(response){
772
  if( response.success ){
773
  if(is_topic === -1){
808
  itemid,
809
  type,
810
  status: 'subscribe',
811
+ action: 'wpforo_subscribe_ajax',
812
+ _wpfnonce: wpforo['nonces']['wpforo_subscribe_ajax'],
813
  }
814
  }).done(function (response) {
815
  if( response.success ){
845
  itemid,
846
  type,
847
  status: 'unsubscribe',
848
+ action: 'wpforo_subscribe_ajax',
849
+ _wpfnonce: wpforo['nonces']['wpforo_subscribe_ajax'],
850
  }
851
  }).done(function (response) {
852
  if( response.success ){
875
  type: 'POST',
876
  data: {
877
  forumid: forumid,
878
+ action: 'wpforo_topic_portable_form',
879
+ _wpfnonce: wpforo['nonces']['wpforo_topic_portable_form'],
880
  }
881
  }).done(function (response) {
882
  l.remove();
958
  forumid: forumid,
959
  filter: filter,
960
  paged: paged,
961
+ action: 'wpforo_layout4_loadmore',
962
+ _wpfnonce: wpforo['nonces']['wpforo_layout4_loadmore'],
963
  }
964
  }).done(function (response) {
965
  if (response.success) {
998
  type: 'POST',
999
  data: {
1000
  parentid: parentid,
1001
+ action: 'wpforo_qa_comment_loadrest',
1002
+ _wpfnonce: wpforo['nonces']['wpforo_qa_comment_loadrest'],
1003
  }
1004
  }).done(function (response) {
1005
  if (response.success) {
1033
  textareaid: textareaid,
1034
  postid: postid,
1035
  body: body,
1036
+ action: 'wpforo_post_preview',
1037
+ _wpfnonce: wpforo['nonces']['wpforo_post_preview'],
1038
  }
1039
  }).done(function (response) {
1040
  if( response.success ) {
1070
  textareaid: textareaid,
1071
  postid: postid,
1072
  body: body,
1073
+ action: 'wpforo_save_revision',
1074
+ _wpfnonce: wpforo['nonces']['wpforo_save_revision'],
1075
  }
1076
  }).done(function (response) {
1077
  if( response.success ) {
1113
  data: {
1114
  textareaid: textareaid,
1115
  postid: postid,
1116
+ action: 'wpforo_get_revisions_history',
1117
+ _wpfnonce: wpforo['nonces']['wpforo_get_revisions_history'],
1118
  }
1119
  }).done(function (response) {
1120
  if( response.success ) {
1145
  type: 'POST',
1146
  data: {
1147
  revisionid: revisionid,
1148
+ action: 'wpforo_get_revision',
1149
+ _wpfnonce: wpforo['nonces']['wpforo_get_revision'],
1150
  }
1151
  }).done(function (response) {
1152
  if( response.success ){
1175
  type: 'POST',
1176
  data: {
1177
  revisionid: revisionid,
1178
+ action: 'wpforo_delete_revision',
1179
+ _wpfnonce: wpforo['nonces']['wpforo_delete_revision'],
1180
  }
1181
  }).done(function (response) {
1182
  if( response.success ){
1203
  type: 'POST',
1204
  data: {
1205
  currentstate,
1206
+ action: 'wpforo_mute_mentions',
1207
+ _wpfnonce: wpforo['nonces']['wpforo_mute_mentions'],
1208
  }
1209
  }).done(function (response) {
1210
  if (response.success) {
1229
  type: 'POST',
1230
  data: {
1231
  currentstate,
1232
+ action: 'wpforo_user_ban',
1233
+ _wpfnonce: wpforo['nonces']['wpforo_user_ban'],
1234
  }
1235
  }).done(function(response){
1236
  if (response.success) {
1340
  type: 'POST',
1341
  data:{
1342
  toggle_status: toggle_status,
1343
+ action: 'wpforo_acp_toggle',
1344
+ _wpfnonce: wpforo['nonces']['wpforo_acp_toggle'],
1345
  }
1346
  }).always(function(){
1347
  $this.removeClass('wpf-processing');
1446
  type: 'POST',
1447
  data: {
1448
  image_blob: imageblob,
1449
+ action: 'wpforo_profile_cover_upload',
1450
+ _wpfnonce: wpforo['nonces']['wpforo_profile_cover_upload'],
1451
  }
1452
  }).done(function(){
1453
  that.closest('.wpforo-profile-head').css('background-image', 'url(\'' + imageblob + '\')');
1471
  data: {
1472
  userid,
1473
  stat: ( stat ? 1 : 0 ),
1474
+ action: 'wpforo_follow_unfollow_user',
1475
+ _wpfnonce: wpforo['nonces']['wpforo_follow_unfollow_user'],
1476
  }
1477
  }).done(function( r ){
1478
  if( r.success ){
1509
  type: 'POST',
1510
  data: {
1511
  topicid,
1512
+ action: 'wpforo_get_topic_head_more_info',
1513
+ _wpfnonce: wpforo['nonces']['wpforo_get_topic_head_more_info'],
1514
  }
1515
  }).done(function( r ){
1516
  if( r.success ){
1559
  topicid,
1560
  chunksize,
1561
  offset,
1562
+ action: 'wpforo_get_topic_overview_chunk',
1563
+ _wpfnonce: wpforo['nonces']['wpforo_get_topic_overview_chunk'],
1564
  }
1565
  }).done(function( r ){
1566
  if( r.success ){
1592
  type: 'POST',
1593
  data: {
1594
  postid,
1595
+ action: 'wpforo_get_overview',
1596
+ _wpfnonce: wpforo['nonces']['wpforo_get_overview'],
1597
  }
1598
  }).done(function( r ){
1599
  if( r.success ){
1617
  var postid = parseInt( wrap.data( 'postid' ) );
1618
  if( ! isNaN( postid ) ){
1619
  $this.addClass( 'wpf-processing' );
1620
+ var _action = ( $this.hasClass( 'wpforo-bookmark' ) ? 'wpforo_bookmark' : 'wpforo_unbookmark' );
1621
  $.ajax( {
1622
  type: 'POST',
1623
  data: {
1624
  postid,
1625
+ action: _action,
1626
+ _wpfnonce: wpforo['nonces'][_action],
1627
  }
1628
  } ).done( function( r ){
1629
  if( r.success ) $this.replaceWith( r.data['button'] );
1647
  key,
1648
  boardid,
1649
  action: 'wpforo_unsubscribe',
1650
+ _wpfnonce: wpforo['nonces']['wpforo_unsubscribe'],
1651
  }
1652
  }).done(function( r ){
1653
  if( r.success ) wrap.remove();
1669
  type: 'POST',
1670
  data: {
1671
  href,
1672
+ 'action': 'wpforo_get_member_template',
1673
+ _wpfnonce: wpforo['nonces']['wpforo_get_member_template'],
1674
  }
1675
  }).done(function( r ){
1676
  if( r.success ){
1706
  let ts_input_old_value = '';
1707
  let ts_request;
1708
  wpforo_wrap.on('input propertychange', '.wpf-topic-create form .wpf-field-name-title input[type="text"]', {}, function(){
1709
+ if( $( 'input[name=wpfaction][value=topic_add]', $(this).closest( 'form' ) ).length ){
1710
+ if( ts_request && ts_request.readyState !== 4 ) ts_request.abort();
1711
+ setTimeout( () => {
1712
+ const $this = $( this );
1713
+ let input_value = $this.val().trim();
1714
+ if( input_value.length && ts_input_old_value !== input_value ){
1715
+ wpforo_load_show();
1716
+ ts_request = $.ajax({
1717
+ type: 'POST',
1718
+ data: {
1719
+ title: input_value,
1720
+ action: 'wpforo_search_existed_topics',
1721
+ _wpfnonce: wpforo['nonces']['wpforo_search_existed_topics'],
1722
+ },
1723
+ }).done(function(r){
1724
+ const tlist = document.createElement('div');
1725
+ tlist.classList.add( 'wpf-suggested-topics-list' );
1726
+ $this.siblings( '.wpf-suggested-topics-list' ).remove();
1727
+ $this.after( tlist );
1728
+ if( r.success ){
1729
+ tlist.innerHTML = '<div class="wpf-suggested-topics-title">' + wpforo_phrase('Discussions that my already have the information you are looking for') + ' &nbsp;<i class="fa-solid fa-angles-down"></i></div>';
1730
+ r.data.forEach(function( topic ){
1731
+ const node = document.createElement( 'div' );
1732
+ node.classList.add( 'wpf-suggested-topic-node' );
1733
+ node.innerHTML = `<i class="fa-solid fa-caret-right"></i>&nbsp; <a href="${topic['url']}" target="_blank">${topic['title']}</a>`;
1734
+ tlist.append( node );
1735
+ });
1736
+ }
1737
+ }).always(function(){
1738
+ wpforo_load_hide();
1739
+ });
1740
 
1741
+ ts_input_old_value = input_value;
1742
+ }
1743
+ }, 700);
1744
+ wpforo_load_hide();
1745
+ }
1746
  });
1747
 
1748
  wpforo_wrap.on('focusout', '.wpf-topic-create form .wpf-field-name-title', {}, function(){
1761
  dataType: 'json',
1762
  async: false,
1763
  data: {
1764
+ action: 'wpforo_get_phrases',
1765
+ _wpfnonce: wpforo['nonces']['wpforo_get_phrases'],
1766
  }
1767
  }).done(function (r) {
1768
  window.wpforo_phrases = r;
1787
  type: 'POST',
1788
  data: {
1789
  active_tab_id: active_tab_id,
1790
+ action: 'wpforo_active_tab_content_ajax',
1791
+ _wpfnonce: wpforo['nonces']['wpforo_active_tab_content_ajax'],
1792
  }
1793
  }).done(function(response){
1794
  if( response ){
classes/Actions.php CHANGED
@@ -357,6 +357,7 @@ class Actions {
357
  * Open/Close Frontend Admin CPanel
358
  */
359
  public function acp_toggle() {
 
360
  $toggle_status = wpfval( $_POST, 'toggle_status' );
361
  if( in_array( $toggle_status, [ 'open', 'close' ] ) ) {
362
  update_user_meta( WPF()->current_userid, 'wpf-acp-toggle', $toggle_status );
@@ -394,8 +395,9 @@ class Actions {
394
  }
395
 
396
  public function profile_cover_upload() {
 
397
  $r = false;
398
- if( ($image_blob = wpfval( $_POST, 'image_blob' )) && WPF()->current_object['user'] ){
399
  if( $file_content = file_get_contents($image_blob) ){
400
  $file_basename = WPF()->current_object['user']['user_login'] . '_' . WPF()->current_object['user']['userid'] . '.jpg';
401
  $file_dir = WPF()->folders['covers']['dir'] . DIRECTORY_SEPARATOR . $file_basename;
@@ -433,6 +435,7 @@ class Actions {
433
  }
434
 
435
  public function get_topic_head_more_info() {
 
436
  if( $topicid = wpforo_bigintval( wpfval( $_POST, 'topicid' ) ) ){
437
  wp_send_json_success( [ 'html' => wpforo_topic_active_participants( $topicid ) . wpforo_topic_overview( $topicid ) ] );
438
  }
@@ -441,6 +444,7 @@ class Actions {
441
  }
442
 
443
  public function get_topic_overview_chunk() {
 
444
  if( $topicid = wpforo_bigintval( wpfval( $_POST, 'topicid' ) ) ){
445
  if( !( $chunksize = (int) wpfval( $_POST, 'chunksize' ) ) ) $chunksize = 5;
446
  $offset = (int) wpfval( $_POST, 'offset' );
@@ -452,6 +456,7 @@ class Actions {
452
  }
453
 
454
  public function get_overview() {
 
455
  if( $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) ) ){
456
  if( $post = wpforo_post( $postid ) ){
457
  wp_send_json_success(
@@ -798,15 +803,16 @@ class Actions {
798
  check_admin_referer( 'wpforo-board-add' );
799
  if( $board = (array) wpfval( $_POST, 'board' ) ) {
800
  if( ! ( $board['locale'] = trim( $board['locale'] ) ) ) $board['locale'] = 'en_US';
 
801
  if( $boardid = WPF()->board->add( $board ) ) {
802
  // Handle translation installation.
803
- if( (int) $board['status'] && $board['locale'] && current_user_can( 'install_languages' ) ) {
804
  require_once ABSPATH . 'wp-admin/includes/file.php';
805
  require_once ABSPATH . 'wp-admin/includes/translation-install.php';
806
  if( wp_can_install_language_pack() ) wp_download_language_pack( $board['locale'] );
807
  }
808
 
809
- if( ( $board = WPF()->board->_get_board( $boardid ) ) && $board['status'] ) {
810
  wp_safe_redirect( admin_url( 'admin.php?page=wpforo-' . $boardid . '-settings' ) );
811
  exit();
812
  }
@@ -824,9 +830,10 @@ class Actions {
824
  check_admin_referer( 'wpforo-board-edit' );
825
  if( $board = (array) wpfval( $_POST, 'board' ) ) {
826
  $boardid = (int) wpfval( $board, 'boardid' );
 
827
  if( ! ( $board['locale'] = trim( $board['locale'] ) ) ) $board['locale'] = 'en_US';
828
  if( WPF()->board->edit( $board, $boardid ) ) {
829
- if( (int) $board['status'] && ! is_wpforo_multiboard() ){
830
  wp_update_post(
831
  [
832
  'ID' => $board['pageid'],
@@ -835,7 +842,7 @@ class Actions {
835
  );
836
  }
837
  // Handle translation installation.
838
- if( (int) $board['status'] && $board['locale'] && current_user_can( 'install_languages' ) ) {
839
  require_once ABSPATH . 'wp-admin/includes/file.php';
840
  require_once ABSPATH . 'wp-admin/includes/translation-install.php';
841
  if( wp_can_install_language_pack() ) wp_download_language_pack( $board['locale'] );
@@ -866,12 +873,6 @@ class Actions {
866
  public function synch_user_profiles() {
867
  check_admin_referer( 'wpforo_synch_user_profiles' );
868
 
869
- if( ! current_user_can( 'administrator' ) ) {
870
- WPF()->notice->add( 'Permission denied', 'error' );
871
- wp_safe_redirect( admin_url() );
872
- exit();
873
- }
874
-
875
  if( $this->can_do() ) {
876
  wpforo_set_max_execution_time();
877
  wp_raise_memory_limit();
@@ -1706,25 +1707,27 @@ class Actions {
1706
  }
1707
 
1708
  public function user_ban_ajax() {
1709
- $userid = WPF()->current_object['user']['userid'];
1710
- $currentstate = (int) wpfval( $_POST, 'currentstate' );
1711
- if( $currentstate ){
1712
- $r = WPF()->member->unban( $userid );
1713
- }else{
1714
- $r = WPF()->member->ban( $userid );
1715
- }
 
1716
 
1717
- if( $r ){
1718
- wp_send_json_success( [
1719
- 'currentstate' => (int) !$currentstate,
1720
- 'notice' => WPF()->notice->get_notices(),
1721
- ] );
1722
- }else{
1723
- wp_send_json_error( [ 'notice' => WPF()->notice->get_notices() ] );
1724
- }
1725
  }
1726
 
1727
  public function get_member_template() {
 
1728
  $href = wpfval( $_POST, 'href' );
1729
  WPF()->init_current_url( $href );
1730
  WPF()->init_current_object();
@@ -1739,6 +1742,7 @@ class Actions {
1739
  }
1740
 
1741
  public function search_existed_topics() {
 
1742
  $title = trim( wpfval( $_POST, 'title' ) );
1743
  $topicids = WPF()->topic->search( $title, 'title' );
1744
  if( $topicids ){
357
  * Open/Close Frontend Admin CPanel
358
  */
359
  public function acp_toggle() {
360
+ wpforo_verify_nonce( 'wpforo_acp_toggle' );
361
  $toggle_status = wpfval( $_POST, 'toggle_status' );
362
  if( in_array( $toggle_status, [ 'open', 'close' ] ) ) {
363
  update_user_meta( WPF()->current_userid, 'wpf-acp-toggle', $toggle_status );
395
  }
396
 
397
  public function profile_cover_upload() {
398
+ wpforo_verify_nonce( 'wpforo_profile_cover_upload' );
399
  $r = false;
400
+ if( WPF()->current_object['user'] && WPF()->usergroup->can( 'upc' ) && WPF()->perm->user_can_edit_account( WPF()->current_object['user'] ) && ($image_blob = wpfval( $_POST, 'image_blob' )) ){
401
  if( $file_content = file_get_contents($image_blob) ){
402
  $file_basename = WPF()->current_object['user']['user_login'] . '_' . WPF()->current_object['user']['userid'] . '.jpg';
403
  $file_dir = WPF()->folders['covers']['dir'] . DIRECTORY_SEPARATOR . $file_basename;
435
  }
436
 
437
  public function get_topic_head_more_info() {
438
+ wpforo_verify_nonce( 'wpforo_get_topic_head_more_info' );
439
  if( $topicid = wpforo_bigintval( wpfval( $_POST, 'topicid' ) ) ){
440
  wp_send_json_success( [ 'html' => wpforo_topic_active_participants( $topicid ) . wpforo_topic_overview( $topicid ) ] );
441
  }
444
  }
445
 
446
  public function get_topic_overview_chunk() {
447
+ wpforo_verify_nonce( 'wpforo_get_topic_overview_chunk' );
448
  if( $topicid = wpforo_bigintval( wpfval( $_POST, 'topicid' ) ) ){
449
  if( !( $chunksize = (int) wpfval( $_POST, 'chunksize' ) ) ) $chunksize = 5;
450
  $offset = (int) wpfval( $_POST, 'offset' );
456
  }
457
 
458
  public function get_overview() {
459
+ wpforo_verify_nonce( 'wpforo_get_overview' );
460
  if( $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) ) ){
461
  if( $post = wpforo_post( $postid ) ){
462
  wp_send_json_success(
803
  check_admin_referer( 'wpforo-board-add' );
804
  if( $board = (array) wpfval( $_POST, 'board' ) ) {
805
  if( ! ( $board['locale'] = trim( $board['locale'] ) ) ) $board['locale'] = 'en_US';
806
+ $status = wpfkey( $board, 'status' ) ? (int) wpfval( $board, 'status' ) : 1;
807
  if( $boardid = WPF()->board->add( $board ) ) {
808
  // Handle translation installation.
809
+ if( $status && $board['locale'] && current_user_can( 'install_languages' ) ) {
810
  require_once ABSPATH . 'wp-admin/includes/file.php';
811
  require_once ABSPATH . 'wp-admin/includes/translation-install.php';
812
  if( wp_can_install_language_pack() ) wp_download_language_pack( $board['locale'] );
813
  }
814
 
815
+ if( ( $board = WPF()->board->_get_board( $boardid ) ) && $status ) {
816
  wp_safe_redirect( admin_url( 'admin.php?page=wpforo-' . $boardid . '-settings' ) );
817
  exit();
818
  }
830
  check_admin_referer( 'wpforo-board-edit' );
831
  if( $board = (array) wpfval( $_POST, 'board' ) ) {
832
  $boardid = (int) wpfval( $board, 'boardid' );
833
+ $status = wpfkey( $board, 'status' ) ? (int) wpfval( $board, 'status' ) : 1;
834
  if( ! ( $board['locale'] = trim( $board['locale'] ) ) ) $board['locale'] = 'en_US';
835
  if( WPF()->board->edit( $board, $boardid ) ) {
836
+ if( $status && ! is_wpforo_multiboard() ){
837
  wp_update_post(
838
  [
839
  'ID' => $board['pageid'],
842
  );
843
  }
844
  // Handle translation installation.
845
+ if( $status && $board['locale'] && current_user_can( 'install_languages' ) ) {
846
  require_once ABSPATH . 'wp-admin/includes/file.php';
847
  require_once ABSPATH . 'wp-admin/includes/translation-install.php';
848
  if( wp_can_install_language_pack() ) wp_download_language_pack( $board['locale'] );
873
  public function synch_user_profiles() {
874
  check_admin_referer( 'wpforo_synch_user_profiles' );
875
 
 
 
 
 
 
 
876
  if( $this->can_do() ) {
877
  wpforo_set_max_execution_time();
878
  wp_raise_memory_limit();
1707
  }
1708
 
1709
  public function user_ban_ajax() {
1710
+ wpforo_verify_nonce( 'wpforo_user_ban' );
1711
+ $userid = WPF()->current_object['user']['userid'];
1712
+ $currentstate = (int) wpfval( $_POST, 'currentstate' );
1713
+ if( $currentstate ){
1714
+ $r = WPF()->member->unban( $userid );
1715
+ }else{
1716
+ $r = WPF()->member->ban( $userid );
1717
+ }
1718
 
1719
+ if( $r ){
1720
+ wp_send_json_success( [
1721
+ 'currentstate' => (int) !$currentstate,
1722
+ 'notice' => WPF()->notice->get_notices(),
1723
+ ] );
1724
+ }else{
1725
+ wp_send_json_error( [ 'notice' => WPF()->notice->get_notices() ] );
1726
+ }
1727
  }
1728
 
1729
  public function get_member_template() {
1730
+ wpforo_verify_nonce( 'wpforo_get_member_template' );
1731
  $href = wpfval( $_POST, 'href' );
1732
  WPF()->init_current_url( $href );
1733
  WPF()->init_current_object();
1742
  }
1743
 
1744
  public function search_existed_topics() {
1745
+ wpforo_verify_nonce( 'wpforo_search_existed_topics' );
1746
  $title = trim( wpfval( $_POST, 'title' ) );
1747
  $topicids = WPF()->topic->search( $title, 'title' );
1748
  if( $topicids ){
classes/Cache.php CHANGED
@@ -368,6 +368,7 @@ class Cache {
368
  public function cache_plugins(){
369
  $board_paths = [];
370
  $cache_plugins = [];
 
371
  if( is_wpforo_multiboard() ){
372
  $boards = WPF()->board->get_boards();
373
  if(!empty($boards)){
@@ -378,13 +379,18 @@ class Cache {
378
  } else {
379
  $board_paths[] = '/' . WPF()->board->get_current( 'slug' ) . '/';
380
  }
 
 
 
 
 
381
 
382
  if (function_exists("wpsc_init")) {
383
  //WP Super Cache
384
  $cache_plugins['WPSuper']['name'] = 'WP Super Cache';
385
  $cache_plugins['WPSuper']['steps'][] = __('Please navigate in Dashboard to Settings > WP Super Cache', 'wpforo');
386
  $cache_plugins['WPSuper']['steps'][] = __('Go to Advanced Tab, scroll down to "Rejected URL Strings" option', 'wpforo');
387
- $cache_plugins['WPSuper']['steps'][] = __('Insert the URL path(s) of your forum page(s) one per line in the option textarea:', 'wpforo') . ' <code>' . implode('</code> ' . __('and', 'wpforo') . ' <code>', $board_paths) . '</code>';
388
  $cache_plugins['WPSuper']['steps'][] = __('Save it and delete all caches.', 'wpforo');
389
  }
390
  if (defined("LSCWP_V")) {
@@ -392,7 +398,7 @@ class Cache {
392
  $cache_plugins['LiteSpeed']['name'] = 'LiteSpeed Cache';
393
  $cache_plugins['LiteSpeed']['steps'][] = __('Please navigate in Dashboard to LiteSpeed Cache > Cache admin page', 'wpforo');
394
  $cache_plugins['LiteSpeed']['steps'][] = __('Go to Exclude Tab, find the "Do Not Cache URIs" option', 'wpforo');
395
- $cache_plugins['LiteSpeed']['steps'][] = __('Insert the URL path(s) of your forum page(s) one per line in the option textarea:', 'wpforo') . ' <code>' . implode('</code> ' . __('and', 'wpforo') . ' <code>', $board_paths) . '</code>';
396
  $cache_plugins['LiteSpeed']['steps'][] = __('Save it and delete all caches.', 'wpforo');
397
  }
398
  if (function_exists("rocket_clean_post")) {
@@ -400,7 +406,7 @@ class Cache {
400
  $cache_plugins['WPRocket']['name'] = 'WP Rocket Cache';
401
  $cache_plugins['WPRocket']['steps'][] = __('Please navigate in Dashboard to WP Rocket > Advanced Rules Tab', 'wpforo');
402
  $cache_plugins['WPRocket']['steps'][] = __('Scroll down to "Never cache (URLs)" option', 'wpforo');
403
- $cache_plugins['WPRocket']['steps'][] = __('Insert the URL path(s) of your forum page(s) one per line with wildcard (.*) in the option textarea:', 'wpforo') . ' <code>' . implode('</code> ' . __('and', 'wpforo') . ' <code>', array_map( function ( $value ){ return $value . '(.*)'; }, $board_paths)) . '</code>';
404
  $cache_plugins['WPRocket']['steps'][] = __('Save it and delete all caches.', 'wpforo');
405
  }
406
  if (function_exists("wpfc_clear_post_cache_by_id")) {
@@ -408,7 +414,7 @@ class Cache {
408
  $cache_plugins['WPFastest']['name'] = 'WP Fastest Cache';
409
  $cache_plugins['WPFastest']['steps'][] = __('Please navigate in Dashboard to WP Fastest Cache > Exclude Tab', 'wpforo');
410
  $cache_plugins['WPFastest']['steps'][] = __('In the "Exclude Pages" section click the [Add New Rule] button', 'wpforo');
411
- $cache_plugins['WPFastest']['steps'][] = __('Select [Start with] option in the drop-down menu and insert the URL path(s) of your forum page(s) one per rule in the next field:', 'wpforo') . ' <code>' . implode('</code> ' . __('and', 'wpforo') . ' <code>', $board_paths) . '</code>';
412
  $cache_plugins['WPFastest']['steps'][] = __('If you have more than one forum pages (boards) you should create separate rules for each forum board.', 'wpforo');
413
  $cache_plugins['WPFastest']['steps'][] = __('Save rules and delete all caches.', 'wpforo');
414
  }
@@ -417,7 +423,7 @@ class Cache {
417
  $cache_plugins['W3Total']['name'] = 'W3 Total Cache';
418
  $cache_plugins['W3Total']['steps'][] = __('Please navigate in Dashboard to Performance > Page Cache admin page', 'wpforo');
419
  $cache_plugins['W3Total']['steps'][] = __('Go to Advanced Tab, scroll down to Rejected URL Strings option', 'wpforo');
420
- $cache_plugins['W3Total']['steps'][] = __('Scroll to Advanced section and insert the URL path(s) of your forum page(s) one per line in the "Never cache the following pages" textarea:', 'wpforo') . ' <code>' . implode('</code> ' . __('and', 'wpforo') . ' <code>', $board_paths) . '</code>';
421
  $cache_plugins['W3Total']['steps'][] = __('Save it and delete all caches.', 'wpforo');
422
  }
423
  if (is_callable(["WPO_Page_Cache", "delete_single_post_cache"])) {
@@ -425,7 +431,7 @@ class Cache {
425
  $cache_plugins['WPOptimize']['name'] = 'WP-Optimize Cache';
426
  $cache_plugins['WPOptimize']['steps'][] = __('Please navigate in Dashboard to WP-Optimize > Cache admin page', 'wpforo');
427
  $cache_plugins['WPOptimize']['steps'][] = __('Go to Advanced Settings Tab, find the "URLs to exclude from caching" option', 'wpforo');
428
- $cache_plugins['WPOptimize']['steps'][] = __('Insert the URL path(s) of your forum page(s) one per line with wildcard [*] in the option textarea:', 'wpforo') . ' <code>' . implode('</code> ' . __('and', 'wpforo') . ' <code>', array_map( function ( $value ){ return $value . '*'; }, $board_paths)) . '</code>';
429
  $cache_plugins['WPOptimize']['steps'][] = __('Save it and delete all caches.', 'wpforo');
430
  }
431
  if (class_exists("\SiteGround_Optimizer\Supercacher\Supercacher")) {
@@ -433,7 +439,7 @@ class Cache {
433
  $cache_plugins['SiteGround']['name'] = 'SiteGround Optimizer';
434
  $cache_plugins['SiteGround']['steps'][] = __('Please navigate in Dashboard to SG Optimizer > Caching admin page', 'wpforo');
435
  $cache_plugins['SiteGround']['steps'][] = __('Scroll to Exclude URLs from Caching section and click the "pencil" button, enable it, and click the button again', 'wpforo');
436
- $cache_plugins['SiteGround']['steps'][] = __('Insert the URL path(s) of your forum page(s) with wildcard [*] in the pop-up filed:', 'wpforo') . ' <code>' . implode('</code> ' . __('and', 'wpforo') . ' <code>', array_map( function ( $value ){ return $value . '*'; }, $board_paths)) . '</code>';
437
  $cache_plugins['SiteGround']['steps'][] = __('Save it and delete all caches.', 'wpforo');
438
  }
439
  return $cache_plugins;
368
  public function cache_plugins(){
369
  $board_paths = [];
370
  $cache_plugins = [];
371
+
372
  if( is_wpforo_multiboard() ){
373
  $boards = WPF()->board->get_boards();
374
  if(!empty($boards)){
379
  } else {
380
  $board_paths[] = '/' . WPF()->board->get_current( 'slug' ) . '/';
381
  }
382
+
383
+ $board_paths[] = '/' . wpforo_settings_get_slug('member') . '/';
384
+ $board_paths[] = '/' . wpforo_settings_get_slug('register') . '/';
385
+ $board_paths[] = '/' . wpforo_settings_get_slug('login') . '/';
386
+ $board_paths[] = '/' . wpforo_settings_get_slug('lostpassword') . '/';
387
 
388
  if (function_exists("wpsc_init")) {
389
  //WP Super Cache
390
  $cache_plugins['WPSuper']['name'] = 'WP Super Cache';
391
  $cache_plugins['WPSuper']['steps'][] = __('Please navigate in Dashboard to Settings > WP Super Cache', 'wpforo');
392
  $cache_plugins['WPSuper']['steps'][] = __('Go to Advanced Tab, scroll down to "Rejected URL Strings" option', 'wpforo');
393
+ $cache_plugins['WPSuper']['steps'][] = __('Insert the URL path(s) of your forum page(s) one per line in the option textarea:', 'wpforo') . ' <br><code>' . implode('</code> <br> <code>', $board_paths) . '</code>';
394
  $cache_plugins['WPSuper']['steps'][] = __('Save it and delete all caches.', 'wpforo');
395
  }
396
  if (defined("LSCWP_V")) {
398
  $cache_plugins['LiteSpeed']['name'] = 'LiteSpeed Cache';
399
  $cache_plugins['LiteSpeed']['steps'][] = __('Please navigate in Dashboard to LiteSpeed Cache > Cache admin page', 'wpforo');
400
  $cache_plugins['LiteSpeed']['steps'][] = __('Go to Exclude Tab, find the "Do Not Cache URIs" option', 'wpforo');
401
+ $cache_plugins['LiteSpeed']['steps'][] = __('Insert the URL path(s) of your forum page(s) one per line in the option textarea:', 'wpforo') . ' <br><code>' . implode('</code> <br> <code>', $board_paths) . '</code>';
402
  $cache_plugins['LiteSpeed']['steps'][] = __('Save it and delete all caches.', 'wpforo');
403
  }
404
  if (function_exists("rocket_clean_post")) {
406
  $cache_plugins['WPRocket']['name'] = 'WP Rocket Cache';
407
  $cache_plugins['WPRocket']['steps'][] = __('Please navigate in Dashboard to WP Rocket > Advanced Rules Tab', 'wpforo');
408
  $cache_plugins['WPRocket']['steps'][] = __('Scroll down to "Never cache (URLs)" option', 'wpforo');
409
+ $cache_plugins['WPRocket']['steps'][] = __('Insert the URL path(s) of your forum page(s) one per line with wildcard (.*) in the option textarea:', 'wpforo') . ' <br><code>' . implode('</code> <br> <code>', array_map( function ( $value ){ return $value . '(.*)'; }, $board_paths)) . '</code>';
410
  $cache_plugins['WPRocket']['steps'][] = __('Save it and delete all caches.', 'wpforo');
411
  }
412
  if (function_exists("wpfc_clear_post_cache_by_id")) {
414
  $cache_plugins['WPFastest']['name'] = 'WP Fastest Cache';
415
  $cache_plugins['WPFastest']['steps'][] = __('Please navigate in Dashboard to WP Fastest Cache > Exclude Tab', 'wpforo');
416
  $cache_plugins['WPFastest']['steps'][] = __('In the "Exclude Pages" section click the [Add New Rule] button', 'wpforo');
417
+ $cache_plugins['WPFastest']['steps'][] = __('Select [Start with] option in the drop-down menu and insert the URL path(s) of your forum page(s) one per rule in the next field:', 'wpforo') . ' <br><code>' . implode('</code> <br> <code>', $board_paths) . '</code>';
418
  $cache_plugins['WPFastest']['steps'][] = __('If you have more than one forum pages (boards) you should create separate rules for each forum board.', 'wpforo');
419
  $cache_plugins['WPFastest']['steps'][] = __('Save rules and delete all caches.', 'wpforo');
420
  }
423
  $cache_plugins['W3Total']['name'] = 'W3 Total Cache';
424
  $cache_plugins['W3Total']['steps'][] = __('Please navigate in Dashboard to Performance > Page Cache admin page', 'wpforo');
425
  $cache_plugins['W3Total']['steps'][] = __('Go to Advanced Tab, scroll down to Rejected URL Strings option', 'wpforo');
426
+ $cache_plugins['W3Total']['steps'][] = __('Scroll to Advanced section and insert the URL path(s) of your forum page(s) one per line in the "Never cache the following pages" textarea:', 'wpforo') . ' <br><code>' . implode('</code> <br> <code>', $board_paths) . '</code>';
427
  $cache_plugins['W3Total']['steps'][] = __('Save it and delete all caches.', 'wpforo');
428
  }
429
  if (is_callable(["WPO_Page_Cache", "delete_single_post_cache"])) {
431
  $cache_plugins['WPOptimize']['name'] = 'WP-Optimize Cache';
432
  $cache_plugins['WPOptimize']['steps'][] = __('Please navigate in Dashboard to WP-Optimize > Cache admin page', 'wpforo');
433
  $cache_plugins['WPOptimize']['steps'][] = __('Go to Advanced Settings Tab, find the "URLs to exclude from caching" option', 'wpforo');
434
+ $cache_plugins['WPOptimize']['steps'][] = __('Insert the URL path(s) of your forum page(s) one per line with wildcard [*] in the option textarea:', 'wpforo') . ' <br><code>' . implode('</code> <br> <code>', array_map( function ( $value ){ return $value . '*'; }, $board_paths)) . '</code>';
435
  $cache_plugins['WPOptimize']['steps'][] = __('Save it and delete all caches.', 'wpforo');
436
  }
437
  if (class_exists("\SiteGround_Optimizer\Supercacher\Supercacher")) {
439
  $cache_plugins['SiteGround']['name'] = 'SiteGround Optimizer';
440
  $cache_plugins['SiteGround']['steps'][] = __('Please navigate in Dashboard to SG Optimizer > Caching admin page', 'wpforo');
441
  $cache_plugins['SiteGround']['steps'][] = __('Scroll to Exclude URLs from Caching section and click the "pencil" button, enable it, and click the button again', 'wpforo');
442
+ $cache_plugins['SiteGround']['steps'][] = __('Insert the URL path(s) of your forum page(s) with wildcard [*] in the pop-up filed:', 'wpforo') . ' <br><code>' . implode('</code> <br> <code>', array_map( function ( $value ){ return $value . '*'; }, $board_paths)) . '</code>';
443
  $cache_plugins['SiteGround']['steps'][] = __('Save it and delete all caches.', 'wpforo');
444
  }
445
  return $cache_plugins;
classes/Members.php CHANGED
@@ -185,6 +185,8 @@ class Members {
185
  $member['fields'] = (array) ( wpforo_is_json( $member['fields'] ) ? json_decode( $member['fields'], true ) : $member['fields'] );
186
  $member = wpforo_array_ordered_intersect_key( $member, $this->default->member );
187
 
 
 
188
  return array_merge( $member['fields'], $member );
189
  }
190
 
@@ -1012,14 +1014,15 @@ class Members {
1012
  }
1013
 
1014
  public function change_password( $old_passw, $new_passw, $userid ) {
1015
- if( ! $userid = wpforo_bigintval( $userid ) ) {
1016
  WPF()->notice->clear();
1017
  WPF()->notice->add( 'Userid is wrong', 'error' );
1018
 
1019
  return false;
1020
  }
1021
 
1022
- $user = $this->get_member( $userid );
 
1023
  if( ! apply_filters( 'wpforo_change_password_validate', true, $old_passw, $new_passw, $user ) ) return false;
1024
 
1025
  if( wp_check_password( $old_passw, $user['user_pass'], $userid ) ) {
@@ -3185,12 +3188,18 @@ class Members {
3185
  }
3186
 
3187
  public function after_register_new_user( $userid ) {
3188
- $default_password_nag = (bool) (int) trim( get_user_meta( $userid, 'default_password_nag', true ) );
3189
- if( $default_password_nag ) $this->update_profile_fields( $userid, [ 'status' => 'inactive' ], false );
 
 
 
 
3190
  }
3191
 
3192
  public function after_password_reset( $user ) {
3193
- $this->update_profile_fields( $user->ID, [ 'status' => 'active', 'is_email_confirmed' => 1 ], false );
 
 
3194
  $this->reset( $user->ID );
3195
  }
3196
 
185
  $member['fields'] = (array) ( wpforo_is_json( $member['fields'] ) ? json_decode( $member['fields'], true ) : $member['fields'] );
186
  $member = wpforo_array_ordered_intersect_key( $member, $this->default->member );
187
 
188
+ if( ! $member['userid'] ) $member['timezone'] = '';
189
+
190
  return array_merge( $member['fields'], $member );
191
  }
192
 
1014
  }
1015
 
1016
  public function change_password( $old_passw, $new_passw, $userid ) {
1017
+ if( ! ($userid = wpforo_bigintval( $userid )) || ! ($user = $this->get_member( $userid )) ) {
1018
  WPF()->notice->clear();
1019
  WPF()->notice->add( 'Userid is wrong', 'error' );
1020
 
1021
  return false;
1022
  }
1023
 
1024
+ $user['user_pass'] = ( $userdata = get_userdata( $userid ) ) ? $userdata->user_pass : '';
1025
+
1026
  if( ! apply_filters( 'wpforo_change_password_validate', true, $old_passw, $new_passw, $user ) ) return false;
1027
 
1028
  if( wp_check_password( $old_passw, $user['user_pass'], $userid ) ) {
3188
  }
3189
 
3190
  public function after_register_new_user( $userid ) {
3191
+ if(
3192
+ wpforo_setting( 'authorization', 'manually_approval' )
3193
+ || (int) trim( get_user_meta( $userid, 'default_password_nag', true ) )
3194
+ ){
3195
+ $this->update_profile_fields( $userid, [ 'status' => 'inactive' ], false );
3196
+ }
3197
  }
3198
 
3199
  public function after_password_reset( $user ) {
3200
+ $data = [ 'status' => 'active', 'is_email_confirmed' => 1 ];
3201
+ if( wpforo_setting( 'authorization', 'manually_approval' ) ) $data['status'] = 'inactive';
3202
+ $this->update_profile_fields( $user->ID, $data, false );
3203
  $this->reset( $user->ID );
3204
  }
3205
 
classes/Phrases.php CHANGED
@@ -387,6 +387,7 @@ class Phrases {
387
  }
388
 
389
  public function ajax_get_phrases() {
 
390
  echo json_encode( $this->__phrases );
391
  exit();
392
  }
387
  }
388
 
389
  public function ajax_get_phrases() {
390
+ wpforo_verify_nonce( 'wpforo_get_phrases' );
391
  echo json_encode( $this->__phrases );
392
  exit();
393
  }
classes/Settings.php CHANGED
@@ -3840,7 +3840,7 @@ class Settings {
3840
  'new_user_max_posts' => 3,
3841
  'unapprove_post_if_user_is_new' => false,
3842
  'min_number_posts_to_attach' => 0,
3843
- 'min_number_posts_to_edit_account' => 1,
3844
  'min_number_posts_to_link' => 0,
3845
  'limited_file_ext' => [ 'pdf', 'doc', 'docx', 'txt', 'htm', 'html', 'rtf', 'xml', 'xls', 'xlsx', 'zip', 'rar', 'tar', 'gz', 'bzip', '7z' ],
3846
  'spam_file_scanner' => true,
3840
  'new_user_max_posts' => 3,
3841
  'unapprove_post_if_user_is_new' => false,
3842
  'min_number_posts_to_attach' => 0,
3843
+ 'min_number_posts_to_edit_account' => 3,
3844
  'min_number_posts_to_link' => 0,
3845
  'limited_file_ext' => [ 'pdf', 'doc', 'docx', 'txt', 'htm', 'html', 'rtf', 'xml', 'xls', 'xlsx', 'zip', 'rar', 'tar', 'gz', 'bzip', '7z' ],
3846
  'spam_file_scanner' => true,
classes/Template.php CHANGED
@@ -292,7 +292,7 @@ class Template {
292
  }else{
293
  printf(
294
  '<p class="wpf-p-error">%1$s</p>',
295
- sprintf( wpforo_phrase( 'You should have %d or more approved posts to be able edit your profile information', false ), wpforo_setting( 'antispam', 'min_number_posts_to_edit_account' ) )
296
  );
297
  }
298
  },
@@ -320,7 +320,7 @@ class Template {
320
  'is_default' => 1,
321
  'can' => 'l',
322
  'add_in_member_menu' => 1,
323
- 'add_in_member_buttons' => 0,
324
  'callback_for_page' => function(){
325
  require_once wpftpl( 'profile-favored.php' );
326
  },
@@ -1813,21 +1813,21 @@ class Template {
1813
  <meta itemprop="position" content="1">
1814
  </div>
1815
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Search' ) ?></span></div>
1816
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
1817
  <?php break;
1818
  case 'signup': ?>
1819
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1820
  <meta itemprop="position" content="1">
1821
  </div>
1822
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Register' ) ?></span></div>
1823
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
1824
  <?php break;
1825
  case 'signin': ?>
1826
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1827
  <meta itemprop="position" content="1">
1828
  </div>
1829
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Login' ) ?></span></div>
1830
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
1831
  <?php break;
1832
  case 'members': ?>
1833
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
@@ -1841,7 +1841,7 @@ class Template {
1841
  <?php else : ?>
1842
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Members' ) ?></span></div>
1843
  <?php endif ?>
1844
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
1845
  <?php break;
1846
  case 'recent': ?>
1847
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
@@ -1854,14 +1854,14 @@ class Template {
1854
  <?php else: ?>
1855
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Recent Posts' ) ?></span></div>
1856
  <?php endif; ?>
1857
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
1858
  <?php break;
1859
  case 'tags': ?>
1860
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1861
  <meta itemprop="position" content="1">
1862
  </div>
1863
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Tags' ) ?></span></div>
1864
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
1865
  <?php break;
1866
  case 'profile': ?>
1867
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
@@ -1873,7 +1873,7 @@ class Template {
1873
  <?php if( $current_object['user'] ) : ?>
1874
  <div class="wpf-item-element active"><span><?php @wpforo_text( wpforo_user_dname( $current_object['user'] ), $lenght ) ?></span></div>
1875
  <?php endif ?>
1876
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
1877
  <?php break;
1878
  case 'account': ?>
1879
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
@@ -1888,7 +1888,7 @@ class Template {
1888
  </div>
1889
  <?php endif ?>
1890
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Account' ) ?></span></div>
1891
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
1892
  <?php break;
1893
  case 'activity': ?>
1894
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
@@ -1903,7 +1903,7 @@ class Template {
1903
  </div>
1904
  <?php endif ?>
1905
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Activity' ) ?></span></div>
1906
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
1907
  <?php break;
1908
  case 'subscriptions': ?>
1909
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
@@ -1918,7 +1918,7 @@ class Template {
1918
  </div>
1919
  <?php endif ?>
1920
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Subscriptions' ) ?></span></div>
1921
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
1922
  <?php break;
1923
  case 'messages': ?>
1924
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
@@ -1933,7 +1933,7 @@ class Template {
1933
  </div>
1934
  <?php endif ?>
1935
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Messages' ) ?></span></div>
1936
- <a class="wpf-end" rel="nofollow">&nbsp;</a>
1937
  <?php break;
1938
  case 'topic': ?>
1939
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root<?php echo( ! $current_object['forumid'] ? ' active' : '' ) ?>"><a itemprop="item" href="<?php echo( ! $current_object['forumid'] ? '#' : wpforo_home_url() ) ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
@@ -1955,7 +1955,7 @@ class Template {
1955
  <?php endif ?>
1956
  <?php endforeach ?>
1957
  <?php endif ?>
1958
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
1959
  <?php break;
1960
  case 'post': ?>
1961
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root<?php echo( ! $current_object['forumid'] ? ' active' : '' ) ?>"><a itemprop="item" href="<?php echo( ! $current_object['forumid'] ? '#' : wpforo_home_url() ) ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
@@ -1976,7 +1976,7 @@ class Template {
1976
  <?php if( $current_object['topic'] ) : ?>
1977
  <div class="wpf-item-element active"><span><?php wpforo_text( $current_object['topic']['title'], $lenght ) ?></span></div>
1978
  <?php endif ?>
1979
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
1980
  <?php break;
1981
  default: ?>
1982
  <?php if( wpforo_is_member_template( $current_object['template'] ) && ( $template = $this->get_template( $current_object['template'] ) ) ) : ?>
@@ -1992,18 +1992,18 @@ class Template {
1992
  </div>
1993
  <?php endif ?>
1994
  <div class="wpf-item-element active"><span><?php wpforo_phrase( $template['title'] ) ?></span></div>
1995
- <a class="wpf-end" rel="nofollow">&nbsp;</a>
1996
  <?php else : ?>
1997
  <?php if( $current_object['forumid'] ): ?>
1998
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1999
  <meta itemprop="position" content="1">
2000
  </div>
2001
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
2002
  <?php else: ?>
2003
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root active"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><span itemprop="name"><?php wpforo_phrase( 'Forums' ) ?></span></a>
2004
  <meta itemprop="position" content="1">
2005
  </div>
2006
- <a href="#" class="wpf-end" rel="nofollow">&nbsp;</a>
2007
  <?php endif ?>
2008
  <?php endif ?>
2009
  <?php endswitch; ?>
@@ -2528,6 +2528,7 @@ class Template {
2528
  }
2529
 
2530
  public function ajx_active_tab_content() {
 
2531
  if( ! empty( $_POST['active_tab_id'] ) ) {
2532
  $active_tab_id = sanitize_textarea_field( $_POST['active_tab_id'] );
2533
  switch( $active_tab_id ) {
@@ -2877,7 +2878,7 @@ class Template {
2877
  }
2878
 
2879
  public function change_cover_button( $user ) {
2880
- if( WPF()->perm->user_can_edit_account( $user ) ){
2881
  return sprintf(
2882
  '<div class="wpf-edit-cover" wpf-tooltip="%1$s" wpf-tooltip-position="top" wpf-tooltip-size="small"><i class="fas fa-images"></i></div>',
2883
  wpforo_phrase('Change Cover Image', false)
292
  }else{
293
  printf(
294
  '<p class="wpf-p-error">%1$s</p>',
295
+ wpforo_phrase( 'You should have minimum number of approved posts to be able edit your profile information', false )
296
  );
297
  }
298
  },
320
  'is_default' => 1,
321
  'can' => 'l',
322
  'add_in_member_menu' => 1,
323
+ 'add_in_member_buttons' => 1,
324
  'callback_for_page' => function(){
325
  require_once wpftpl( 'profile-favored.php' );
326
  },
1813
  <meta itemprop="position" content="1">
1814
  </div>
1815
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Search' ) ?></span></div>
1816
+ <span class="wpf-end">&nbsp;</span>
1817
  <?php break;
1818
  case 'signup': ?>
1819
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1820
  <meta itemprop="position" content="1">
1821
  </div>
1822
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Register' ) ?></span></div>
1823
+ <span class="wpf-end">&nbsp;</span>
1824
  <?php break;
1825
  case 'signin': ?>
1826
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1827
  <meta itemprop="position" content="1">
1828
  </div>
1829
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Login' ) ?></span></div>
1830
+ <span class="wpf-end">&nbsp;</span>
1831
  <?php break;
1832
  case 'members': ?>
1833
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1841
  <?php else : ?>
1842
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Members' ) ?></span></div>
1843
  <?php endif ?>
1844
+ <span class="wpf-end">&nbsp;</span>
1845
  <?php break;
1846
  case 'recent': ?>
1847
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1854
  <?php else: ?>
1855
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Recent Posts' ) ?></span></div>
1856
  <?php endif; ?>
1857
+ <span class="wpf-end">&nbsp;</span>
1858
  <?php break;
1859
  case 'tags': ?>
1860
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1861
  <meta itemprop="position" content="1">
1862
  </div>
1863
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Tags' ) ?></span></div>
1864
+ <span class="wpf-end">&nbsp;</span>
1865
  <?php break;
1866
  case 'profile': ?>
1867
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1873
  <?php if( $current_object['user'] ) : ?>
1874
  <div class="wpf-item-element active"><span><?php @wpforo_text( wpforo_user_dname( $current_object['user'] ), $lenght ) ?></span></div>
1875
  <?php endif ?>
1876
+ <span class="wpf-end">&nbsp;</span>
1877
  <?php break;
1878
  case 'account': ?>
1879
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1888
  </div>
1889
  <?php endif ?>
1890
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Account' ) ?></span></div>
1891
+ <span class="wpf-end">&nbsp;</span>
1892
  <?php break;
1893
  case 'activity': ?>
1894
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1903
  </div>
1904
  <?php endif ?>
1905
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Activity' ) ?></span></div>
1906
+ <span class="wpf-end">&nbsp;</span>
1907
  <?php break;
1908
  case 'subscriptions': ?>
1909
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1918
  </div>
1919
  <?php endif ?>
1920
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Subscriptions' ) ?></span></div>
1921
+ <span class="wpf-end">&nbsp;</span>
1922
  <?php break;
1923
  case 'messages': ?>
1924
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1933
  </div>
1934
  <?php endif ?>
1935
  <div class="wpf-item-element active"><span><?php wpforo_phrase( 'Messages' ) ?></span></div>
1936
+ <span class="wpf-end">&nbsp;</span>
1937
  <?php break;
1938
  case 'topic': ?>
1939
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root<?php echo( ! $current_object['forumid'] ? ' active' : '' ) ?>"><a itemprop="item" href="<?php echo( ! $current_object['forumid'] ? '#' : wpforo_home_url() ) ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1955
  <?php endif ?>
1956
  <?php endforeach ?>
1957
  <?php endif ?>
1958
+ <span class="wpf-end">&nbsp;</span>
1959
  <?php break;
1960
  case 'post': ?>
1961
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root<?php echo( ! $current_object['forumid'] ? ' active' : '' ) ?>"><a itemprop="item" href="<?php echo( ! $current_object['forumid'] ? '#' : wpforo_home_url() ) ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1976
  <?php if( $current_object['topic'] ) : ?>
1977
  <div class="wpf-item-element active"><span><?php wpforo_text( $current_object['topic']['title'], $lenght ) ?></span></div>
1978
  <?php endif ?>
1979
+ <span class="wpf-end">&nbsp;</span>
1980
  <?php break;
1981
  default: ?>
1982
  <?php if( wpforo_is_member_template( $current_object['template'] ) && ( $template = $this->get_template( $current_object['template'] ) ) ) : ?>
1992
  </div>
1993
  <?php endif ?>
1994
  <div class="wpf-item-element active"><span><?php wpforo_phrase( $template['title'] ) ?></span></div>
1995
+ <span class="wpf-end">&nbsp;</span>
1996
  <?php else : ?>
1997
  <?php if( $current_object['forumid'] ): ?>
1998
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><i class="fas fa-home"></i><span itemprop="name" style="display:none;"><?php wpforo_phrase( 'Forums' ) ?></span></a>
1999
  <meta itemprop="position" content="1">
2000
  </div>
2001
+ <span class="wpf-end">&nbsp;</span>
2002
  <?php else: ?>
2003
  <div itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem" class="wpf-item-element wpf-root active"><a itemprop="item" href="<?php echo wpforo_home_url() ?>" title="<?php esc_attr( wpforo_phrase( 'Forums' ) ) ?>"><span itemprop="name"><?php wpforo_phrase( 'Forums' ) ?></span></a>
2004
  <meta itemprop="position" content="1">
2005
  </div>
2006
+ <span class="wpf-end">&nbsp;</span>
2007
  <?php endif ?>
2008
  <?php endif ?>
2009
  <?php endswitch; ?>
2528
  }
2529
 
2530
  public function ajx_active_tab_content() {
2531
+ wpforo_verify_nonce( 'wpforo_active_tab_content_ajax' );
2532
  if( ! empty( $_POST['active_tab_id'] ) ) {
2533
  $active_tab_id = sanitize_textarea_field( $_POST['active_tab_id'] );
2534
  switch( $active_tab_id ) {
2878
  }
2879
 
2880
  public function change_cover_button( $user ) {
2881
+ if( WPF()->usergroup->can( 'upc' ) && WPF()->perm->user_can_edit_account( $user ) ){
2882
  return sprintf(
2883
  '<div class="wpf-edit-cover" wpf-tooltip="%1$s" wpf-tooltip-position="top" wpf-tooltip-size="small"><i class="fas fa-images"></i></div>',
2884
  wpforo_phrase('Change Cover Image', false)
classes/UserGroups.php CHANGED
@@ -69,6 +69,7 @@ class UserGroups {
69
  'vpra' => __( 'Front - Can view member activity', 'wpforo' ),
70
  'vprs' => __( 'Front - Can view member subscriptions', 'wpforo' ),
71
 
 
72
  'upa' => __( 'Front - Can upload avatar', 'wpforo' ),
73
  'ups' => __( 'Front - Can have signature', 'wpforo' ),
74
  'va' => __( 'Front - Can view avatars', 'wpforo' ),
69
  'vpra' => __( 'Front - Can view member activity', 'wpforo' ),
70
  'vprs' => __( 'Front - Can view member subscriptions', 'wpforo' ),
71
 
72
+ 'upc' => __( 'Front - Can upload cover', 'wpforo' ),
73
  'upa' => __( 'Front - Can upload avatar', 'wpforo' ),
74
  'ups' => __( 'Front - Can have signature', 'wpforo' ),
75
  'va' => __( 'Front - Can view avatars', 'wpforo' ),
includes/functions-template.php CHANGED
@@ -648,6 +648,12 @@ function wpforo_user_avatar( $user, $size, $attr = '', $lastmod = false ) {
648
  function wpforo_signature( $member, $args = [] ) {
649
 
650
  if( is_numeric( $member ) ) $member = wpforo_member( $member );
 
 
 
 
 
 
651
  if( WPF()->current_userid != wpfval( $member, 'userid' ) && ! WPF()->usergroup->can( 'vms' ) ) return '';
652
 
653
  $signature = '';
648
  function wpforo_signature( $member, $args = [] ) {
649
 
650
  if( is_numeric( $member ) ) $member = wpforo_member( $member );
651
+
652
+ if( wpfkey($member, 'rating', 'level') ){
653
+ $min_level = apply_filters('wpforo_min_rating_level_for_signature', 1);
654
+ if( $min_level && (int) $member['rating']['level'] < $min_level ) return '';
655
+ }
656
+
657
  if( WPF()->current_userid != wpfval( $member, 'userid' ) && ! WPF()->usergroup->can( 'vms' ) ) return '';
658
 
659
  $signature = '';
includes/functions.php CHANGED
@@ -340,7 +340,7 @@ function wpforo_get_addons_info( $base = null ) {
340
  'desc' => __( 'Allows to setup membership access to your forums and topics through WooCommerce Memberships plugin.', 'wpforo' ),
341
  'url' => 'https://gvectors.com/product/wpforo-woocommerce-memberships/',
342
  ],
343
- 'go2wpforo' => [
344
  'ABSPATH' => wpforo_fix_dir_sep( WP_PLUGIN_DIR . '/go2wpforo/Main.php' ),
345
  'base' => false,
346
  'version' => '3.0.0',
@@ -351,7 +351,7 @@ function wpforo_get_addons_info( $base = null ) {
351
  'thumb' => WPFORO_URL . '/assets/addons/go2wpforo/header.png',
352
  'desc' => __( 'Helps to migrate from bbPress, phpBB, SMF, MyBB, Simple:Press and other forum pieces of software and plugins to wpForo.', 'wpforo' ),
353
  'url' => 'https://wpforo.com/docs/wpforo-v2/migrate-to-wpforo/',
354
- ],
355
  ];
356
 
357
  if( !is_null( $base ) ){
@@ -363,14 +363,46 @@ function wpforo_get_addons_info( $base = null ) {
363
  return $addons;
364
  }
365
 
366
- function wpforo_verify_form( $action = 'wpforo_verify_form', $nonce = '_wpfnonce', $mode = 'full' ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
367
  if( $mode === 'full' ) {
368
- if( ! wp_verify_nonce( wpfval( $_REQUEST, $nonce ), $action ) ) {
369
  wpforo_phrase( 'Sorry, something is wrong with your data.' );
370
  exit();
371
  }
372
- }
373
- if( in_array( $mode, [ 'ref', 'full' ] ) ) {
 
 
374
  if( ! wpfval( $_SERVER, 'HTTP_REFERER' ) ) {
375
  exit( 'Error 2252 | Please contact the forum administrator.' );
376
  }
@@ -378,7 +410,7 @@ function wpforo_verify_form( $action = 'wpforo_verify_form', $nonce = '_wpfnonce
378
  exit( 'Error 2253 | Please contact the forum administrator.' );
379
  }
380
  }
381
- do_action( 'wpforo_verify_form_end' );
382
  }
383
 
384
  /**
@@ -1595,8 +1627,8 @@ function wpforo_get_option( $option, $default = null, $cache = true ) {
1595
  if( $value === false ) {
1596
  $value = $default;
1597
  } else {
1598
- if( preg_match( '#_(?:general|profiles|rating)$#iu', $option ) ) {
1599
- foreach( [ 'title_groupids', 'title_secondary_groupids', 'rating_title_ug', 'rating_badge_ug', 'admin_bar' ] as $k ) {
1600
  if( wpfkey( $default, $k ) ) $default[ $k ] = [];
1601
  }
1602
  }
340
  'desc' => __( 'Allows to setup membership access to your forums and topics through WooCommerce Memberships plugin.', 'wpforo' ),
341
  'url' => 'https://gvectors.com/product/wpforo-woocommerce-memberships/',
342
  ],
343
+ /*'go2wpforo' => [
344
  'ABSPATH' => wpforo_fix_dir_sep( WP_PLUGIN_DIR . '/go2wpforo/Main.php' ),
345
  'base' => false,
346
  'version' => '3.0.0',
351
  'thumb' => WPFORO_URL . '/assets/addons/go2wpforo/header.png',
352
  'desc' => __( 'Helps to migrate from bbPress, phpBB, SMF, MyBB, Simple:Press and other forum pieces of software and plugins to wpForo.', 'wpforo' ),
353
  'url' => 'https://wpforo.com/docs/wpforo-v2/migrate-to-wpforo/',
354
+ ],*/
355
  ];
356
 
357
  if( !is_null( $base ) ){
363
  return $addons;
364
  }
365
 
366
+ function wpforo_get_ajax_actions_list(){
367
+ $nonces = [];
368
+ global $wp_filter;
369
+ if( WPF()->current_userid ){
370
+ foreach ( $wp_filter as $key => $value ){
371
+ if( strpos( $key, 'wp_ajax_wpf' ) === 0 ) $nonces[] = preg_replace( '#^wp_ajax_#iu', '', $key, 1 );
372
+ }
373
+ }else{
374
+ foreach ( $wp_filter as $key => $value ){
375
+ if( strpos( $key, 'wp_ajax_nopriv_wpf' ) === 0 ) $nonces[] = preg_replace( '#^wp_ajax_nopriv_#iu', '', $key, 1 );
376
+ }
377
+ }
378
+
379
+ return array_unique( (array) apply_filters( 'wpforo_get_ajax_actions_list', $nonces ) );
380
+ }
381
+
382
+ function wpforo_generate_ajax_nonces(){
383
+ $nonces = [];
384
+ foreach ( wpforo_get_ajax_actions_list() as $action ){
385
+ $nonces[ $action ] = wp_create_nonce( $action );
386
+ }
387
+
388
+ return $nonces;
389
+ }
390
+
391
+ function wpforo_verify_form( $action = 'wpforo_verify_form', $query_arg = '_wpfnonce', $mode = 'full' ) {
392
+ wpforo_verify_nonce( $action, $mode, $query_arg );
393
+ do_action( 'wpforo_verify_form_end' );
394
+ }
395
+
396
+ function wpforo_verify_nonce( $action = 'wpforo_verify_form', $mode = 'ajax', $query_arg = '_wpfnonce' ) {
397
  if( $mode === 'full' ) {
398
+ if( ! wp_verify_nonce( wpfval( $_REQUEST, $query_arg ), $action ) ) {
399
  wpforo_phrase( 'Sorry, something is wrong with your data.' );
400
  exit();
401
  }
402
+ }elseif( $mode === 'ajax' ){
403
+ check_ajax_referer( $action, $query_arg );
404
+ }
405
+ if( in_array( $mode, [ 'ajax', 'full', 'ref' ] ) ) {
406
  if( ! wpfval( $_SERVER, 'HTTP_REFERER' ) ) {
407
  exit( 'Error 2252 | Please contact the forum administrator.' );
408
  }
410
  exit( 'Error 2253 | Please contact the forum administrator.' );
411
  }
412
  }
413
+ do_action( 'wpforo_verify_nonce_end' );
414
  }
415
 
416
  /**
1627
  if( $value === false ) {
1628
  $value = $default;
1629
  } else {
1630
+ if( preg_match( '#_(?:general|profiles|rating|tools_misc)$#iu', $option ) ) {
1631
+ foreach( [ 'title_groupids', 'title_secondary_groupids', 'rating_title_ug', 'rating_badge_ug', 'admin_bar', 'admin_note_groups', 'admin_note_pages' ] as $k ) {
1632
  if( wpfkey( $default, $k ) ) $default[ $k ] = [];
1633
  }
1634
  }
includes/hooks.php CHANGED
@@ -543,6 +543,7 @@ add_action( 'wp_head', 'wpforo_add_meta_tags', 1 );
543
 
544
  add_action( 'wp_ajax_wpforo_answer_ajax', 'wpf_answer' );
545
  function wpf_answer() {
 
546
  $response = [ 'notice' => WPF()->notice->get_notices() ];
547
  if( ! is_user_logged_in() ) {
548
  WPF()->notice->add( wpforo_get_login_or_register_notice_text() );
@@ -588,6 +589,7 @@ function wpf_answer() {
588
  add_action( 'wp_ajax_wpforo_quote_ajax', 'wpf_quote' );
589
  add_action( 'wp_ajax_nopriv_wpforo_quote_ajax', 'wpf_quote' );
590
  function wpf_quote() {
 
591
  if( ! $current_topicid = wpforo_bigintval( WPF()->current_object['topicid'] ) ) {
592
  exit();
593
  }
@@ -603,6 +605,7 @@ function wpf_quote() {
603
 
604
  add_action( 'wp_ajax_wpforo_report_ajax', 'wpf_report' );
605
  function wpf_report() {
 
606
  if( ! is_user_logged_in() ) {
607
  WPF()->notice->add( wpforo_get_login_or_register_notice_text() );
608
  wp_send_json_error( WPF()->notice->get_notices() );
@@ -654,6 +657,7 @@ function wpf_report() {
654
  add_action( 'wp_ajax_wpforo_sticky_ajax', 'wpf_sticky' );
655
  add_action( 'wp_ajax_nopriv_wpforo_sticky_ajax', 'wpf_sticky' );
656
  function wpf_sticky() {
 
657
  WPF()->notice->add( 'wrong data', 'error' );
658
  $response = [ 'notice' => WPF()->notice->get_notices() ];
659
  if( ! $topicid = wpforo_bigintval( wpfval( $_POST, 'topicid' ) ) ) {
@@ -690,12 +694,19 @@ function wpf_sticky() {
690
 
691
  add_action( 'wp_ajax_wpforo_private_ajax', 'wpf_private' );
692
  function wpf_private() {
 
693
  if( ! WPF()->current_userid ) {
694
  wp_send_json_error();
695
  }
696
  if( ! ( $topicid = wpforo_bigintval( wpfval( $_POST, 'topicid' ) ) ) ) {
697
  wp_send_json_error();
698
  }
 
 
 
 
 
 
699
  $status = wpfval( $_POST, 'status' );
700
  if( $status === 'private' ) {
701
  WPF()->topic->wprivate( $topicid, 1 );
@@ -710,11 +721,15 @@ function wpf_private() {
710
  add_action( 'wp_ajax_wpforo_solved_ajax', 'wpf_solved' );
711
  add_action( 'wp_ajax_nopriv_wpforo_solved_ajax', 'wpf_solved' );
712
  function wpf_solved() {
 
 
 
 
713
  if( ! $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) ) ) {
714
  wp_send_json_error();
715
  }
716
  if( $post = WPF()->post->get_post( $postid ) ) {
717
- if( WPF()->perm->forum_can( 'sv', $post['forumid'] ) || WPF()->perm->forum_can( 'osv', $post['forumid'] ) ) {
718
  $solved = ( wpfval( $_POST, 'status' ) === 'solved' ? 1 : 0 );
719
  $sql = "UPDATE " . WPF()->tables->topics . " SET `solved` = %d WHERE `topicid` = %d";
720
  WPF()->db->query( WPF()->db->prepare( $sql, $solved, $post['topicid'] ) );
@@ -727,6 +742,7 @@ function wpf_solved() {
727
 
728
  add_action( 'wp_ajax_wpforo_approve_ajax', 'wpf_approve' );
729
  function wpf_approve() {
 
730
  if( ! WPF()->current_userid ) {
731
  WPF()->notice->add( wpforo_get_login_or_register_notice_text() );
732
  wp_send_json_error();
@@ -747,6 +763,7 @@ function wpf_approve() {
747
 
748
  add_action( 'wp_ajax_wpforo_close_ajax', 'wpf_close' );
749
  function wpf_close() {
 
750
  if( ! WPF()->current_userid ) {
751
  wp_send_json_error();
752
  }
@@ -772,6 +789,7 @@ function wpf_close() {
772
  add_action( 'wp_ajax_wpforo_post_edit', 'wpforo_post_edit' );
773
  add_action( 'wp_ajax_nopriv_wpforo_post_edit', 'wpforo_post_edit' );
774
  function wpforo_post_edit() {
 
775
  $r = [ 'html' => '' ];
776
  if( $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) ) ) {
777
  if( $post = WPF()->post->get_post( $postid, false ) ) {
@@ -803,6 +821,7 @@ function wpforo_post_edit() {
803
 
804
  add_action( 'wp_ajax_wpforo_delete_ajax', 'wpf_delete' );
805
  function wpf_delete() {
 
806
  $resp = [];
807
  $status = (string) wpfval( $_POST, 'status' );
808
  $postid = (int) wpfval( $_POST, 'postid' );
@@ -837,6 +856,7 @@ function wpf_delete() {
837
  add_action( 'wp_ajax_wpforo_layout4_loadmore', 'wpfl4_loadmore' );
838
  add_action( 'wp_ajax_nopriv_wpforo_layout4_loadmore', 'wpfl4_loadmore' );
839
  function wpfl4_loadmore() {
 
840
  $success = false;
841
  WPF()->notice->add( 'wrong data', 'error' );
842
  $response = [ 'no_more' => 0, 'output_html' => '', 'notice' => WPF()->notice->get_notices() ];
@@ -908,6 +928,7 @@ function wpfl4_loadmore() {
908
  add_action( 'wp_ajax_wpforo_topic_portable_form', 'wpforo_topic_portable_form' );
909
  add_action( 'wp_ajax_nopriv_wpforo_topic_portable_form', 'wpforo_topic_portable_form' );
910
  function wpforo_topic_portable_form() {
 
911
  $html = '';
912
  if( $forumid = wpfval( $_POST, 'forumid' ) ) {
913
  WPF()->form->current['varname'] = 'thread';
@@ -925,6 +946,7 @@ function wpforo_topic_portable_form() {
925
  add_action( 'wp_ajax_wpforo_qa_comment_loadrest', 'wpforo_qa_comment_loadrest' );
926
  add_action( 'wp_ajax_nopriv_wpforo_qa_comment_loadrest', 'wpforo_qa_comment_loadrest' );
927
  function wpforo_qa_comment_loadrest() {
 
928
  WPF()->notice->add( 'wrong data', 'error' );
929
  $response = [ 'output_html' => '', 'notice' => WPF()->notice->get_notices() ];
930
  if( $parentid = wpfval( $_POST, 'parentid' ) ) {
@@ -957,6 +979,7 @@ function wpforo_qa_comment_loadrest() {
957
  add_action( 'wp_ajax_wpforo_post_url_fixer', 'wpforo_post_url_fixer' );
958
  add_action( 'wp_ajax_nopriv_wpforo_post_url_fixer', 'wpforo_post_url_fixer' );
959
  function wpforo_post_url_fixer() {
 
960
  if( ( $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) ) ) && ( $referer = wpfval( $_POST, 'referer' ) ) ) {
961
  if( is_wpforo_url( $referer ) ) {
962
  $diff = 100;
@@ -1120,6 +1143,7 @@ function wpforo_frontend_register_scripts() {
1120
  ], WPFORO_VERSION, true );
1121
  wp_localize_script( 'wpforo-frontend-js', 'wpforo', [
1122
  'ajax_url' => wpforo_get_ajax_url(),
 
1123
  'settings_slugs' => WPF()->settings->slugs,
1124
  'editor_settings' => WPF()->tpl->editor_buttons( 'post' ),
1125
  'revision_options' => WPF()->settings->posting,
@@ -2150,7 +2174,7 @@ function wpforo_admin_bar_menu( $wp_admin_bar ){
2150
  'title' => __( 'Visit Forum', 'wpforo' ),
2151
  'href' => wpforo_home_url(),
2152
  'parent' => 'wpf-community',
2153
- 'meta' => [ 'target' => '_blank' ]
2154
  ];
2155
  $wp_admin_bar->add_node( $args );
2156
 
@@ -2362,7 +2386,7 @@ function wpforo_multiboard_admin_bar_menu( $wp_admin_bar ){
2362
  'title' => '&#128279;&nbsp;' . __( 'Visit Forum', 'wpforo' ),
2363
  'href' => wpforo_home_url(),
2364
  'parent' => $menuid,
2365
- 'meta' => [ 'target' => '_blank' ]
2366
  ];
2367
  $wp_admin_bar->add_node( $args );
2368
 
@@ -2665,7 +2689,7 @@ add_action( 'wpforo_after_init', function() {
2665
  add_action( 'admin_enqueue_scripts', 'wpforo_cat_cover_js' );
2666
 
2667
  function wpforo_cat_cover_js() {
2668
- if ( wpfval($_GET, 'page') === 'wpforo-forums' && !did_action( 'wp_enqueue_media' ) ) {
2669
  wp_enqueue_media();
2670
  }
2671
  }
543
 
544
  add_action( 'wp_ajax_wpforo_answer_ajax', 'wpf_answer' );
545
  function wpf_answer() {
546
+ wpforo_verify_nonce( 'wpforo_answer_ajax' );
547
  $response = [ 'notice' => WPF()->notice->get_notices() ];
548
  if( ! is_user_logged_in() ) {
549
  WPF()->notice->add( wpforo_get_login_or_register_notice_text() );
589
  add_action( 'wp_ajax_wpforo_quote_ajax', 'wpf_quote' );
590
  add_action( 'wp_ajax_nopriv_wpforo_quote_ajax', 'wpf_quote' );
591
  function wpf_quote() {
592
+ wpforo_verify_nonce( 'wpforo_quote_ajax' );
593
  if( ! $current_topicid = wpforo_bigintval( WPF()->current_object['topicid'] ) ) {
594
  exit();
595
  }
605
 
606
  add_action( 'wp_ajax_wpforo_report_ajax', 'wpf_report' );
607
  function wpf_report() {
608
+ wpforo_verify_nonce( 'wpforo_report_ajax' );
609
  if( ! is_user_logged_in() ) {
610
  WPF()->notice->add( wpforo_get_login_or_register_notice_text() );
611
  wp_send_json_error( WPF()->notice->get_notices() );
657
  add_action( 'wp_ajax_wpforo_sticky_ajax', 'wpf_sticky' );
658
  add_action( 'wp_ajax_nopriv_wpforo_sticky_ajax', 'wpf_sticky' );
659
  function wpf_sticky() {
660
+ wpforo_verify_nonce( 'wpforo_sticky_ajax' );
661
  WPF()->notice->add( 'wrong data', 'error' );
662
  $response = [ 'notice' => WPF()->notice->get_notices() ];
663
  if( ! $topicid = wpforo_bigintval( wpfval( $_POST, 'topicid' ) ) ) {
694
 
695
  add_action( 'wp_ajax_wpforo_private_ajax', 'wpf_private' );
696
  function wpf_private() {
697
+ wpforo_verify_nonce( 'wpforo_private_ajax' );
698
  if( ! WPF()->current_userid ) {
699
  wp_send_json_error();
700
  }
701
  if( ! ( $topicid = wpforo_bigintval( wpfval( $_POST, 'topicid' ) ) ) ) {
702
  wp_send_json_error();
703
  }
704
+ if( ! ( $topic = WPF()->topic->get_topic( $topicid ) ) ){
705
+ wp_send_json_error();
706
+ }
707
+ if( ! ( WPF()->perm->forum_can( 'p', $topic['forumid'] ) || ( WPF()->current_userid == $topic['userid'] && WPF()->perm->forum_can( 'op', $topic['forumid'] ) ) ) ){
708
+ wp_send_json_error();
709
+ }
710
  $status = wpfval( $_POST, 'status' );
711
  if( $status === 'private' ) {
712
  WPF()->topic->wprivate( $topicid, 1 );
721
  add_action( 'wp_ajax_wpforo_solved_ajax', 'wpf_solved' );
722
  add_action( 'wp_ajax_nopriv_wpforo_solved_ajax', 'wpf_solved' );
723
  function wpf_solved() {
724
+ wpforo_verify_nonce( 'wpforo_solved_ajax' );
725
+ if( ! WPF()->current_userid ){
726
+ wp_send_json_error();
727
+ }
728
  if( ! $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) ) ) {
729
  wp_send_json_error();
730
  }
731
  if( $post = WPF()->post->get_post( $postid ) ) {
732
+ if( WPF()->perm->forum_can( 'sv', $post['forumid'] ) || ( WPF()->current_userid == $post['userid'] && WPF()->perm->forum_can( 'osv', $post['forumid'] ) ) ) {
733
  $solved = ( wpfval( $_POST, 'status' ) === 'solved' ? 1 : 0 );
734
  $sql = "UPDATE " . WPF()->tables->topics . " SET `solved` = %d WHERE `topicid` = %d";
735
  WPF()->db->query( WPF()->db->prepare( $sql, $solved, $post['topicid'] ) );
742
 
743
  add_action( 'wp_ajax_wpforo_approve_ajax', 'wpf_approve' );
744
  function wpf_approve() {
745
+ wpforo_verify_nonce( 'wpforo_approve_ajax' );
746
  if( ! WPF()->current_userid ) {
747
  WPF()->notice->add( wpforo_get_login_or_register_notice_text() );
748
  wp_send_json_error();
763
 
764
  add_action( 'wp_ajax_wpforo_close_ajax', 'wpf_close' );
765
  function wpf_close() {
766
+ wpforo_verify_nonce( 'wpforo_close_ajax' );
767
  if( ! WPF()->current_userid ) {
768
  wp_send_json_error();
769
  }
789
  add_action( 'wp_ajax_wpforo_post_edit', 'wpforo_post_edit' );
790
  add_action( 'wp_ajax_nopriv_wpforo_post_edit', 'wpforo_post_edit' );
791
  function wpforo_post_edit() {
792
+ wpforo_verify_nonce( 'wpforo_post_edit' );
793
  $r = [ 'html' => '' ];
794
  if( $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) ) ) {
795
  if( $post = WPF()->post->get_post( $postid, false ) ) {
821
 
822
  add_action( 'wp_ajax_wpforo_delete_ajax', 'wpf_delete' );
823
  function wpf_delete() {
824
+ wpforo_verify_nonce( 'wpforo_delete_ajax' );
825
  $resp = [];
826
  $status = (string) wpfval( $_POST, 'status' );
827
  $postid = (int) wpfval( $_POST, 'postid' );
856
  add_action( 'wp_ajax_wpforo_layout4_loadmore', 'wpfl4_loadmore' );
857
  add_action( 'wp_ajax_nopriv_wpforo_layout4_loadmore', 'wpfl4_loadmore' );
858
  function wpfl4_loadmore() {
859
+ wpforo_verify_nonce( 'wpforo_layout4_loadmore' );
860
  $success = false;
861
  WPF()->notice->add( 'wrong data', 'error' );
862
  $response = [ 'no_more' => 0, 'output_html' => '', 'notice' => WPF()->notice->get_notices() ];
928
  add_action( 'wp_ajax_wpforo_topic_portable_form', 'wpforo_topic_portable_form' );
929
  add_action( 'wp_ajax_nopriv_wpforo_topic_portable_form', 'wpforo_topic_portable_form' );
930
  function wpforo_topic_portable_form() {
931
+ wpforo_verify_nonce( 'wpforo_topic_portable_form' );
932
  $html = '';
933
  if( $forumid = wpfval( $_POST, 'forumid' ) ) {
934
  WPF()->form->current['varname'] = 'thread';
946
  add_action( 'wp_ajax_wpforo_qa_comment_loadrest', 'wpforo_qa_comment_loadrest' );
947
  add_action( 'wp_ajax_nopriv_wpforo_qa_comment_loadrest', 'wpforo_qa_comment_loadrest' );
948
  function wpforo_qa_comment_loadrest() {
949
+ wpforo_verify_nonce( 'wpforo_qa_comment_loadrest' );
950
  WPF()->notice->add( 'wrong data', 'error' );
951
  $response = [ 'output_html' => '', 'notice' => WPF()->notice->get_notices() ];
952
  if( $parentid = wpfval( $_POST, 'parentid' ) ) {
979
  add_action( 'wp_ajax_wpforo_post_url_fixer', 'wpforo_post_url_fixer' );
980
  add_action( 'wp_ajax_nopriv_wpforo_post_url_fixer', 'wpforo_post_url_fixer' );
981
  function wpforo_post_url_fixer() {
982
+ wpforo_verify_nonce( 'wpforo_post_url_fixer' );
983
  if( ( $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) ) ) && ( $referer = wpfval( $_POST, 'referer' ) ) ) {
984
  if( is_wpforo_url( $referer ) ) {
985
  $diff = 100;
1143
  ], WPFORO_VERSION, true );
1144
  wp_localize_script( 'wpforo-frontend-js', 'wpforo', [
1145
  'ajax_url' => wpforo_get_ajax_url(),
1146
+ 'nonces' => wpforo_generate_ajax_nonces(),
1147
  'settings_slugs' => WPF()->settings->slugs,
1148
  'editor_settings' => WPF()->tpl->editor_buttons( 'post' ),
1149
  'revision_options' => WPF()->settings->posting,
2174
  'title' => __( 'Visit Forum', 'wpforo' ),
2175
  'href' => wpforo_home_url(),
2176
  'parent' => 'wpf-community',
2177
+ // 'meta' => [ 'target' => '_blank' ]
2178
  ];
2179
  $wp_admin_bar->add_node( $args );
2180
 
2386
  'title' => '&#128279;&nbsp;' . __( 'Visit Forum', 'wpforo' ),
2387
  'href' => wpforo_home_url(),
2388
  'parent' => $menuid,
2389
+ // 'meta' => [ 'target' => '_blank' ]
2390
  ];
2391
  $wp_admin_bar->add_node( $args );
2392
 
2689
  add_action( 'admin_enqueue_scripts', 'wpforo_cat_cover_js' );
2690
 
2691
  function wpforo_cat_cover_js() {
2692
+ if ( wpfval($_GET, 'page') === wpforo_prefix_slug( 'forums' ) && !did_action( 'wp_enqueue_media' ) ) {
2693
  wp_enqueue_media();
2694
  }
2695
  }
includes/installation.php CHANGED
@@ -929,201 +929,218 @@ function wpforo_import_default_accesses() {
929
 
930
  function wpforo_import_default_usergroups() {
931
  $cans_admin = [
932
- 'mf' => '1',
933
- 'ms' => '1',
934
- 'mt' => '1',
935
- 'mp' => '1',
936
- 'mth' => '1',
937
- 'vm' => '1',
938
- 'aum' => '1',
939
- 'em' => '1',
940
- 'vmg' => '1',
941
- 'aup' => '1',
942
- 'vmem' => '1',
943
- 'view_stat' => '1',
944
- 'vprf' => '1',
945
- 'vpra' => '1',
946
- 'vprs' => '1',
947
- 'bm' => '1',
948
- 'dm' => '1',
949
- 'upa' => '1',
950
- 'ups' => '1',
951
- 'va' => '1',
952
- 'vmu' => '1',
953
- 'vmm' => '1',
954
- 'vmt' => '1',
955
- 'vmct' => '1',
956
- 'vmr' => '1',
957
- 'vmw' => '1',
958
- 'vmsn' => '1',
959
- 'vmrd' => '1',
960
- 'vml' => '1',
961
- 'vmo' => '1',
962
- 'vms' => '1',
963
- 'vmam' => '1',
964
- 'vwpm' => '1',
 
965
  'caa' => 1,
966
  'vt_add_topic' => 1,
967
  ];
968
  $cans_moder = [
969
- 'mf' => '0',
970
- 'ms' => '0',
971
- 'mt' => '0',
972
- 'mp' => '0',
973
- 'mth' => '0',
974
- 'vm' => '0',
975
- 'aum' => '1',
976
- 'em' => '0',
977
- 'vmg' => '0',
978
- 'aup' => '1',
979
- 'vmem' => '1',
980
- 'view_stat' => '1',
981
- 'vprf' => '1',
982
- 'vpra' => '1',
983
- 'vprs' => '1',
984
- 'bm' => '1',
985
- 'dm' => '1',
986
- 'upa' => '1',
987
- 'ups' => '1',
988
- 'va' => '1',
989
- 'vmu' => '0',
990
- 'vmm' => '1',
991
- 'vmt' => '1',
992
- 'vmct' => '1',
993
- 'vmr' => '1',
994
- 'vmw' => '1',
995
- 'vmsn' => '1',
996
- 'vmrd' => '1',
997
- 'vml' => '1',
998
- 'vmo' => '1',
999
- 'vms' => '1',
1000
- 'vmam' => '1',
1001
- 'vwpm' => '1',
 
1002
  'caa' => 1,
1003
  'vt_add_topic' => 1,
1004
  ];
1005
  $cans_reg = [
1006
- 'mf' => '0',
1007
- 'ms' => '0',
1008
- 'mt' => '0',
1009
- 'mp' => '0',
1010
- 'mth' => '0',
1011
- 'vm' => '0',
1012
- 'aum' => '0',
1013
- 'em' => '0',
1014
- 'vmg' => '0',
1015
- 'aup' => '1',
1016
- 'vmem' => '1',
1017
- 'view_stat' => '1',
1018
- 'vprf' => '1',
1019
- 'vpra' => '1',
1020
- 'vprs' => '0',
1021
- 'bm' => '0',
1022
- 'dm' => '0',
1023
- 'upa' => '1',
1024
- 'ups' => '1',
1025
- 'va' => '1',
1026
- 'vmu' => '0',
1027
- 'vmm' => '0',
1028
- 'vmt' => '1',
1029
- 'vmct' => '1',
1030
- 'vmr' => '1',
1031
- 'vmw' => '1',
1032
- 'vmsn' => '1',
1033
- 'vmrd' => '1',
1034
- 'vml' => '1',
1035
- 'vmo' => '1',
1036
- 'vms' => '1',
1037
- 'vmam' => '1',
1038
- 'vwpm' => '1',
 
1039
  'caa' => 1,
1040
  'vt_add_topic' => 1,
1041
  ];
1042
  $cans_guest = [
1043
- 'mf' => '0',
1044
- 'ms' => '0',
1045
- 'mt' => '0',
1046
- 'mp' => '0',
1047
- 'mth' => '0',
1048
- 'vm' => '0',
1049
- 'aum' => '0',
1050
- 'em' => '0',
1051
- 'vmg' => '0',
1052
- 'aup' => '0',
1053
- 'vmem' => '1',
1054
- 'view_stat' => '1',
1055
- 'vprf' => '1',
1056
- 'vpra' => '1',
1057
- 'vprs' => '0',
1058
- 'bm' => '0',
1059
- 'dm' => '0',
1060
- 'upa' => '0',
1061
- 'ups' => '0',
1062
- 'va' => '1',
1063
- 'vmu' => '0',
1064
- 'vmm' => '0',
1065
- 'vmt' => '1',
1066
- 'vmct' => '1',
1067
- 'vmr' => '1',
1068
- 'vmw' => '0',
1069
- 'vmsn' => '1',
1070
- 'vmrd' => '1',
1071
- 'vml' => '1',
1072
- 'vmo' => '1',
1073
- 'vms' => '1',
1074
- 'vmam' => '1',
1075
- 'vwpm' => '0',
 
1076
  'caa' => 1,
1077
  'vt_add_topic' => 0,
1078
  ];
1079
  $cans_customer = [
1080
- 'mf' => '0',
1081
- 'ms' => '0',
1082
- 'mt' => '0',
1083
- 'mp' => '0',
1084
- 'mth' => '0',
1085
- 'vm' => '0',
1086
- 'aum' => '0',
1087
- 'em' => '0',
1088
- 'vmg' => '0',
1089
- 'aup' => '0',
1090
- 'vmem' => '1',
1091
- 'view_stat' => '1',
1092
- 'vprf' => '1',
1093
- 'vpra' => '1',
1094
- 'vprs' => '0',
1095
- 'bm' => '0',
1096
- 'dm' => '0',
1097
- 'upa' => '1',
1098
- 'ups' => '1',
1099
- 'va' => '1',
1100
- 'vmu' => '0',
1101
- 'vmm' => '0',
1102
- 'vmt' => '1',
1103
- 'vmct' => '1',
1104
- 'vmr' => '1',
1105
- 'vmw' => '1',
1106
- 'vmsn' => '1',
1107
- 'vmrd' => '1',
1108
- 'vml' => '1',
1109
- 'vmo' => '1',
1110
- 'vms' => '1',
1111
- 'vmam' => '1',
1112
- 'vwpm' => '1',
 
1113
  'caa' => 1,
1114
  'vt_add_topic' => 1,
1115
  ];
1116
 
1117
  //Add new Cans in this array to add those in custom Usergroup created by forum admin
1118
- $cans_defaults = [ 'mf' => '0', 'ms' => '0', 'mt' => '0', 'mp' => '0', 'mth' => '0', 'vmem' => 1, 'view_stat' => '1', 'vprf' => 1, 'caa' => 1, 'vt_add_topic' => 1 ];
 
 
 
 
 
 
 
 
 
 
 
 
1119
 
1120
  $sql = "SELECT * FROM `" . WPF()->tables->usergroups . "`";
1121
  if( ! $usergroups = WPF()->db->get_results( $sql, ARRAY_A ) ) {
1122
- WPF()->usergroup->add( 'Admin', $cans_admin, '', 'administrator', 'full', '#FF3333' );
1123
- WPF()->usergroup->add( 'Moderator', $cans_moder, '', 'editor', 'moderator', '#0066FF' );
1124
- WPF()->usergroup->add( 'Registered', $cans_reg, '', 'subscriber', 'standard', '', 1, 1 );
1125
- WPF()->usergroup->add( 'Guest', $cans_guest, '', '', 'read_only', '#222222', 0 );
1126
- WPF()->usergroup->add( 'Customer', $cans_customer, '', 'customer', 'standard', '#993366', 1, 1 );
1127
  } else {
1128
  foreach( $usergroups as $usergroup ) {
1129
  $current = unserialize( $usergroup['cans'] );
@@ -1248,6 +1265,11 @@ function wpforo_update_db() {
1248
  }
1249
  }
1250
  }
 
 
 
 
 
1251
  }
1252
  wpforo_update_option( 'version_db', WPFORO_VERSION );
1253
  }
@@ -1365,6 +1387,11 @@ function wpforo_database_check() {
1365
  }
1366
  }
1367
 
 
 
 
 
 
1368
  return $_table_diffs;
1369
  }
1370
 
@@ -1436,6 +1463,35 @@ function wpforo_database_fixer( $problems ) {
1436
  }
1437
  }
1438
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1439
  }
1440
 
1441
  return $SQL;
929
 
930
  function wpforo_import_default_usergroups() {
931
  $cans_admin = [
932
+ 'mf' => 1,
933
+ 'ms' => 1,
934
+ 'mt' => 1,
935
+ 'mp' => 1,
936
+ 'mth' => 1,
937
+ 'vm' => 1,
938
+ 'aum' => 1,
939
+ 'em' => 1,
940
+ 'vmg' => 1,
941
+ 'aup' => 1,
942
+ 'vmem' => 1,
943
+ 'view_stat' => 1,
944
+ 'vprf' => 1,
945
+ 'vpra' => 1,
946
+ 'vprs' => 1,
947
+ 'bm' => 1,
948
+ 'dm' => 1,
949
+ 'upc' => 1,
950
+ 'upa' => 1,
951
+ 'ups' => 1,
952
+ 'va' => 1,
953
+ 'vmu' => 1,
954
+ 'vmm' => 1,
955
+ 'vmt' => 1,
956
+ 'vmct' => 1,
957
+ 'vmr' => 1,
958
+ 'vmw' => 1,
959
+ 'vmsn' => 1,
960
+ 'vmrd' => 1,
961
+ 'vml' => 1,
962
+ 'vmo' => 1,
963
+ 'vms' => 1,
964
+ 'vmam' => 1,
965
+ 'vwpm' => 1,
966
  'caa' => 1,
967
  'vt_add_topic' => 1,
968
  ];
969
  $cans_moder = [
970
+ 'mf' => 0,
971
+ 'ms' => 0,
972
+ 'mt' => 0,
973
+ 'mp' => 0,
974
+ 'mth' => 0,
975
+ 'vm' => 0,
976
+ 'aum' => 1,
977
+ 'em' => 0,
978
+ 'vmg' => 0,
979
+ 'aup' => 1,
980
+ 'vmem' => 1,
981
+ 'view_stat' => 1,
982
+ 'vprf' => 1,
983
+ 'vpra' => 1,
984
+ 'vprs' => 1,
985
+ 'bm' => 1,
986
+ 'dm' => 1,
987
+ 'upc' => 1,
988
+ 'upa' => 1,
989
+ 'ups' => 1,
990
+ 'va' => 1,
991
+ 'vmu' => 0,
992
+ 'vmm' => 1,
993
+ 'vmt' => 1,
994
+ 'vmct' => 1,
995
+ 'vmr' => 1,
996
+ 'vmw' => 1,
997
+ 'vmsn' => 1,
998
+ 'vmrd' => 1,
999
+ 'vml' => 1,
1000
+ 'vmo' => 1,
1001
+ 'vms' => 1,
1002
+ 'vmam' => 1,
1003
+ 'vwpm' => 1,
1004
  'caa' => 1,
1005
  'vt_add_topic' => 1,
1006
  ];
1007
  $cans_reg = [
1008
+ 'mf' => 0,
1009
+ 'ms' => 0,
1010
+ 'mt' => 0,
1011
+ 'mp' => 0,
1012
+ 'mth' => 0,
1013
+ 'vm' => 0,
1014
+ 'aum' => 0,
1015
+ 'em' => 0,
1016
+ 'vmg' => 0,
1017
+ 'aup' => 1,
1018
+ 'vmem' => 1,
1019
+ 'view_stat' => 1,
1020
+ 'vprf' => 1,
1021
+ 'vpra' => 1,
1022
+ 'vprs' => 0,
1023
+ 'bm' => 0,
1024
+ 'dm' => 0,
1025
+ 'upc' => 1,
1026
+ 'upa' => 1,
1027
+ 'ups' => 1,
1028
+ 'va' => 1,
1029
+ 'vmu' => 0,
1030
+ 'vmm' => 0,
1031
+ 'vmt' => 1,
1032
+ 'vmct' => 1,
1033
+ 'vmr' => 1,
1034
+ 'vmw' => 1,
1035
+ 'vmsn' => 1,
1036
+ 'vmrd' => 1,
1037
+ 'vml' => 1,
1038
+ 'vmo' => 1,
1039
+ 'vms' => 1,
1040
+ 'vmam' => 1,
1041
+ 'vwpm' => 1,
1042
  'caa' => 1,
1043
  'vt_add_topic' => 1,
1044
  ];
1045
  $cans_guest = [
1046
+ 'mf' => 0,
1047
+ 'ms' => 0,
1048
+ 'mt' => 0,
1049
+ 'mp' => 0,
1050
+ 'mth' => 0,
1051
+ 'vm' => 0,
1052
+ 'aum' => 0,
1053
+ 'em' => 0,
1054
+ 'vmg' => 0,
1055
+ 'aup' => 0,
1056
+ 'vmem' => 1,
1057
+ 'view_stat' => 1,
1058
+ 'vprf' => 1,
1059
+ 'vpra' => 1,
1060
+ 'vprs' => 0,
1061
+ 'bm' => 0,
1062
+ 'dm' => 0,
1063
+ 'upc' => 0,
1064
+ 'upa' => 0,
1065
+ 'ups' => 0,
1066
+ 'va' => 1,
1067
+ 'vmu' => 0,
1068
+ 'vmm' => 0,
1069
+ 'vmt' => 1,
1070
+ 'vmct' => 1,
1071
+ 'vmr' => 1,
1072
+ 'vmw' => 0,
1073
+ 'vmsn' => 1,
1074
+ 'vmrd' => 1,
1075
+ 'vml' => 1,
1076
+ 'vmo' => 1,
1077
+ 'vms' => 1,
1078
+ 'vmam' => 1,
1079
+ 'vwpm' => 0,
1080
  'caa' => 1,
1081
  'vt_add_topic' => 0,
1082
  ];
1083
  $cans_customer = [
1084
+ 'mf' => 0,
1085
+ 'ms' => 0,
1086
+ 'mt' => 0,
1087
+ 'mp' => 0,
1088
+ 'mth' => 0,
1089
+ 'vm' => 0,
1090
+ 'aum' => 0,
1091
+ 'em' => 0,
1092
+ 'vmg' => 0,
1093
+ 'aup' => 0,
1094
+ 'vmem' => 1,
1095
+ 'view_stat' => 1,
1096
+ 'vprf' => 1,
1097
+ 'vpra' => 1,
1098
+ 'vprs' => 0,
1099
+ 'bm' => 0,
1100
+ 'dm' => 0,
1101
+ 'upc' => 1,
1102
+ 'upa' => 1,
1103
+ 'ups' => 1,
1104
+ 'va' => 1,
1105
+ 'vmu' => 0,
1106
+ 'vmm' => 0,
1107
+ 'vmt' => 1,
1108
+ 'vmct' => 1,
1109
+ 'vmr' => 1,
1110
+ 'vmw' => 1,
1111
+ 'vmsn' => 1,
1112
+ 'vmrd' => 1,
1113
+ 'vml' => 1,
1114
+ 'vmo' => 1,
1115
+ 'vms' => 1,
1116
+ 'vmam' => 1,
1117
+ 'vwpm' => 1,
1118
  'caa' => 1,
1119
  'vt_add_topic' => 1,
1120
  ];
1121
 
1122
  //Add new Cans in this array to add those in custom Usergroup created by forum admin
1123
+ $cans_defaults = [
1124
+ 'mf' => 0,
1125
+ 'ms' => 0,
1126
+ 'mt' => 0,
1127
+ 'mp' => 0,
1128
+ 'mth' => 0,
1129
+ 'vmem' => 1,
1130
+ 'view_stat' => 1,
1131
+ 'vprf' => 1,
1132
+ 'caa' => 1,
1133
+ 'vt_add_topic' => 1,
1134
+ 'upc' => 1,
1135
+ ];
1136
 
1137
  $sql = "SELECT * FROM `" . WPF()->tables->usergroups . "`";
1138
  if( ! $usergroups = WPF()->db->get_results( $sql, ARRAY_A ) ) {
1139
+ WPF()->usergroup->add( 'Admin', $cans_admin, '', 'administrator', 'full', '#FF3333' );
1140
+ WPF()->usergroup->add( 'Moderator', $cans_moder, '', 'editor', 'moderator', '#0066FF' );
1141
+ WPF()->usergroup->add( 'Registered', $cans_reg, '', 'subscriber', 'standard', '', 1, 1 );
1142
+ WPF()->usergroup->add( 'Guest', $cans_guest, '', '', 'read_only', '#222222', 0 );
1143
+ WPF()->usergroup->add( 'Customer', $cans_customer, '', 'customer', 'standard', '#993366', 1, 1 );
1144
  } else {
1145
  foreach( $usergroups as $usergroup ) {
1146
  $current = unserialize( $usergroup['cans'] );
1265
  }
1266
  }
1267
  }
1268
+ if( wpfval( $SQL, 'data' ) ) {
1269
+ foreach( $SQL['data'] as $query ) {
1270
+ WPF()->db->query( $query );
1271
+ }
1272
+ }
1273
  }
1274
  wpforo_update_option( 'version_db', WPFORO_VERSION );
1275
  }
1387
  }
1388
  }
1389
 
1390
+ $first_board = WPF()->db->get_row( "SELECT `boardid` FROM `" . WPF()->tables->boards . "` WHERE `boardid` = 0", ARRAY_A );
1391
+ if( empty($first_board) ){
1392
+ $_table_diffs['data']['default_board'] = 'no';
1393
+ }
1394
+
1395
  return $_table_diffs;
1396
  }
1397
 
1463
  }
1464
  }
1465
  }
1466
+ if( wpfval( $problems, 'data' ) ) {
1467
+ if( wpfval($problems, 'data', 'default_board') ){
1468
+ // Missing default board (ID:0)
1469
+ $board = [];
1470
+ $blogname = get_option( 'blogname', '' );
1471
+ $_general = wpforo_get_option( 'wpforo_general_options', [
1472
+ 'title' => $blogname . ' ' . __( 'Forum', 'wpforo' ),
1473
+ 'description' => $blogname . ' ' . __( 'Discussion Board', 'wpforo' )
1474
+ ], false );
1475
+ $board['title'] = ( wpfval($_general, 'title') ) ? : 'Forum';
1476
+ $board['settings']['title'] = ( wpfval($_general, 'title') ) ? : 'Forum';
1477
+ $board['settings']['desc'] = ( wpfval($_general, 'description') ) ? : 'Discussion Board';
1478
+ $settings = json_encode($board['settings']);
1479
+ $slug = basename( trim( wpforo_get_option( 'wpforo_permastruct', 'community', false ), '/' ) );
1480
+ $board['slug'] = ( $slug ) ? : 'community';
1481
+ $board['locale'] = wpforo_get_site_default_locale();
1482
+ $board['pageid'] = wpforo_get_option( 'wpforo_pageid', 0 );
1483
+ $all_modules = array_map( '__return_true', wpforo_get_modules_info() );
1484
+ $all_addons = array_map( '__return_true', wpforo_get_addons_info() );
1485
+ $modules = array_merge( $all_modules, $all_addons );
1486
+ $board['modules'] = json_encode( array_map( function( $a ) { return (bool) intval( $a ); }, $modules ));
1487
+ $SQL['data']['pre_board'] = "SET sql_mode='NO_AUTO_VALUE_ON_ZERO';";
1488
+ $SQL['data']['default_board'] = "INSERT INTO `" . WPF()->tables->boards . "` (`boardid`, `title`, `slug`, `pageid`, `modules`, `locale`, `is_standalone`, `excld_urls`, `status`, `settings`)
1489
+ VALUES(0, '" . esc_sql($board['title']) . "', '" . esc_sql($board['slug']) . "', " . intval($board['pageid']) . ",
1490
+ '" . esc_sql($board['modules']) . "',
1491
+ '" . esc_sql($board['locale']) . "', 0, '[]', 1, '" . esc_sql($settings) . "');";
1492
+ }
1493
+ //Other data checking here...
1494
+ }
1495
  }
1496
 
1497
  return $SQL;
integrations/functions.php CHANGED
@@ -133,4 +133,6 @@ include( WPFORO_DIR . '/integrations/legal.php' );
133
  ////////////////////////////////////////////////////////////////////////////////////////
134
  // Ultimate Member Integration /////////////////////////////////////////////////////////
135
  ////////////////////////////////////////////////////////////////////////////////////////
136
- include( WPFORO_DIR . '/integrations/UltimateMember.php' );
 
 
133
  ////////////////////////////////////////////////////////////////////////////////////////
134
  // Ultimate Member Integration /////////////////////////////////////////////////////////
135
  ////////////////////////////////////////////////////////////////////////////////////////
136
+ if( class_exists( 'UM' ) ){
137
+ include( WPFORO_DIR . '/integrations/UltimateMember.php' );
138
+ }
languages/wpforo.pot CHANGED
@@ -4,7 +4,7 @@
4
  msgid ""
5
  msgstr ""
6
  "Project-Id-Version: Forum - wpForo\n"
7
- "POT-Creation-Date: 2022-08-08 19:41+0400\n"
8
  "PO-Revision-Date: 2016-06-28 21:09+0400\n"
9
  "Last-Translator: \n"
10
  "Language-Team: \n"
@@ -123,7 +123,7 @@ msgstr ""
123
  msgid "Other"
124
  msgstr ""
125
 
126
- #: admin/includes/deactivation-dialog.php:142 includes/hooks.php:1260
127
  msgid "Please provide more information"
128
  msgstr ""
129
 
@@ -148,7 +148,7 @@ msgid "Overview"
148
  msgstr ""
149
 
150
  #: admin/index.php:54 admin/index.php:201 admin/pages/dashboard.php:25
151
- #: admin/tools-tabs/misc.php:67 includes/hooks.php:2168 includes/hooks.php:2372
152
  #: includes/phrases.php:309 integrations/BuddyPress.php:12
153
  #: integrations/BuddyPress.php:44 integrations/BuddyPress.php:117
154
  #: widgets/Forums.php:20
@@ -156,55 +156,55 @@ msgid "Forums"
156
  msgstr ""
157
 
158
  #: admin/index.php:59 admin/index.php:151 admin/index.php:206
159
- #: admin/pages/settings.php:163 includes/hooks.php:2184 includes/hooks.php:2388
160
- #: includes/hooks.php:2493
161
  msgid "Settings"
162
  msgstr ""
163
 
164
- #: admin/index.php:64 admin/index.php:211 includes/hooks.php:2202
165
- #: includes/hooks.php:2406
166
  msgid "Moderation"
167
  msgstr ""
168
 
169
- #: admin/index.php:69 admin/index.php:216 includes/hooks.php:2252
170
- #: includes/hooks.php:2415 includes/phrases.php:791
171
  msgid "Phrases"
172
  msgstr ""
173
 
174
- #: admin/index.php:74 admin/index.php:221 includes/hooks.php:2193
175
- #: includes/hooks.php:2397 includes/phrases.php:916
176
  msgid "Tools"
177
  msgstr ""
178
 
179
  #: admin/index.php:82 admin/index.php:136 admin/pages/board.php:16
180
- #: includes/hooks.php:10 includes/hooks.php:2436
181
  msgid "Boards"
182
  msgstr ""
183
 
184
- #: admin/index.php:86 admin/index.php:140 includes/hooks.php:2211
185
- #: includes/hooks.php:2452
186
  msgid "Accesses"
187
  msgstr ""
188
 
189
  #: admin/index.php:90 admin/index.php:144 admin/pages/usergroup.php:12
190
- #: admin/pages/usergroup.php:160 includes/hooks.php:2236 includes/hooks.php:2468
191
  msgid "Usergroups"
192
  msgstr ""
193
 
194
  #: admin/index.php:93 admin/index.php:147 admin/pages/dashboard.php:37
195
  #: admin/pages/member.php:10 admin/pages/usergroup.php:37
196
- #: admin/tools-tabs/misc.php:87 includes/hooks.php:2227 includes/hooks.php:2484
197
  #: includes/phrases.php:364
198
  msgid "Members"
199
  msgstr ""
200
 
201
- #: admin/index.php:97 admin/index.php:156 includes/hooks.php:2268
202
- #: includes/hooks.php:2502 includes/phrases.php:792
203
  msgid "Themes"
204
  msgstr ""
205
 
206
  #: admin/index.php:102 admin/index.php:161 admin/pages/board.php:116
207
- #: admin/pages/settings.php:22 includes/hooks.php:2277 includes/hooks.php:2511
208
  #: includes/phrases.php:211
209
  msgid "Addons"
210
  msgstr ""
@@ -243,7 +243,7 @@ msgid "Edit"
243
  msgstr ""
244
 
245
  #: admin/listtables/Boards.php:86 admin/listtables/Moderations.php:94
246
- #: admin/pages/forum.php:278 admin/pages/usergroup.php:78 classes/Forums.php:823
247
  #: includes/phrases.php:541
248
  msgid "View"
249
  msgstr ""
@@ -258,10 +258,10 @@ msgstr ""
258
 
259
  #: admin/listtables/Boards.php:88 admin/listtables/Members.php:104
260
  #: admin/listtables/Members.php:260 admin/listtables/Moderations.php:103
261
- #: admin/listtables/Moderations.php:208 admin/pages/forum.php:277
262
  #: admin/pages/themes.php:68 admin/pages/usergroup.php:76
263
  #: admin/pages/usergroup.php:295 admin/settings/antispam.php:64
264
- #: includes/hooks.php:1244 includes/phrases.php:252
265
  msgid "Delete"
266
  msgstr ""
267
 
@@ -360,7 +360,7 @@ msgstr ""
360
  msgid "Group"
361
  msgstr ""
362
 
363
- #: admin/listtables/Members.php:179 admin/pages/board.php:183
364
  #: admin/pages/usergroup.php:162 includes/phrases.php:17
365
  msgid "Status"
366
  msgstr ""
@@ -418,7 +418,7 @@ msgid "Are you sure you want to DELETE this item?"
418
  msgstr ""
419
 
420
  #: admin/listtables/Moderations.php:152 includes/phrases.php:520
421
- #: widgets/Forums.php:64 widgets/OnlineMembers.php:59 widgets/RecentPosts.php:231
422
  #: widgets/RecentTopics.php:130 widgets/Search.php:38 widgets/Tags.php:47
423
  msgid "Title"
424
  msgstr ""
@@ -489,8 +489,8 @@ msgid ""
489
  msgstr ""
490
 
491
  #: admin/pages/accesses.php:21 admin/pages/board.php:152 admin/pages/forum.php:56
492
- #: admin/pages/forum.php:243 admin/pages/forum.php:290 admin/pages/forum.php:330
493
- #: admin/pages/forum.php:406 admin/pages/forum.php:414 admin/pages/phrase.php:167
494
  #: admin/pages/usergroup.php:30 admin/pages/usergroup.php:36
495
  #: admin/pages/usergroup.php:342 admin/settings/board.php:15
496
  #: admin/settings/general.php:24 admin/settings/styles.php:12
@@ -498,7 +498,7 @@ msgstr ""
498
  msgid "Read the documentation"
499
  msgstr ""
500
 
501
- #: admin/pages/accesses.php:29 includes/hooks.php:2218 includes/hooks.php:2459
502
  #: includes/phrases.php:207
503
  msgid "Add New Forum Access"
504
  msgstr ""
@@ -543,7 +543,7 @@ msgstr ""
543
  msgid "Access name"
544
  msgstr ""
545
 
546
- #: admin/pages/accesses.php:131 admin/pages/board.php:191
547
  #: admin/pages/phrase.php:70 includes/phrases.php:456
548
  msgid "Save"
549
  msgstr ""
@@ -662,12 +662,12 @@ msgid "Modules"
662
  msgstr ""
663
 
664
  #: admin/pages/board.php:109 admin/pages/board.php:132 admin/pages/board.php:156
665
- #: admin/pages/board.php:185
666
  msgid "Enabled"
667
  msgstr ""
668
 
669
  #: admin/pages/board.php:110 admin/pages/board.php:133 admin/pages/board.php:157
670
- #: admin/pages/board.php:186
671
  msgid "Disabled"
672
  msgstr ""
673
 
@@ -697,7 +697,7 @@ msgstr ""
697
  msgid "one URL per line"
698
  msgstr ""
699
 
700
- #: admin/pages/dashboard.php:7 includes/hooks.php:2160
701
  msgid "Forum Dashboard"
702
  msgstr ""
703
 
@@ -780,11 +780,11 @@ msgstr ""
780
  msgid "Rebuild Threads"
781
  msgstr ""
782
 
783
- #: admin/pages/forum.php:15 includes/functions.php:751 includes/phrases.php:487
784
  msgid "Show on screen"
785
  msgstr ""
786
 
787
- #: admin/pages/forum.php:17 admin/pages/forum.php:243 includes/phrases.php:299
788
  msgid "Forum Options"
789
  msgstr ""
790
 
@@ -808,7 +808,7 @@ msgstr ""
808
  msgid "Number of Columns"
809
  msgstr ""
810
 
811
- #: admin/pages/forum.php:34 includes/functions.php:765 includes/phrases.php:460
812
  msgid "Screen Options"
813
  msgstr ""
814
 
@@ -842,77 +842,77 @@ msgstr ""
842
  msgid "Save forums order and hierarchy"
843
  msgstr ""
844
 
845
- #: admin/pages/forum.php:228 includes/phrases.php:273
846
  msgid "Enter forum title here"
847
  msgstr ""
848
 
849
- #: admin/pages/forum.php:233 includes/phrases.php:272
850
  msgid "Enter description here . . ."
851
  msgstr ""
852
 
853
- #: admin/pages/forum.php:234 includes/phrases.php:515
854
  msgid ""
855
  "This is a forum description. This content will be displayed under forum title "
856
  "on the forum list."
857
  msgstr ""
858
 
859
- #: admin/pages/forum.php:246 includes/phrases.php:407
860
  msgid "Parent Forum"
861
  msgstr ""
862
 
863
- #: admin/pages/forum.php:249 includes/phrases.php:390
864
  msgid "No parent"
865
  msgstr ""
866
 
867
- #: admin/pages/forum.php:254 includes/phrases.php:532
868
  msgid "Use as Category"
869
  msgstr ""
870
 
871
- #: admin/pages/forum.php:256 includes/phrases.php:238
872
  msgid "Category Layout"
873
  msgstr ""
874
 
875
- #: admin/pages/forum.php:265 includes/phrases.php:388
876
  msgid "No layout found."
877
  msgstr ""
878
 
879
- #: admin/pages/forum.php:273 admin/pages/forum.php:281 includes/phrases.php:420
880
  msgid "Publish"
881
  msgstr ""
882
 
883
- #: admin/pages/forum.php:277 includes/phrases.php:223
884
  msgid "Are you sure you want to delete this forum?"
885
  msgstr ""
886
 
887
- #: admin/pages/forum.php:279 admin/pages/phrase.php:108 includes/phrases.php:529
888
  msgid "Update"
889
  msgstr ""
890
 
891
- #: admin/pages/forum.php:290
892
  msgid "Forum Permissions"
893
  msgstr ""
894
 
895
- #: admin/pages/forum.php:299
896
  msgid "Additional Options"
897
  msgstr ""
898
 
899
- #: admin/pages/forum.php:302
900
  msgid "Forum Color"
901
  msgstr ""
902
 
903
- #: admin/pages/forum.php:323
904
  msgid "Current layout and cover image of this category"
905
  msgstr ""
906
 
907
- #: admin/pages/forum.php:325
908
  msgid "Current layout of this forum (inherited from parent category)"
909
  msgstr ""
910
 
911
- #: admin/pages/forum.php:328
912
  msgid "Category layout and cover image"
913
  msgstr ""
914
 
915
- #: admin/pages/forum.php:348
916
  msgid ""
917
  "Forums can be displayed with different layouts (Extended, Simplified, Q&A, "
918
  "Threaded). Use the \"Category Layout\" dropdown located on the top right "
@@ -922,77 +922,77 @@ msgid ""
922
  "disabled if this forum is not a Category."
923
  msgstr ""
924
 
925
- #: admin/pages/forum.php:355
926
  msgid "Category Cover Image"
927
  msgstr ""
928
 
929
- #: admin/pages/forum.php:359 admin/pages/forum.php:364
930
  msgid "Upload image"
931
  msgstr ""
932
 
933
- #: admin/pages/forum.php:360 admin/pages/forum.php:365
934
  msgid "Remove image"
935
  msgstr ""
936
 
937
- #: admin/pages/forum.php:379
938
  msgid "Insert image"
939
  msgstr ""
940
 
941
- #: admin/pages/forum.php:381
942
  msgid "Use this image"
943
  msgstr ""
944
 
945
- #: admin/pages/forum.php:406 includes/phrases.php:304
946
  msgid "Forum Slug"
947
  msgstr ""
948
 
949
- #: admin/pages/forum.php:409 includes/phrases.php:508
950
  msgid ""
951
  "The \"slug\" is the URL-friendly version of the name. It is usually all "
952
  "lowercase and contains only letters, numbers, and hyphens."
953
  msgstr ""
954
 
955
- #: admin/pages/forum.php:414
956
  msgid "Forum Icon"
957
  msgstr ""
958
 
959
- #: admin/pages/forum.php:417
960
  msgid "Font-awesome Icon"
961
  msgstr ""
962
 
963
- #: admin/pages/forum.php:419
964
  msgid "You can find all icons"
965
  msgstr ""
966
 
967
- #: admin/pages/forum.php:419
968
  msgid "here"
969
  msgstr ""
970
 
971
- #: admin/pages/forum.php:419
972
  msgid ""
973
  "Make sure you insert a class of font-awesome icon, it should start with fa- "
974
  "prefix like &quot;fas fa-comments&quot;."
975
  msgstr ""
976
 
977
- #: admin/pages/forum.php:425 includes/phrases.php:302
978
  msgid "Forum SEO Description"
979
  msgstr ""
980
 
981
- #: admin/pages/forum.php:428 includes/phrases.php:370
982
  msgid "Meta Description"
983
  msgstr ""
984
 
985
- #: admin/pages/forum.php:458 includes/phrases.php:514
986
  msgid "This action will also delete all sub-forums, topics and replies."
987
  msgstr ""
988
 
989
- #: admin/pages/forum.php:466 includes/phrases.php:323
990
  msgid ""
991
  "If you want to delete this forum and keep its sub-forums, topics and replies, "
992
  "please select a new target forum in dropdown below"
993
  msgstr ""
994
 
995
- #: admin/pages/forum.php:475 includes/phrases.php:212
996
  msgid ""
997
  "All sub-forums, topics and replies will be attached to selected forum. Layout "
998
  "will be inherited from this forum."
@@ -1260,7 +1260,7 @@ msgstr ""
1260
  msgid "Debug"
1261
  msgstr ""
1262
 
1263
- #: admin/pages/tools.php:11 admin/tools-tabs/tables.php:116
1264
  msgid "Database Tables"
1265
  msgstr ""
1266
 
@@ -1277,7 +1277,7 @@ msgstr ""
1277
  msgid "Usergroup"
1278
  msgstr ""
1279
 
1280
- #: admin/pages/usergroup.php:38 classes/Settings.php:1125 includes/hooks.php:1236
1281
  msgid "Default"
1282
  msgstr ""
1283
 
@@ -2001,7 +2001,7 @@ msgstr ""
2001
  msgid "Dashboard - Can delete member"
2002
  msgstr ""
2003
 
2004
- #: admin/tools-tabs/debug.php:256 classes/UserGroups.php:76
2005
  #: includes/phrases.php:734
2006
  msgid "Front - Can view member username"
2007
  msgstr ""
@@ -2037,30 +2037,25 @@ msgstr ""
2037
  msgid "How to Fix WordPress Not Sending Email Issue"
2038
  msgstr ""
2039
 
2040
- #: admin/tools-tabs/debug.php:299
2041
  msgid "wpForo phrases are missing!"
2042
  msgstr ""
2043
 
2044
- #: admin/tools-tabs/debug.php:300
2045
  msgid ""
2046
- "Please download wpForo Phrases XML compressed file, unzip it, find english.xml "
2047
- "file, navigate to Forums > Settings > General Tab and import it using [Add "
2048
- "New] button of \"XML Based Language\" option."
2049
  msgstr ""
2050
 
2051
- #: admin/tools-tabs/debug.php:300
2052
- msgid "Download wpForo Phrases"
2053
- msgstr ""
2054
-
2055
- #: admin/tools-tabs/debug.php:317
2056
  msgid "No issues found"
2057
  msgstr ""
2058
 
2059
- #: admin/tools-tabs/debug.php:333
2060
  msgid "Error Log File"
2061
  msgstr ""
2062
 
2063
- #: admin/tools-tabs/debug.php:340
2064
  msgid "No errors found"
2065
  msgstr ""
2066
 
@@ -2170,7 +2165,7 @@ msgstr ""
2170
  msgid "Problem fixer SQL commands:"
2171
  msgstr ""
2172
 
2173
- #: admin/tools-tabs/tables.php:112
2174
  msgid "No Problems Found in Database"
2175
  msgstr ""
2176
 
@@ -2191,133 +2186,127 @@ msgstr ""
2191
  msgid "User registration is disabled"
2192
  msgstr ""
2193
 
2194
- #: classes/Actions.php:2044 classes/Template.php:2358 includes/phrases.php:513
2195
  msgid "Theme file not readable"
2196
  msgstr ""
2197
 
2198
- #: classes/Actions.php:2050
2199
  msgid "Theme Successfully Activated"
2200
  msgstr ""
2201
 
2202
- #: classes/Actions.php:2071
2203
  msgid "Theme delete error"
2204
  msgstr ""
2205
 
2206
- #: classes/Actions.php:2078
2207
  msgid "Theme delete success"
2208
  msgstr ""
2209
 
2210
- #: classes/Cache.php:385
2211
  msgid "Please navigate in Dashboard to Settings > WP Super Cache"
2212
  msgstr ""
2213
 
2214
- #: classes/Cache.php:386
2215
  msgid "Go to Advanced Tab, scroll down to \"Rejected URL Strings\" option"
2216
  msgstr ""
2217
 
2218
- #: classes/Cache.php:387 classes/Cache.php:395
2219
  msgid ""
2220
  "Insert the URL path(s) of your forum page(s) one per line in the option "
2221
  "textarea:"
2222
  msgstr ""
2223
 
2224
- #: classes/Cache.php:387 classes/Cache.php:395 classes/Cache.php:403
2225
- #: classes/Cache.php:411 classes/Cache.php:420 classes/Cache.php:428
2226
- #: classes/Cache.php:436 includes/phrases.php:143
2227
- msgid "and"
2228
- msgstr ""
2229
-
2230
- #: classes/Cache.php:388 classes/Cache.php:396 classes/Cache.php:404
2231
- #: classes/Cache.php:421 classes/Cache.php:429 classes/Cache.php:437
2232
  msgid "Save it and delete all caches."
2233
  msgstr ""
2234
 
2235
- #: classes/Cache.php:393
2236
  msgid "Please navigate in Dashboard to LiteSpeed Cache > Cache admin page"
2237
  msgstr ""
2238
 
2239
- #: classes/Cache.php:394
2240
  msgid "Go to Exclude Tab, find the \"Do Not Cache URIs\" option"
2241
  msgstr ""
2242
 
2243
- #: classes/Cache.php:401
2244
  msgid "Please navigate in Dashboard to WP Rocket > Advanced Rules Tab"
2245
  msgstr ""
2246
 
2247
- #: classes/Cache.php:402
2248
  msgid "Scroll down to \"Never cache (URLs)\" option"
2249
  msgstr ""
2250
 
2251
- #: classes/Cache.php:403
2252
  msgid ""
2253
  "Insert the URL path(s) of your forum page(s) one per line with wildcard (.*) "
2254
  "in the option textarea:"
2255
  msgstr ""
2256
 
2257
- #: classes/Cache.php:409
2258
  msgid "Please navigate in Dashboard to WP Fastest Cache > Exclude Tab"
2259
  msgstr ""
2260
 
2261
- #: classes/Cache.php:410
2262
  msgid "In the \"Exclude Pages\" section click the [Add New Rule] button"
2263
  msgstr ""
2264
 
2265
- #: classes/Cache.php:411
2266
  msgid ""
2267
  "Select [Start with] option in the drop-down menu and insert the URL path(s) of "
2268
  "your forum page(s) one per rule in the next field:"
2269
  msgstr ""
2270
 
2271
- #: classes/Cache.php:412
2272
  msgid ""
2273
  "If you have more than one forum pages (boards) you should create separate "
2274
  "rules for each forum board."
2275
  msgstr ""
2276
 
2277
- #: classes/Cache.php:413
2278
  msgid "Save rules and delete all caches."
2279
  msgstr ""
2280
 
2281
- #: classes/Cache.php:418
2282
  msgid "Please navigate in Dashboard to Performance > Page Cache admin page"
2283
  msgstr ""
2284
 
2285
- #: classes/Cache.php:419
2286
  msgid "Go to Advanced Tab, scroll down to Rejected URL Strings option"
2287
  msgstr ""
2288
 
2289
- #: classes/Cache.php:420
2290
  msgid ""
2291
  "Scroll to Advanced section and insert the URL path(s) of your forum page(s) "
2292
  "one per line in the \"Never cache the following pages\" textarea:"
2293
  msgstr ""
2294
 
2295
- #: classes/Cache.php:426
2296
  msgid "Please navigate in Dashboard to WP-Optimize > Cache admin page"
2297
  msgstr ""
2298
 
2299
- #: classes/Cache.php:427
2300
  msgid ""
2301
  "Go to Advanced Settings Tab, find the \"URLs to exclude from caching\" option"
2302
  msgstr ""
2303
 
2304
- #: classes/Cache.php:428
2305
  msgid ""
2306
  "Insert the URL path(s) of your forum page(s) one per line with wildcard [*] in "
2307
  "the option textarea:"
2308
  msgstr ""
2309
 
2310
- #: classes/Cache.php:434
2311
  msgid "Please navigate in Dashboard to SG Optimizer > Caching admin page"
2312
  msgstr ""
2313
 
2314
- #: classes/Cache.php:435
2315
  msgid ""
2316
  "Scroll to Exclude URLs from Caching section and click the \"pencil\" button, "
2317
  "enable it, and click the button again"
2318
  msgstr ""
2319
 
2320
- #: classes/Cache.php:436
2321
  msgid ""
2322
  "Insert the URL path(s) of your forum page(s) with wildcard [*] in the pop-up "
2323
  "filed:"
@@ -2331,53 +2320,53 @@ msgstr ""
2331
  msgid "Add a new Forum in this Category"
2332
  msgstr ""
2333
 
2334
- #: classes/Members.php:405
2335
  msgid "<strong>ERROR</strong>: Please enter a username."
2336
  msgstr ""
2337
 
2338
- #: classes/Members.php:410
2339
  msgid ""
2340
  "<strong>ERROR</strong>: This username is invalid because it uses illegal "
2341
  "characters. Please enter a valid username."
2342
  msgstr ""
2343
 
2344
- #: classes/Members.php:419
2345
  msgid ""
2346
  "<strong>ERROR</strong>: This username is already registered. Please choose "
2347
  "another one."
2348
  msgstr ""
2349
 
2350
- #: classes/Members.php:424
2351
  msgid "<strong>ERROR</strong>: Sorry, that username is not allowed."
2352
  msgstr ""
2353
 
2354
- #: classes/Members.php:429
2355
  msgid "<strong>ERROR</strong>: Please type your email address."
2356
  msgstr ""
2357
 
2358
- #: classes/Members.php:434
2359
  msgid "<strong>ERROR</strong>: The email address isn&#8217;t correct."
2360
  msgstr ""
2361
 
2362
- #: classes/Members.php:439
2363
  msgid ""
2364
  "<strong>ERROR</strong>: This email is already registered, please choose "
2365
  "another one."
2366
  msgstr ""
2367
 
2368
- #: classes/Members.php:1803
2369
  msgid "What should be done with wpForo content owned by this user?"
2370
  msgstr ""
2371
 
2372
- #: classes/Members.php:1806
2373
  msgid "What should be done with wpForo content owned by these users?"
2374
  msgstr ""
2375
 
2376
- #: classes/Members.php:1810
2377
  msgid "Delete all wpForo content."
2378
  msgstr ""
2379
 
2380
- #: classes/Members.php:1812
2381
  msgid "Attribute all content to:"
2382
  msgstr ""
2383
 
@@ -4190,7 +4179,7 @@ msgstr ""
4190
  msgid "Exclude file extensions"
4191
  msgstr ""
4192
 
4193
- #: classes/Settings.php:2297 includes/hooks.php:2617
4194
  msgid "Google reCAPTCHA"
4195
  msgstr ""
4196
 
@@ -4688,7 +4677,7 @@ msgstr ""
4688
  msgid "Minute"
4689
  msgstr ""
4690
 
4691
- #: classes/Settings.php:3285 includes/hooks.php:1508 includes/phrases.php:433
4692
  msgid "Rating Level"
4693
  msgstr ""
4694
 
@@ -4720,7 +4709,7 @@ msgstr ""
4720
  msgid "More"
4721
  msgstr ""
4722
 
4723
- #: classes/Settings.php:3298 includes/hooks.php:1521 includes/phrases.php:344
4724
  msgid "Level"
4725
  msgstr ""
4726
 
@@ -4737,8 +4726,8 @@ msgid "Badge Icon"
4737
  msgstr ""
4738
 
4739
  #: classes/Settings.php:3776 includes/installation.php:542
4740
- #: includes/options-migration.php:19 includes/options-migration.php:98
4741
- #: includes/phrases.php:287
4742
  msgid "Forum"
4743
  msgstr ""
4744
 
@@ -4927,71 +4916,75 @@ msgstr ""
4927
  msgid "Front - Can view member subscriptions"
4928
  msgstr ""
4929
 
4930
- #: classes/UserGroups.php:72 includes/phrases.php:731
 
 
 
 
4931
  msgid "Front - Can upload avatar"
4932
  msgstr ""
4933
 
4934
- #: classes/UserGroups.php:73 includes/phrases.php:732
4935
  msgid "Front - Can have signature"
4936
  msgstr ""
4937
 
4938
- #: classes/UserGroups.php:74 includes/phrases.php:733
4939
  msgid "Front - Can view avatars"
4940
  msgstr ""
4941
 
4942
- #: classes/UserGroups.php:77 includes/phrases.php:735
4943
  msgid "Front - Can view member email"
4944
  msgstr ""
4945
 
4946
- #: classes/UserGroups.php:78 includes/phrases.php:736
4947
  msgid "Front - Can view member title"
4948
  msgstr ""
4949
 
4950
- #: classes/UserGroups.php:79
4951
  msgid "Front - Can view member custom title"
4952
  msgstr ""
4953
 
4954
- #: classes/UserGroups.php:80 includes/phrases.php:737
4955
  msgid "Front - Can view member reputation"
4956
  msgstr ""
4957
 
4958
- #: classes/UserGroups.php:81 includes/phrases.php:738
4959
  msgid "Front - Can view member website"
4960
  msgstr ""
4961
 
4962
- #: classes/UserGroups.php:82 includes/phrases.php:739
4963
  msgid "Front - Can view member social networks"
4964
  msgstr ""
4965
 
4966
- #: classes/UserGroups.php:83 includes/phrases.php:740
4967
  msgid "Front - Can view member reg. date"
4968
  msgstr ""
4969
 
4970
- #: classes/UserGroups.php:84 includes/phrases.php:741
4971
  msgid "Front - Can view member location"
4972
  msgstr ""
4973
 
4974
- #: classes/UserGroups.php:85 includes/phrases.php:742
4975
  msgid "Front - Can view member occupation"
4976
  msgstr ""
4977
 
4978
- #: classes/UserGroups.php:86 includes/phrases.php:743
4979
  msgid "Front - Can view member signature"
4980
  msgstr ""
4981
 
4982
- #: classes/UserGroups.php:87 includes/phrases.php:744
4983
  msgid "Front - Can view member about me"
4984
  msgstr ""
4985
 
4986
- #: classes/UserGroups.php:88 includes/phrases.php:745
4987
  msgid "Front - Can write PM"
4988
  msgstr ""
4989
 
4990
- #: classes/UserGroups.php:89
4991
  msgid "Front - Can access to attachments"
4992
  msgstr ""
4993
 
4994
- #: classes/UserGroups.php:90
4995
  msgid "Front - Can access to add topic page"
4996
  msgstr ""
4997
 
@@ -4999,7 +4992,7 @@ msgstr ""
4999
  msgid "wpForo Menu"
5000
  msgstr ""
5001
 
5002
- #: includes/functions-template.php:2227
5003
  msgid "No Title"
5004
  msgstr ""
5005
 
@@ -5142,21 +5135,15 @@ msgid ""
5142
  "WooCommerce Memberships plugin."
5143
  msgstr ""
5144
 
5145
- #: includes/functions.php:352
5146
- msgid ""
5147
- "Helps to migrate from bbPress, phpBB, SMF, MyBB, Simple:Press and other forum "
5148
- "pieces of software and plugins to wpForo."
5149
- msgstr ""
5150
-
5151
- #: includes/functions.php:755 includes/phrases.php:327
5152
  msgid "Items"
5153
  msgstr ""
5154
 
5155
- #: includes/functions.php:756 includes/phrases.php:222
5156
  msgid "Apply"
5157
  msgstr ""
5158
 
5159
- #: includes/functions.php:1226
5160
  #, php-format
5161
  msgid "Could not write file %s"
5162
  msgstr ""
@@ -5175,66 +5162,66 @@ msgstr ""
5175
  msgid "Uninstall"
5176
  msgstr ""
5177
 
5178
- #: includes/hooks.php:1235
5179
  msgid "Clear"
5180
  msgstr ""
5181
 
5182
- #: includes/hooks.php:1237
5183
  msgid "Select Color"
5184
  msgstr ""
5185
 
5186
- #: includes/hooks.php:1243 includes/phrases.php:183
5187
  msgid "Move"
5188
  msgstr ""
5189
 
5190
- #: includes/hooks.php:1259
5191
  msgid "Please choose one reasons before sending a feedback!"
5192
  msgstr ""
5193
 
5194
- #: includes/hooks.php:1261
5195
  msgid ""
5196
  "With the email address, please check the \"I agree to receive email\" checkbox "
5197
  "to proceed."
5198
  msgstr ""
5199
 
5200
- #: includes/hooks.php:1262
5201
  msgid "Please fill your email address for feedback"
5202
  msgstr ""
5203
 
5204
- #: includes/hooks.php:1263
5205
  msgid "Your email address is not valid"
5206
  msgstr ""
5207
 
5208
- #: includes/hooks.php:1328
5209
  msgid ""
5210
  "IMPORTANT: wpForo can't work with default permalink, please change permalink "
5211
  "structure"
5212
  msgstr ""
5213
 
5214
- #: includes/hooks.php:1413
5215
  msgid "Forum Profile Fields - wpForo"
5216
  msgstr ""
5217
 
5218
- #: includes/hooks.php:1422
5219
  msgid "Forum - Usergroup"
5220
  msgstr ""
5221
 
5222
- #: includes/hooks.php:1427
5223
  #, php-format
5224
  msgid ""
5225
  "Forum Usergroups are synched with User Roles based on the %s. When you change "
5226
  "this user Role the Usergroup is automatically changed according to that table."
5227
  msgstr ""
5228
 
5229
- #: includes/hooks.php:1434
5230
  msgid "Synced with user role"
5231
  msgstr ""
5232
 
5233
- #: includes/hooks.php:1439
5234
  msgid "Role-Usergroup Synchronization is Turned ON!"
5235
  msgstr ""
5236
 
5237
- #: includes/hooks.php:1442
5238
  msgid ""
5239
  "This user Usergroup is automatically changed according to current Role. If you "
5240
  "want to disable Role-Usergroup synchronization and manage Usergroups and User "
@@ -5242,19 +5229,19 @@ msgid ""
5242
  "admin page and disable \"Role-Usergroup Synchronization\" option."
5243
  msgstr ""
5244
 
5245
- #: includes/hooks.php:1456
5246
  msgid "Forum - Secondary Usergroups"
5247
  msgstr ""
5248
 
5249
- #: includes/hooks.php:1480
5250
  msgid "Forum - User Timezone"
5251
  msgstr ""
5252
 
5253
- #: includes/hooks.php:1491
5254
  msgid "User Reputation"
5255
  msgstr ""
5256
 
5257
- #: includes/hooks.php:1493
5258
  msgid ""
5259
  "By default all members get rating badges and titles based on number of posts. "
5260
  "However, using this option you can grant lower or higher rating to certain "
@@ -5262,49 +5249,49 @@ msgid ""
5262
  "be managed in Forums > Settings > Members Tab."
5263
  msgstr ""
5264
 
5265
- #: includes/hooks.php:1498
5266
  msgid "Default Rating"
5267
  msgstr ""
5268
 
5269
- #: includes/hooks.php:1501
5270
  msgid "Custom Rating"
5271
  msgstr ""
5272
 
5273
- #: includes/hooks.php:1509 includes/phrases.php:865
5274
  msgid "Rating Title"
5275
  msgstr ""
5276
 
5277
- #: includes/hooks.php:1510 includes/phrases.php:430
5278
  msgid "Rating Badge"
5279
  msgstr ""
5280
 
5281
- #: includes/hooks.php:2127 includes/hooks.php:2175 includes/hooks.php:2311
5282
- #: includes/hooks.php:2379
5283
  msgid "Add New Forum"
5284
  msgstr ""
5285
 
5286
- #: includes/hooks.php:2134 includes/hooks.php:2318
5287
  msgid "Add New User Group"
5288
  msgstr ""
5289
 
5290
- #: includes/hooks.php:2141 includes/hooks.php:2259 includes/hooks.php:2325
5291
- #: includes/hooks.php:2422
5292
  msgid "Add New Phrase"
5293
  msgstr ""
5294
 
5295
- #: includes/hooks.php:2150 includes/hooks.php:2362
5296
  msgid "Visit Forum"
5297
  msgstr ""
5298
 
5299
- #: includes/hooks.php:2243 includes/hooks.php:2475
5300
  msgid "Add New Usergroup"
5301
  msgstr ""
5302
 
5303
- #: includes/hooks.php:2443
5304
  msgid "Add New Board"
5305
  msgstr ""
5306
 
5307
- #: includes/hooks.php:2616 includes/phrases.php:1086
5308
  #, php-format
5309
  msgid ""
5310
  "IMPORTANT! The forum registration form is probably under risk of spam attacks. "
@@ -5314,17 +5301,17 @@ msgid ""
5314
  "dismiss this message."
5315
  msgstr ""
5316
 
5317
- #: includes/hooks.php:2646
5318
  msgid "wpForo Polls addon is disabled!"
5319
  msgstr ""
5320
 
5321
- #: includes/hooks.php:2646
5322
  msgid ""
5323
  " Your addon version is not compatible with the current version of wpForo. "
5324
  "Please update the addon or downgrade wpForo to 1.7.7"
5325
  msgstr ""
5326
 
5327
- #: includes/hooks.php:2647
5328
  msgid "dismiss"
5329
  msgstr ""
5330
 
@@ -5413,23 +5400,24 @@ msgid ""
5413
  "The user login and logout actions will also be corrupted."
5414
  msgstr ""
5415
 
5416
- #: includes/installation.php:543 includes/options-migration.php:20
 
5417
  msgid "Discussion Board"
5418
  msgstr ""
5419
 
5420
- #: includes/installation.php:1154
5421
  msgid "Main Category"
5422
  msgstr ""
5423
 
5424
- #: includes/installation.php:1154
5425
  msgid "This is a simple category / section"
5426
  msgstr ""
5427
 
5428
- #: includes/installation.php:1155
5429
  msgid "Main Forum"
5430
  msgstr ""
5431
 
5432
- #: includes/installation.php:1155
5433
  msgid "This is a simple parent forum"
5434
  msgstr ""
5435
 
@@ -6059,6 +6047,10 @@ msgstr ""
6059
  msgid "I agree to receive an email confirmation with a link to set a password."
6060
  msgstr ""
6061
 
 
 
 
 
6062
  #: includes/phrases.php:144
6063
  msgid "Privacy Policy"
6064
  msgstr ""
@@ -6415,7 +6407,7 @@ msgstr ""
6415
  msgid "Display Avatars"
6416
  msgstr ""
6417
 
6418
- #: includes/phrases.php:258 widgets/RecentPosts.php:290
6419
  msgid "Display with Avatars"
6420
  msgstr ""
6421
 
@@ -6757,7 +6749,7 @@ msgid "No topics were found here"
6757
  msgstr ""
6758
 
6759
  #: includes/phrases.php:396 widgets/OnlineMembers.php:74
6760
- #: widgets/RecentPosts.php:281 widgets/RecentTopics.php:170 widgets/Tags.php:63
6761
  msgid "Number of Items"
6762
  msgstr ""
6763
 
@@ -9008,31 +9000,31 @@ msgstr ""
9008
  msgid "ASC"
9009
  msgstr ""
9010
 
9011
- #: widgets/RecentPosts.php:237 widgets/RecentTopics.php:136
9012
  msgid "Filter by forums"
9013
  msgstr ""
9014
 
9015
- #: widgets/RecentPosts.php:248 widgets/RecentTopics.php:147
9016
  msgid "Autofilter by current forum"
9017
  msgstr ""
9018
 
9019
- #: widgets/RecentPosts.php:255 widgets/RecentTopics.php:154
9020
  msgid "Order by"
9021
  msgstr ""
9022
 
9023
- #: widgets/RecentPosts.php:273
9024
  msgid "Limit Per Topic"
9025
  msgstr ""
9026
 
9027
- #: widgets/RecentPosts.php:278
9028
  msgid "set 0 to remove this limit"
9029
  msgstr ""
9030
 
9031
- #: widgets/RecentPosts.php:297
9032
  msgid "Display Only Unread Posts"
9033
  msgstr ""
9034
 
9035
- #: widgets/RecentPosts.php:304
9036
  msgid "Display [new] indicator"
9037
  msgstr ""
9038
 
@@ -9044,11 +9036,11 @@ msgstr ""
9044
  msgid "Views Count"
9045
  msgstr ""
9046
 
9047
- #: widgets/RecentTopics.php:177
9048
  msgid "Display with avatars"
9049
  msgstr ""
9050
 
9051
- #: widgets/RecentTopics.php:183
9052
  msgid "Refer topics to first unread post"
9053
  msgstr ""
9054
 
4
  msgid ""
5
  msgstr ""
6
  "Project-Id-Version: Forum - wpForo\n"
7
+ "POT-Creation-Date: 2022-08-19 15:57+0400\n"
8
  "PO-Revision-Date: 2016-06-28 21:09+0400\n"
9
  "Last-Translator: \n"
10
  "Language-Team: \n"
123
  msgid "Other"
124
  msgstr ""
125
 
126
+ #: admin/includes/deactivation-dialog.php:142 includes/hooks.php:1284
127
  msgid "Please provide more information"
128
  msgstr ""
129
 
148
  msgstr ""
149
 
150
  #: admin/index.php:54 admin/index.php:201 admin/pages/dashboard.php:25
151
+ #: admin/tools-tabs/misc.php:67 includes/hooks.php:2192 includes/hooks.php:2396
152
  #: includes/phrases.php:309 integrations/BuddyPress.php:12
153
  #: integrations/BuddyPress.php:44 integrations/BuddyPress.php:117
154
  #: widgets/Forums.php:20
156
  msgstr ""
157
 
158
  #: admin/index.php:59 admin/index.php:151 admin/index.php:206
159
+ #: admin/pages/settings.php:163 includes/hooks.php:2208 includes/hooks.php:2412
160
+ #: includes/hooks.php:2517
161
  msgid "Settings"
162
  msgstr ""
163
 
164
+ #: admin/index.php:64 admin/index.php:211 includes/hooks.php:2226
165
+ #: includes/hooks.php:2430
166
  msgid "Moderation"
167
  msgstr ""
168
 
169
+ #: admin/index.php:69 admin/index.php:216 includes/hooks.php:2276
170
+ #: includes/hooks.php:2439 includes/phrases.php:791
171
  msgid "Phrases"
172
  msgstr ""
173
 
174
+ #: admin/index.php:74 admin/index.php:221 includes/hooks.php:2217
175
+ #: includes/hooks.php:2421 includes/phrases.php:916
176
  msgid "Tools"
177
  msgstr ""
178
 
179
  #: admin/index.php:82 admin/index.php:136 admin/pages/board.php:16
180
+ #: includes/hooks.php:10 includes/hooks.php:2460
181
  msgid "Boards"
182
  msgstr ""
183
 
184
+ #: admin/index.php:86 admin/index.php:140 includes/hooks.php:2235
185
+ #: includes/hooks.php:2476
186
  msgid "Accesses"
187
  msgstr ""
188
 
189
  #: admin/index.php:90 admin/index.php:144 admin/pages/usergroup.php:12
190
+ #: admin/pages/usergroup.php:160 includes/hooks.php:2260 includes/hooks.php:2492
191
  msgid "Usergroups"
192
  msgstr ""
193
 
194
  #: admin/index.php:93 admin/index.php:147 admin/pages/dashboard.php:37
195
  #: admin/pages/member.php:10 admin/pages/usergroup.php:37
196
+ #: admin/tools-tabs/misc.php:87 includes/hooks.php:2251 includes/hooks.php:2508
197
  #: includes/phrases.php:364
198
  msgid "Members"
199
  msgstr ""
200
 
201
+ #: admin/index.php:97 admin/index.php:156 includes/hooks.php:2292
202
+ #: includes/hooks.php:2526 includes/phrases.php:792
203
  msgid "Themes"
204
  msgstr ""
205
 
206
  #: admin/index.php:102 admin/index.php:161 admin/pages/board.php:116
207
+ #: admin/pages/settings.php:22 includes/hooks.php:2301 includes/hooks.php:2535
208
  #: includes/phrases.php:211
209
  msgid "Addons"
210
  msgstr ""
243
  msgstr ""
244
 
245
  #: admin/listtables/Boards.php:86 admin/listtables/Moderations.php:94
246
+ #: admin/pages/forum.php:273 admin/pages/usergroup.php:78 classes/Forums.php:823
247
  #: includes/phrases.php:541
248
  msgid "View"
249
  msgstr ""
258
 
259
  #: admin/listtables/Boards.php:88 admin/listtables/Members.php:104
260
  #: admin/listtables/Members.php:260 admin/listtables/Moderations.php:103
261
+ #: admin/listtables/Moderations.php:208 admin/pages/forum.php:272
262
  #: admin/pages/themes.php:68 admin/pages/usergroup.php:76
263
  #: admin/pages/usergroup.php:295 admin/settings/antispam.php:64
264
+ #: includes/hooks.php:1268 includes/phrases.php:252
265
  msgid "Delete"
266
  msgstr ""
267
 
360
  msgid "Group"
361
  msgstr ""
362
 
363
+ #: admin/listtables/Members.php:179 admin/pages/board.php:173
364
  #: admin/pages/usergroup.php:162 includes/phrases.php:17
365
  msgid "Status"
366
  msgstr ""
418
  msgstr ""
419
 
420
  #: admin/listtables/Moderations.php:152 includes/phrases.php:520
421
+ #: widgets/Forums.php:64 widgets/OnlineMembers.php:59 widgets/RecentPosts.php:230
422
  #: widgets/RecentTopics.php:130 widgets/Search.php:38 widgets/Tags.php:47
423
  msgid "Title"
424
  msgstr ""
489
  msgstr ""
490
 
491
  #: admin/pages/accesses.php:21 admin/pages/board.php:152 admin/pages/forum.php:56
492
+ #: admin/pages/forum.php:238 admin/pages/forum.php:285 admin/pages/forum.php:325
493
+ #: admin/pages/forum.php:401 admin/pages/forum.php:409 admin/pages/phrase.php:167
494
  #: admin/pages/usergroup.php:30 admin/pages/usergroup.php:36
495
  #: admin/pages/usergroup.php:342 admin/settings/board.php:15
496
  #: admin/settings/general.php:24 admin/settings/styles.php:12
498
  msgid "Read the documentation"
499
  msgstr ""
500
 
501
+ #: admin/pages/accesses.php:29 includes/hooks.php:2242 includes/hooks.php:2483
502
  #: includes/phrases.php:207
503
  msgid "Add New Forum Access"
504
  msgstr ""
543
  msgid "Access name"
544
  msgstr ""
545
 
546
+ #: admin/pages/accesses.php:131 admin/pages/board.php:182
547
  #: admin/pages/phrase.php:70 includes/phrases.php:456
548
  msgid "Save"
549
  msgstr ""
662
  msgstr ""
663
 
664
  #: admin/pages/board.php:109 admin/pages/board.php:132 admin/pages/board.php:156
665
+ #: admin/pages/board.php:175
666
  msgid "Enabled"
667
  msgstr ""
668
 
669
  #: admin/pages/board.php:110 admin/pages/board.php:133 admin/pages/board.php:157
670
+ #: admin/pages/board.php:176
671
  msgid "Disabled"
672
  msgstr ""
673
 
697
  msgid "one URL per line"
698
  msgstr ""
699
 
700
+ #: admin/pages/dashboard.php:7 includes/hooks.php:2184
701
  msgid "Forum Dashboard"
702
  msgstr ""
703
 
780
  msgid "Rebuild Threads"
781
  msgstr ""
782
 
783
+ #: admin/pages/forum.php:15 includes/functions.php:783 includes/phrases.php:487
784
  msgid "Show on screen"
785
  msgstr ""
786
 
787
+ #: admin/pages/forum.php:17 admin/pages/forum.php:238 includes/phrases.php:299
788
  msgid "Forum Options"
789
  msgstr ""
790
 
808
  msgid "Number of Columns"
809
  msgstr ""
810
 
811
+ #: admin/pages/forum.php:34 includes/functions.php:797 includes/phrases.php:460
812
  msgid "Screen Options"
813
  msgstr ""
814
 
842
  msgid "Save forums order and hierarchy"
843
  msgstr ""
844
 
845
+ #: admin/pages/forum.php:223 includes/phrases.php:273
846
  msgid "Enter forum title here"
847
  msgstr ""
848
 
849
+ #: admin/pages/forum.php:228 includes/phrases.php:272
850
  msgid "Enter description here . . ."
851
  msgstr ""
852
 
853
+ #: admin/pages/forum.php:229 includes/phrases.php:515
854
  msgid ""
855
  "This is a forum description. This content will be displayed under forum title "
856
  "on the forum list."
857
  msgstr ""
858
 
859
+ #: admin/pages/forum.php:241 includes/phrases.php:407
860
  msgid "Parent Forum"
861
  msgstr ""
862
 
863
+ #: admin/pages/forum.php:244 includes/phrases.php:390
864
  msgid "No parent"
865
  msgstr ""
866
 
867
+ #: admin/pages/forum.php:249 includes/phrases.php:532
868
  msgid "Use as Category"
869
  msgstr ""
870
 
871
+ #: admin/pages/forum.php:251 includes/phrases.php:238
872
  msgid "Category Layout"
873
  msgstr ""
874
 
875
+ #: admin/pages/forum.php:260 includes/phrases.php:388
876
  msgid "No layout found."
877
  msgstr ""
878
 
879
+ #: admin/pages/forum.php:268 admin/pages/forum.php:276 includes/phrases.php:420
880
  msgid "Publish"
881
  msgstr ""
882
 
883
+ #: admin/pages/forum.php:272 includes/phrases.php:223
884
  msgid "Are you sure you want to delete this forum?"
885
  msgstr ""
886
 
887
+ #: admin/pages/forum.php:274 admin/pages/phrase.php:108 includes/phrases.php:529
888
  msgid "Update"
889
  msgstr ""
890
 
891
+ #: admin/pages/forum.php:285
892
  msgid "Forum Permissions"
893
  msgstr ""
894
 
895
+ #: admin/pages/forum.php:294
896
  msgid "Additional Options"
897
  msgstr ""
898
 
899
+ #: admin/pages/forum.php:297
900
  msgid "Forum Color"
901
  msgstr ""
902
 
903
+ #: admin/pages/forum.php:318
904
  msgid "Current layout and cover image of this category"
905
  msgstr ""
906
 
907
+ #: admin/pages/forum.php:320
908
  msgid "Current layout of this forum (inherited from parent category)"
909
  msgstr ""
910
 
911
+ #: admin/pages/forum.php:323
912
  msgid "Category layout and cover image"
913
  msgstr ""
914
 
915
+ #: admin/pages/forum.php:343
916
  msgid ""
917
  "Forums can be displayed with different layouts (Extended, Simplified, Q&A, "
918
  "Threaded). Use the \"Category Layout\" dropdown located on the top right "
922
  "disabled if this forum is not a Category."
923
  msgstr ""
924
 
925
+ #: admin/pages/forum.php:350
926
  msgid "Category Cover Image"
927
  msgstr ""
928
 
929
+ #: admin/pages/forum.php:354 admin/pages/forum.php:359
930
  msgid "Upload image"
931
  msgstr ""
932
 
933
+ #: admin/pages/forum.php:355 admin/pages/forum.php:360
934
  msgid "Remove image"
935
  msgstr ""
936
 
937
+ #: admin/pages/forum.php:374
938
  msgid "Insert image"
939
  msgstr ""
940
 
941
+ #: admin/pages/forum.php:376
942
  msgid "Use this image"
943
  msgstr ""
944
 
945
+ #: admin/pages/forum.php:401 includes/phrases.php:304
946
  msgid "Forum Slug"
947
  msgstr ""
948
 
949
+ #: admin/pages/forum.php:404 includes/phrases.php:508
950
  msgid ""
951
  "The \"slug\" is the URL-friendly version of the name. It is usually all "
952
  "lowercase and contains only letters, numbers, and hyphens."
953
  msgstr ""
954
 
955
+ #: admin/pages/forum.php:409
956
  msgid "Forum Icon"
957
  msgstr ""
958
 
959
+ #: admin/pages/forum.php:412
960
  msgid "Font-awesome Icon"
961
  msgstr ""
962
 
963
+ #: admin/pages/forum.php:414
964
  msgid "You can find all icons"
965
  msgstr ""
966
 
967
+ #: admin/pages/forum.php:414
968
  msgid "here"
969
  msgstr ""
970
 
971
+ #: admin/pages/forum.php:414
972
  msgid ""
973
  "Make sure you insert a class of font-awesome icon, it should start with fa- "
974
  "prefix like &quot;fas fa-comments&quot;."
975
  msgstr ""
976
 
977
+ #: admin/pages/forum.php:420 includes/phrases.php:302
978
  msgid "Forum SEO Description"
979
  msgstr ""
980
 
981
+ #: admin/pages/forum.php:423 includes/phrases.php:370
982
  msgid "Meta Description"
983
  msgstr ""
984
 
985
+ #: admin/pages/forum.php:453 includes/phrases.php:514
986
  msgid "This action will also delete all sub-forums, topics and replies."
987
  msgstr ""
988
 
989
+ #: admin/pages/forum.php:461 includes/phrases.php:323
990
  msgid ""
991
  "If you want to delete this forum and keep its sub-forums, topics and replies, "
992
  "please select a new target forum in dropdown below"
993
  msgstr ""
994
 
995
+ #: admin/pages/forum.php:470 includes/phrases.php:212
996
  msgid ""
997
  "All sub-forums, topics and replies will be attached to selected forum. Layout "
998
  "will be inherited from this forum."
1260
  msgid "Debug"
1261
  msgstr ""
1262
 
1263
+ #: admin/pages/tools.php:11 admin/tools-tabs/tables.php:119
1264
  msgid "Database Tables"
1265
  msgstr ""
1266
 
1277
  msgid "Usergroup"
1278
  msgstr ""
1279
 
1280
+ #: admin/pages/usergroup.php:38 classes/Settings.php:1125 includes/hooks.php:1260
1281
  msgid "Default"
1282
  msgstr ""
1283
 
2001
  msgid "Dashboard - Can delete member"
2002
  msgstr ""
2003
 
2004
+ #: admin/tools-tabs/debug.php:256 classes/UserGroups.php:77
2005
  #: includes/phrases.php:734
2006
  msgid "Front - Can view member username"
2007
  msgstr ""
2037
  msgid "How to Fix WordPress Not Sending Email Issue"
2038
  msgstr ""
2039
 
2040
+ #: admin/tools-tabs/debug.php:307
2041
  msgid "wpForo phrases are missing!"
2042
  msgstr ""
2043
 
2044
+ #: admin/tools-tabs/debug.php:308
2045
  msgid ""
2046
+ "Please navigate to wpForo > Overview admin page and click the [Rebuild "
2047
+ "Phrases] button"
 
2048
  msgstr ""
2049
 
2050
+ #: admin/tools-tabs/debug.php:325
 
 
 
 
2051
  msgid "No issues found"
2052
  msgstr ""
2053
 
2054
+ #: admin/tools-tabs/debug.php:341
2055
  msgid "Error Log File"
2056
  msgstr ""
2057
 
2058
+ #: admin/tools-tabs/debug.php:348
2059
  msgid "No errors found"
2060
  msgstr ""
2061
 
2165
  msgid "Problem fixer SQL commands:"
2166
  msgstr ""
2167
 
2168
+ #: admin/tools-tabs/tables.php:115
2169
  msgid "No Problems Found in Database"
2170
  msgstr ""
2171
 
2186
  msgid "User registration is disabled"
2187
  msgstr ""
2188
 
2189
+ #: classes/Actions.php:2048 classes/Template.php:2358 includes/phrases.php:513
2190
  msgid "Theme file not readable"
2191
  msgstr ""
2192
 
2193
+ #: classes/Actions.php:2054
2194
  msgid "Theme Successfully Activated"
2195
  msgstr ""
2196
 
2197
+ #: classes/Actions.php:2075
2198
  msgid "Theme delete error"
2199
  msgstr ""
2200
 
2201
+ #: classes/Actions.php:2082
2202
  msgid "Theme delete success"
2203
  msgstr ""
2204
 
2205
+ #: classes/Cache.php:391
2206
  msgid "Please navigate in Dashboard to Settings > WP Super Cache"
2207
  msgstr ""
2208
 
2209
+ #: classes/Cache.php:392
2210
  msgid "Go to Advanced Tab, scroll down to \"Rejected URL Strings\" option"
2211
  msgstr ""
2212
 
2213
+ #: classes/Cache.php:393 classes/Cache.php:401
2214
  msgid ""
2215
  "Insert the URL path(s) of your forum page(s) one per line in the option "
2216
  "textarea:"
2217
  msgstr ""
2218
 
2219
+ #: classes/Cache.php:394 classes/Cache.php:402 classes/Cache.php:410
2220
+ #: classes/Cache.php:427 classes/Cache.php:435 classes/Cache.php:443
 
 
 
 
 
 
2221
  msgid "Save it and delete all caches."
2222
  msgstr ""
2223
 
2224
+ #: classes/Cache.php:399
2225
  msgid "Please navigate in Dashboard to LiteSpeed Cache > Cache admin page"
2226
  msgstr ""
2227
 
2228
+ #: classes/Cache.php:400
2229
  msgid "Go to Exclude Tab, find the \"Do Not Cache URIs\" option"
2230
  msgstr ""
2231
 
2232
+ #: classes/Cache.php:407
2233
  msgid "Please navigate in Dashboard to WP Rocket > Advanced Rules Tab"
2234
  msgstr ""
2235
 
2236
+ #: classes/Cache.php:408
2237
  msgid "Scroll down to \"Never cache (URLs)\" option"
2238
  msgstr ""
2239
 
2240
+ #: classes/Cache.php:409
2241
  msgid ""
2242
  "Insert the URL path(s) of your forum page(s) one per line with wildcard (.*) "
2243
  "in the option textarea:"
2244
  msgstr ""
2245
 
2246
+ #: classes/Cache.php:415
2247
  msgid "Please navigate in Dashboard to WP Fastest Cache > Exclude Tab"
2248
  msgstr ""
2249
 
2250
+ #: classes/Cache.php:416
2251
  msgid "In the \"Exclude Pages\" section click the [Add New Rule] button"
2252
  msgstr ""
2253
 
2254
+ #: classes/Cache.php:417
2255
  msgid ""
2256
  "Select [Start with] option in the drop-down menu and insert the URL path(s) of "
2257
  "your forum page(s) one per rule in the next field:"
2258
  msgstr ""
2259
 
2260
+ #: classes/Cache.php:418
2261
  msgid ""
2262
  "If you have more than one forum pages (boards) you should create separate "
2263
  "rules for each forum board."
2264
  msgstr ""
2265
 
2266
+ #: classes/Cache.php:419
2267
  msgid "Save rules and delete all caches."
2268
  msgstr ""
2269
 
2270
+ #: classes/Cache.php:424
2271
  msgid "Please navigate in Dashboard to Performance > Page Cache admin page"
2272
  msgstr ""
2273
 
2274
+ #: classes/Cache.php:425
2275
  msgid "Go to Advanced Tab, scroll down to Rejected URL Strings option"
2276
  msgstr ""
2277
 
2278
+ #: classes/Cache.php:426
2279
  msgid ""
2280
  "Scroll to Advanced section and insert the URL path(s) of your forum page(s) "
2281
  "one per line in the \"Never cache the following pages\" textarea:"
2282
  msgstr ""
2283
 
2284
+ #: classes/Cache.php:432
2285
  msgid "Please navigate in Dashboard to WP-Optimize > Cache admin page"
2286
  msgstr ""
2287
 
2288
+ #: classes/Cache.php:433
2289
  msgid ""
2290
  "Go to Advanced Settings Tab, find the \"URLs to exclude from caching\" option"
2291
  msgstr ""
2292
 
2293
+ #: classes/Cache.php:434
2294
  msgid ""
2295
  "Insert the URL path(s) of your forum page(s) one per line with wildcard [*] in "
2296
  "the option textarea:"
2297
  msgstr ""
2298
 
2299
+ #: classes/Cache.php:440
2300
  msgid "Please navigate in Dashboard to SG Optimizer > Caching admin page"
2301
  msgstr ""
2302
 
2303
+ #: classes/Cache.php:441
2304
  msgid ""
2305
  "Scroll to Exclude URLs from Caching section and click the \"pencil\" button, "
2306
  "enable it, and click the button again"
2307
  msgstr ""
2308
 
2309
+ #: classes/Cache.php:442
2310
  msgid ""
2311
  "Insert the URL path(s) of your forum page(s) with wildcard [*] in the pop-up "
2312
  "filed:"
2320
  msgid "Add a new Forum in this Category"
2321
  msgstr ""
2322
 
2323
+ #: classes/Members.php:407
2324
  msgid "<strong>ERROR</strong>: Please enter a username."
2325
  msgstr ""
2326
 
2327
+ #: classes/Members.php:412
2328
  msgid ""
2329
  "<strong>ERROR</strong>: This username is invalid because it uses illegal "
2330
  "characters. Please enter a valid username."
2331
  msgstr ""
2332
 
2333
+ #: classes/Members.php:421
2334
  msgid ""
2335
  "<strong>ERROR</strong>: This username is already registered. Please choose "
2336
  "another one."
2337
  msgstr ""
2338
 
2339
+ #: classes/Members.php:426
2340
  msgid "<strong>ERROR</strong>: Sorry, that username is not allowed."
2341
  msgstr ""
2342
 
2343
+ #: classes/Members.php:431
2344
  msgid "<strong>ERROR</strong>: Please type your email address."
2345
  msgstr ""
2346
 
2347
+ #: classes/Members.php:436
2348
  msgid "<strong>ERROR</strong>: The email address isn&#8217;t correct."
2349
  msgstr ""
2350
 
2351
+ #: classes/Members.php:441
2352
  msgid ""
2353
  "<strong>ERROR</strong>: This email is already registered, please choose "
2354
  "another one."
2355
  msgstr ""
2356
 
2357
+ #: classes/Members.php:1806
2358
  msgid "What should be done with wpForo content owned by this user?"
2359
  msgstr ""
2360
 
2361
+ #: classes/Members.php:1809
2362
  msgid "What should be done with wpForo content owned by these users?"
2363
  msgstr ""
2364
 
2365
+ #: classes/Members.php:1813
2366
  msgid "Delete all wpForo content."
2367
  msgstr ""
2368
 
2369
+ #: classes/Members.php:1815
2370
  msgid "Attribute all content to:"
2371
  msgstr ""
2372
 
4179
  msgid "Exclude file extensions"
4180
  msgstr ""
4181
 
4182
+ #: classes/Settings.php:2297 includes/hooks.php:2641
4183
  msgid "Google reCAPTCHA"
4184
  msgstr ""
4185
 
4677
  msgid "Minute"
4678
  msgstr ""
4679
 
4680
+ #: classes/Settings.php:3285 includes/hooks.php:1532 includes/phrases.php:433
4681
  msgid "Rating Level"
4682
  msgstr ""
4683
 
4709
  msgid "More"
4710
  msgstr ""
4711
 
4712
+ #: classes/Settings.php:3298 includes/hooks.php:1545 includes/phrases.php:344
4713
  msgid "Level"
4714
  msgstr ""
4715
 
4726
  msgstr ""
4727
 
4728
  #: classes/Settings.php:3776 includes/installation.php:542
4729
+ #: includes/installation.php:1472 includes/options-migration.php:19
4730
+ #: includes/options-migration.php:98 includes/phrases.php:287
4731
  msgid "Forum"
4732
  msgstr ""
4733
 
4916
  msgid "Front - Can view member subscriptions"
4917
  msgstr ""
4918
 
4919
+ #: classes/UserGroups.php:72
4920
+ msgid "Front - Can upload cover"
4921
+ msgstr ""
4922
+
4923
+ #: classes/UserGroups.php:73 includes/phrases.php:731
4924
  msgid "Front - Can upload avatar"
4925
  msgstr ""
4926
 
4927
+ #: classes/UserGroups.php:74 includes/phrases.php:732
4928
  msgid "Front - Can have signature"
4929
  msgstr ""
4930
 
4931
+ #: classes/UserGroups.php:75 includes/phrases.php:733
4932
  msgid "Front - Can view avatars"
4933
  msgstr ""
4934
 
4935
+ #: classes/UserGroups.php:78 includes/phrases.php:735
4936
  msgid "Front - Can view member email"
4937
  msgstr ""
4938
 
4939
+ #: classes/UserGroups.php:79 includes/phrases.php:736
4940
  msgid "Front - Can view member title"
4941
  msgstr ""
4942
 
4943
+ #: classes/UserGroups.php:80
4944
  msgid "Front - Can view member custom title"
4945
  msgstr ""
4946
 
4947
+ #: classes/UserGroups.php:81 includes/phrases.php:737
4948
  msgid "Front - Can view member reputation"
4949
  msgstr ""
4950
 
4951
+ #: classes/UserGroups.php:82 includes/phrases.php:738
4952
  msgid "Front - Can view member website"
4953
  msgstr ""
4954
 
4955
+ #: classes/UserGroups.php:83 includes/phrases.php:739
4956
  msgid "Front - Can view member social networks"
4957
  msgstr ""
4958
 
4959
+ #: classes/UserGroups.php:84 includes/phrases.php:740
4960
  msgid "Front - Can view member reg. date"
4961
  msgstr ""
4962
 
4963
+ #: classes/UserGroups.php:85 includes/phrases.php:741
4964
  msgid "Front - Can view member location"
4965
  msgstr ""
4966
 
4967
+ #: classes/UserGroups.php:86 includes/phrases.php:742
4968
  msgid "Front - Can view member occupation"
4969
  msgstr ""
4970
 
4971
+ #: classes/UserGroups.php:87 includes/phrases.php:743
4972
  msgid "Front - Can view member signature"
4973
  msgstr ""
4974
 
4975
+ #: classes/UserGroups.php:88 includes/phrases.php:744
4976
  msgid "Front - Can view member about me"
4977
  msgstr ""
4978
 
4979
+ #: classes/UserGroups.php:89 includes/phrases.php:745
4980
  msgid "Front - Can write PM"
4981
  msgstr ""
4982
 
4983
+ #: classes/UserGroups.php:90
4984
  msgid "Front - Can access to attachments"
4985
  msgstr ""
4986
 
4987
+ #: classes/UserGroups.php:91
4988
  msgid "Front - Can access to add topic page"
4989
  msgstr ""
4990
 
4992
  msgid "wpForo Menu"
4993
  msgstr ""
4994
 
4995
+ #: includes/functions-template.php:2233
4996
  msgid "No Title"
4997
  msgstr ""
4998
 
5135
  "WooCommerce Memberships plugin."
5136
  msgstr ""
5137
 
5138
+ #: includes/functions.php:787 includes/phrases.php:327
 
 
 
 
 
 
5139
  msgid "Items"
5140
  msgstr ""
5141
 
5142
+ #: includes/functions.php:788 includes/phrases.php:222
5143
  msgid "Apply"
5144
  msgstr ""
5145
 
5146
+ #: includes/functions.php:1258
5147
  #, php-format
5148
  msgid "Could not write file %s"
5149
  msgstr ""
5162
  msgid "Uninstall"
5163
  msgstr ""
5164
 
5165
+ #: includes/hooks.php:1259
5166
  msgid "Clear"
5167
  msgstr ""
5168
 
5169
+ #: includes/hooks.php:1261
5170
  msgid "Select Color"
5171
  msgstr ""
5172
 
5173
+ #: includes/hooks.php:1267 includes/phrases.php:183
5174
  msgid "Move"
5175
  msgstr ""
5176
 
5177
+ #: includes/hooks.php:1283
5178
  msgid "Please choose one reasons before sending a feedback!"
5179
  msgstr ""
5180
 
5181
+ #: includes/hooks.php:1285
5182
  msgid ""
5183
  "With the email address, please check the \"I agree to receive email\" checkbox "
5184
  "to proceed."
5185
  msgstr ""
5186
 
5187
+ #: includes/hooks.php:1286
5188
  msgid "Please fill your email address for feedback"
5189
  msgstr ""
5190
 
5191
+ #: includes/hooks.php:1287
5192
  msgid "Your email address is not valid"
5193
  msgstr ""
5194
 
5195
+ #: includes/hooks.php:1352
5196
  msgid ""
5197
  "IMPORTANT: wpForo can't work with default permalink, please change permalink "
5198
  "structure"
5199
  msgstr ""
5200
 
5201
+ #: includes/hooks.php:1437
5202
  msgid "Forum Profile Fields - wpForo"
5203
  msgstr ""
5204
 
5205
+ #: includes/hooks.php:1446
5206
  msgid "Forum - Usergroup"
5207
  msgstr ""
5208
 
5209
+ #: includes/hooks.php:1451
5210
  #, php-format
5211
  msgid ""
5212
  "Forum Usergroups are synched with User Roles based on the %s. When you change "
5213
  "this user Role the Usergroup is automatically changed according to that table."
5214
  msgstr ""
5215
 
5216
+ #: includes/hooks.php:1458
5217
  msgid "Synced with user role"
5218
  msgstr ""
5219
 
5220
+ #: includes/hooks.php:1463
5221
  msgid "Role-Usergroup Synchronization is Turned ON!"
5222
  msgstr ""
5223
 
5224
+ #: includes/hooks.php:1466
5225
  msgid ""
5226
  "This user Usergroup is automatically changed according to current Role. If you "
5227
  "want to disable Role-Usergroup synchronization and manage Usergroups and User "
5229
  "admin page and disable \"Role-Usergroup Synchronization\" option."
5230
  msgstr ""
5231
 
5232
+ #: includes/hooks.php:1480
5233
  msgid "Forum - Secondary Usergroups"
5234
  msgstr ""
5235
 
5236
+ #: includes/hooks.php:1504
5237
  msgid "Forum - User Timezone"
5238
  msgstr ""
5239
 
5240
+ #: includes/hooks.php:1515
5241
  msgid "User Reputation"
5242
  msgstr ""
5243
 
5244
+ #: includes/hooks.php:1517
5245
  msgid ""
5246
  "By default all members get rating badges and titles based on number of posts. "
5247
  "However, using this option you can grant lower or higher rating to certain "
5249
  "be managed in Forums > Settings > Members Tab."
5250
  msgstr ""
5251
 
5252
+ #: includes/hooks.php:1522
5253
  msgid "Default Rating"
5254
  msgstr ""
5255
 
5256
+ #: includes/hooks.php:1525
5257
  msgid "Custom Rating"
5258
  msgstr ""
5259
 
5260
+ #: includes/hooks.php:1533 includes/phrases.php:865
5261
  msgid "Rating Title"
5262
  msgstr ""
5263
 
5264
+ #: includes/hooks.php:1534 includes/phrases.php:430
5265
  msgid "Rating Badge"
5266
  msgstr ""
5267
 
5268
+ #: includes/hooks.php:2151 includes/hooks.php:2199 includes/hooks.php:2335
5269
+ #: includes/hooks.php:2403
5270
  msgid "Add New Forum"
5271
  msgstr ""
5272
 
5273
+ #: includes/hooks.php:2158 includes/hooks.php:2342
5274
  msgid "Add New User Group"
5275
  msgstr ""
5276
 
5277
+ #: includes/hooks.php:2165 includes/hooks.php:2283 includes/hooks.php:2349
5278
+ #: includes/hooks.php:2446
5279
  msgid "Add New Phrase"
5280
  msgstr ""
5281
 
5282
+ #: includes/hooks.php:2174 includes/hooks.php:2386
5283
  msgid "Visit Forum"
5284
  msgstr ""
5285
 
5286
+ #: includes/hooks.php:2267 includes/hooks.php:2499
5287
  msgid "Add New Usergroup"
5288
  msgstr ""
5289
 
5290
+ #: includes/hooks.php:2467
5291
  msgid "Add New Board"
5292
  msgstr ""
5293
 
5294
+ #: includes/hooks.php:2640 includes/phrases.php:1086
5295
  #, php-format
5296
  msgid ""
5297
  "IMPORTANT! The forum registration form is probably under risk of spam attacks. "
5301
  "dismiss this message."
5302
  msgstr ""
5303
 
5304
+ #: includes/hooks.php:2670
5305
  msgid "wpForo Polls addon is disabled!"
5306
  msgstr ""
5307
 
5308
+ #: includes/hooks.php:2670
5309
  msgid ""
5310
  " Your addon version is not compatible with the current version of wpForo. "
5311
  "Please update the addon or downgrade wpForo to 1.7.7"
5312
  msgstr ""
5313
 
5314
+ #: includes/hooks.php:2671
5315
  msgid "dismiss"
5316
  msgstr ""
5317
 
5400
  "The user login and logout actions will also be corrupted."
5401
  msgstr ""
5402
 
5403
+ #: includes/installation.php:543 includes/installation.php:1473
5404
+ #: includes/options-migration.php:20
5405
  msgid "Discussion Board"
5406
  msgstr ""
5407
 
5408
+ #: includes/installation.php:1171
5409
  msgid "Main Category"
5410
  msgstr ""
5411
 
5412
+ #: includes/installation.php:1171
5413
  msgid "This is a simple category / section"
5414
  msgstr ""
5415
 
5416
+ #: includes/installation.php:1172
5417
  msgid "Main Forum"
5418
  msgstr ""
5419
 
5420
+ #: includes/installation.php:1172
5421
  msgid "This is a simple parent forum"
5422
  msgstr ""
5423
 
6047
  msgid "I agree to receive an email confirmation with a link to set a password."
6048
  msgstr ""
6049
 
6050
+ #: includes/phrases.php:143
6051
+ msgid "and"
6052
+ msgstr ""
6053
+
6054
  #: includes/phrases.php:144
6055
  msgid "Privacy Policy"
6056
  msgstr ""
6407
  msgid "Display Avatars"
6408
  msgstr ""
6409
 
6410
+ #: includes/phrases.php:258 widgets/RecentPosts.php:285
6411
  msgid "Display with Avatars"
6412
  msgstr ""
6413
 
6749
  msgstr ""
6750
 
6751
  #: includes/phrases.php:396 widgets/OnlineMembers.php:74
6752
+ #: widgets/RecentPosts.php:276 widgets/RecentTopics.php:171 widgets/Tags.php:63
6753
  msgid "Number of Items"
6754
  msgstr ""
6755
 
9000
  msgid "ASC"
9001
  msgstr ""
9002
 
9003
+ #: widgets/RecentPosts.php:236 widgets/RecentTopics.php:136
9004
  msgid "Filter by forums"
9005
  msgstr ""
9006
 
9007
+ #: widgets/RecentPosts.php:243 widgets/RecentTopics.php:148
9008
  msgid "Autofilter by current forum"
9009
  msgstr ""
9010
 
9011
+ #: widgets/RecentPosts.php:250 widgets/RecentTopics.php:155
9012
  msgid "Order by"
9013
  msgstr ""
9014
 
9015
+ #: widgets/RecentPosts.php:268
9016
  msgid "Limit Per Topic"
9017
  msgstr ""
9018
 
9019
+ #: widgets/RecentPosts.php:273
9020
  msgid "set 0 to remove this limit"
9021
  msgstr ""
9022
 
9023
+ #: widgets/RecentPosts.php:292
9024
  msgid "Display Only Unread Posts"
9025
  msgstr ""
9026
 
9027
+ #: widgets/RecentPosts.php:299
9028
  msgid "Display [new] indicator"
9029
  msgstr ""
9030
 
9036
  msgid "Views Count"
9037
  msgstr ""
9038
 
9039
+ #: widgets/RecentTopics.php:178
9040
  msgid "Display with avatars"
9041
  msgstr ""
9042
 
9043
+ #: widgets/RecentTopics.php:184
9044
  msgid "Refer topics to first unread post"
9045
  msgstr ""
9046
 
modules/bookmarks/classes/Actions.php CHANGED
@@ -31,6 +31,7 @@ class Actions {
31
  }
32
 
33
  public function bookmark() {
 
34
  $r = false;
35
  if( WPF()->current_userid && ( $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) ) ) ){
36
  $boardid = WPF()->board->get_current( 'boardid' );
@@ -68,6 +69,7 @@ class Actions {
68
  }
69
 
70
  public function unbookmark() {
 
71
  $r = false;
72
  if( WPF()->current_userid && ( $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) ) ) ){
73
  $boardid = WPF()->board->get_current( 'boardid' );
31
  }
32
 
33
  public function bookmark() {
34
+ wpforo_verify_nonce( 'wpforo_bookmark' );
35
  $r = false;
36
  if( WPF()->current_userid && ( $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) ) ) ){
37
  $boardid = WPF()->board->get_current( 'boardid' );
69
  }
70
 
71
  public function unbookmark() {
72
+ wpforo_verify_nonce( 'wpforo_unbookmark' );
73
  $r = false;
74
  if( WPF()->current_userid && ( $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) ) ) ){
75
  $boardid = WPF()->board->get_current( 'boardid' );
modules/follows/classes/Actions.php CHANGED
@@ -11,10 +11,10 @@ class Actions {
11
  add_action( 'wpforo_action_followconfirm', [ $this, 'confirmation' ] );
12
  add_action( 'wpforo_action_unfollow', [ $this, 'unfollow' ] );
13
 
14
- add_action( 'wpforo_after_add_topic', [ $this, 'after_add_topic' ], 10, 2 );
15
- add_action( 'wpforo_after_add_post', [ $this, 'after_add_post' ], 10, 2 );
16
 
17
- add_action( 'wpforo_post_approve', [ $this, 'after_post_approve' ] );
18
  add_action( 'wpforo_after_delete_user', [ $this, 'after_delete_user' ] );
19
 
20
  ## -- AJAX ACTIONS -- ##
@@ -50,11 +50,18 @@ class Actions {
50
  continue;
51
  }
52
 
53
- if( wpforo_is_users_same( $owner, $user ) ) continue;
54
- if( ! WPF()->topic->view_access( $topic, $user ) ) continue;
55
 
56
- $sbj_msg = WPF()->sbscrb->get_sbj_msg( 'user_follow', $forum, $topic, $owner, $user, $follow['unfollow_link'] );
57
- wpforo_send_email( $user['user_email'], $sbj_msg['sbj'], $sbj_msg['msg'] );
 
 
 
 
 
 
 
58
  }
59
  }
60
 
@@ -70,11 +77,18 @@ class Actions {
70
  continue;
71
  }
72
 
73
- if( wpforo_is_users_same( $owner, $user ) ) continue;
74
- if( ! WPF()->post->view_access( $post, $user ) ) continue;
75
 
76
- $sbj_msg = WPF()->sbscrb->get_sbj_msg( 'user_follow', $topic, $post, $owner, $user, $follow['unfollow_link'] );
77
- wpforo_send_email( $user['user_email'], $sbj_msg['sbj'], $sbj_msg['msg'] );
 
 
 
 
 
 
 
78
  }
79
  }
80
 
@@ -93,6 +107,7 @@ class Actions {
93
  ### -- AJAX ACTIONS -- ###
94
 
95
  public function follow_unfollow_user() {
 
96
  if( WPF()->current_userid && ($userid = wpforo_bigintval( wpfval( $_POST, 'userid' ) )) ){
97
  if( WPF()->current_userid !== $userid ){
98
  if( (int) wpfval( $_POST, 'stat' ) ){
11
  add_action( 'wpforo_action_followconfirm', [ $this, 'confirmation' ] );
12
  add_action( 'wpforo_action_unfollow', [ $this, 'unfollow' ] );
13
 
14
+ add_action( 'wpforo_after_add_topic', [ $this, 'after_add_topic' ], 7, 2 );
15
+ add_action( 'wpforo_after_add_post', [ $this, 'after_add_post' ], 7, 2 );
16
 
17
+ add_action( 'wpforo_post_approve', [ $this, 'after_post_approve' ], 7 );
18
  add_action( 'wpforo_after_delete_user', [ $this, 'after_delete_user' ] );
19
 
20
  ## -- AJAX ACTIONS -- ##
50
  continue;
51
  }
52
 
53
+ $key = 'topicid_' . $topic['topicid'] . '_user_email_' . $user['user_email'];
54
+ if( ! WPF()->ram_cache->exists( $key ) ){
55
 
56
+ if( wpforo_is_users_same( $owner, $user ) ) continue;
57
+ if( wpforo_is_users_same( $user ) ) continue;
58
+ if( ! WPF()->topic->view_access( $topic, $user ) ) continue;
59
+
60
+ $sbj_msg = WPF()->sbscrb->get_sbj_msg( 'user_follow', $forum, $topic, $owner, $user, $follow['unfollow_link'] );
61
+ wpforo_send_email( $user['user_email'], $sbj_msg['sbj'], $sbj_msg['msg'] );
62
+
63
+ WPF()->ram_cache->set( $key, true );
64
+ }
65
  }
66
  }
67
 
77
  continue;
78
  }
79
 
80
+ $key = 'postid_' . $post['postid'] . '_user_email_' . $user['user_email'];
81
+ if( ! WPF()->ram_cache->exists( $key ) ){
82
 
83
+ if( wpforo_is_users_same( $owner, $user ) ) continue;
84
+ if( wpforo_is_users_same( $user ) ) continue;
85
+ if( ! WPF()->post->view_access( $post, $user ) ) continue;
86
+
87
+ $sbj_msg = WPF()->sbscrb->get_sbj_msg( 'user_follow', $topic, $post, $owner, $user, $follow['unfollow_link'] );
88
+ wpforo_send_email( $user['user_email'], $sbj_msg['sbj'], $sbj_msg['msg'] );
89
+
90
+ WPF()->ram_cache->set( $key, true );
91
+ }
92
  }
93
  }
94
 
107
  ### -- AJAX ACTIONS -- ###
108
 
109
  public function follow_unfollow_user() {
110
+ wpforo_verify_nonce( 'wpforo_follow_unfollow_user' );
111
  if( WPF()->current_userid && ($userid = wpforo_bigintval( wpfval( $_POST, 'userid' ) )) ){
112
  if( WPF()->current_userid !== $userid ){
113
  if( (int) wpfval( $_POST, 'stat' ) ){
modules/mentioning/classes/Actions.php CHANGED
@@ -9,8 +9,8 @@ class Actions {
9
 
10
  public function init_hooks() {
11
  add_filter( 'wpforo_body_text_filter', [ $this, 'mentioned_code_to_link' ] );
12
- add_action( 'wpforo_after_add_topic', [ $this, 'send_mail_to_mentioned_users' ], 10, 2 );
13
- add_action( 'wpforo_after_add_post', [ $this, 'send_mail_to_mentioned_users' ], 10, 2 );
14
 
15
  #### -- AJAX ACTIONS -- ###
16
  add_action( 'wp_ajax_wpforo_mute_mentions', [ $this, 'mute' ] );
@@ -41,6 +41,7 @@ class Actions {
41
  $user = WPF()->member->get_member( $match[1] );
42
  if( ! empty( $user['user_email'] ) && ! $user['is_mention_muted'] ) {
43
  if( wpforo_is_users_same( $owner, $user ) ) continue;
 
44
  if( wpfkey( $item, 'first_postid' ) ){
45
  if( ! WPF()->topic->view_access( $item, $user ) ) continue;
46
  }else{
@@ -76,8 +77,22 @@ class Actions {
76
 
77
  //Sending Email Notification
78
  if( wpforo_setting( 'subscriptions', 'user_mention_notify' ) ) {
79
- $sbj_msg = WPF()->sbscrb->get_sbj_msg( 'user_mention', $pitem, $item, $owner, $user, '' );
80
- wpforo_send_email( $user['user_email'], $sbj_msg['sbj'], $sbj_msg['msg'] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  }
82
  }
83
  }
@@ -89,6 +104,7 @@ class Actions {
89
  * Mute Mentions, do not send mention emails
90
  */
91
  public function mute() {
 
92
  if( WPF()->current_userid && WPF()->current_object['user_is_same_current_user'] ) {
93
  $is_mention_muted = ! (int) wpfval( $_POST, 'currentstate' );
94
  $r = WPF()->member->update_profile_field( WPF()->current_userid, 'is_mention_muted', $is_mention_muted );
9
 
10
  public function init_hooks() {
11
  add_filter( 'wpforo_body_text_filter', [ $this, 'mentioned_code_to_link' ] );
12
+ add_action( 'wpforo_after_add_topic', [ $this, 'send_mail_to_mentioned_users' ], 5, 2 );
13
+ add_action( 'wpforo_after_add_post', [ $this, 'send_mail_to_mentioned_users' ], 5, 2 );
14
 
15
  #### -- AJAX ACTIONS -- ###
16
  add_action( 'wp_ajax_wpforo_mute_mentions', [ $this, 'mute' ] );
41
  $user = WPF()->member->get_member( $match[1] );
42
  if( ! empty( $user['user_email'] ) && ! $user['is_mention_muted'] ) {
43
  if( wpforo_is_users_same( $owner, $user ) ) continue;
44
+ if( wpforo_is_users_same( $user ) ) continue;
45
  if( wpfkey( $item, 'first_postid' ) ){
46
  if( ! WPF()->topic->view_access( $item, $user ) ) continue;
47
  }else{
77
 
78
  //Sending Email Notification
79
  if( wpforo_setting( 'subscriptions', 'user_mention_notify' ) ) {
80
+
81
+ if( wpfkey( $item, 'first_postid' ) ){
82
+ $key = 'topicid_' . $item['topicid'];
83
+ }else{
84
+ $key = 'postid_' . $item['postid'];
85
+ }
86
+ $key .= '_user_email_' . $user['user_email'];
87
+
88
+ if( ! WPF()->ram_cache->exists( $key ) ){
89
+
90
+ $sbj_msg = WPF()->sbscrb->get_sbj_msg( 'user_mention', $pitem, $item, $owner, $user, '' );
91
+ wpforo_send_email( $user['user_email'], $sbj_msg['sbj'], $sbj_msg['msg'] );
92
+
93
+ WPF()->ram_cache->set( $key, true );
94
+ }
95
+
96
  }
97
  }
98
  }
104
  * Mute Mentions, do not send mention emails
105
  */
106
  public function mute() {
107
+ wpforo_verify_nonce( 'wpforo_mute_mentions' );
108
  if( WPF()->current_userid && WPF()->current_object['user_is_same_current_user'] ) {
109
  $is_mention_muted = ! (int) wpfval( $_POST, 'currentstate' );
110
  $r = WPF()->member->update_profile_field( WPF()->current_userid, 'is_mention_muted', $is_mention_muted );
modules/reactions/classes/Actions.php CHANGED
@@ -31,6 +31,7 @@ class Actions {
31
  }
32
 
33
  public function like() {
 
34
  $response = [ 'count' => 0, 'likers' => '', 'notice' => WPF()->notice->get_notices() ];
35
  $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) );
36
  if( ! is_user_logged_in() ) {
@@ -103,6 +104,7 @@ class Actions {
103
  }
104
 
105
  public function vote() {
 
106
  if( ! WPF()->current_userid ) {
107
  WPF()->notice->add( wpforo_get_login_or_register_notice_text() );
108
  wp_send_json_error( [ 'notice' => WPF()->notice->get_notices() ] );
@@ -138,6 +140,7 @@ class Actions {
138
  }
139
 
140
  public function react() {
 
141
  if( ($userid = WPF()->current_userid) && ( $postid = wpfval( $_POST, 'postid' ) ) ){
142
  $types = Reactions::get_types();
143
  if( !($type = wpfval( $_POST, 'type' )) || !wpfkey( $types, $type ) ) $type = 'up';
@@ -186,6 +189,7 @@ class Actions {
186
  }
187
 
188
  public function unreact() {
 
189
  if( ($userid = WPF()->current_userid) && ( $postid = wpfval( $_POST, 'postid' ) ) ){
190
  $post = wpforo_post( $postid );
191
  WPF()->reaction->delete(
31
  }
32
 
33
  public function like() {
34
+ wpforo_verify_nonce( 'wpforo_like_ajax' );
35
  $response = [ 'count' => 0, 'likers' => '', 'notice' => WPF()->notice->get_notices() ];
36
  $postid = wpforo_bigintval( wpfval( $_POST, 'postid' ) );
37
  if( ! is_user_logged_in() ) {
104
  }
105
 
106
  public function vote() {
107
+ wpforo_verify_nonce( 'wpforo_vote_ajax' );
108
  if( ! WPF()->current_userid ) {
109
  WPF()->notice->add( wpforo_get_login_or_register_notice_text() );
110
  wp_send_json_error( [ 'notice' => WPF()->notice->get_notices() ] );
140
  }
141
 
142
  public function react() {
143
+ wpforo_verify_nonce( 'wpforo_react' );
144
  if( ($userid = WPF()->current_userid) && ( $postid = wpfval( $_POST, 'postid' ) ) ){
145
  $types = Reactions::get_types();
146
  if( !($type = wpfval( $_POST, 'type' )) || !wpfkey( $types, $type ) ) $type = 'up';
189
  }
190
 
191
  public function unreact() {
192
+ wpforo_verify_nonce( 'wpforo_unreact' );
193
  if( ($userid = WPF()->current_userid) && ( $postid = wpfval( $_POST, 'postid' ) ) ){
194
  $post = wpforo_post( $postid );
195
  WPF()->reaction->delete(
modules/revisions/classes/Actions.php CHANGED
@@ -35,6 +35,7 @@ class Actions {
35
  }
36
 
37
  public function ajax_post_preview() {
 
38
  $revision = WPF()->revision->parse_revision( $_POST );
39
  ob_start();
40
  WPF()->revision->Template->show_preview( $revision );
@@ -47,6 +48,7 @@ class Actions {
47
  }
48
 
49
  public function ajax_save_revision() {
 
50
  $args = [
51
  'textareaid' => (string) wpfval( $_POST, 'textareaid' ),
52
  'postid' => wpforo_bigintval( wpfval( $_POST, 'postid' ) ),
@@ -94,6 +96,7 @@ class Actions {
94
  }
95
 
96
  public function ajax_get_revisions_history() {
 
97
  $args = [
98
  // 'textareaids_include' => (string) wpfval( $_POST, 'textareaid' ),
99
  'postids_include' => wpforo_bigintval( wpfval( $_POST, 'postid' ) ),
@@ -120,6 +123,7 @@ class Actions {
120
  }
121
 
122
  public function ajax_get_revision() {
 
123
  if( $revisionid = wpforo_bigintval( wpfval( $_POST, 'revisionid' ) ) ) {
124
  if( $revision = WPF()->revision->get_revision( [ 'include' => $revisionid ] ) ) wp_send_json_success( $revision );
125
  }
@@ -127,6 +131,7 @@ class Actions {
127
  }
128
 
129
  public function ajax_delete_revision() {
 
130
  if( $revisionid = wpforo_bigintval( wpfval( $_POST, 'revisionid' ) ) ) {
131
  if( WPF()->revision->delete( $revisionid ) ) {
132
  $args = [
35
  }
36
 
37
  public function ajax_post_preview() {
38
+ wpforo_verify_nonce( 'wpforo_post_preview' );
39
  $revision = WPF()->revision->parse_revision( $_POST );
40
  ob_start();
41
  WPF()->revision->Template->show_preview( $revision );
48
  }
49
 
50
  public function ajax_save_revision() {
51
+ wpforo_verify_nonce( 'wpforo_save_revision' );
52
  $args = [
53
  'textareaid' => (string) wpfval( $_POST, 'textareaid' ),
54
  'postid' => wpforo_bigintval( wpfval( $_POST, 'postid' ) ),
96
  }
97
 
98
  public function ajax_get_revisions_history() {
99
+ wpforo_verify_nonce( 'wpforo_get_revisions_history' );
100
  $args = [
101
  // 'textareaids_include' => (string) wpfval( $_POST, 'textareaid' ),
102
  'postids_include' => wpforo_bigintval( wpfval( $_POST, 'postid' ) ),
123
  }
124
 
125
  public function ajax_get_revision() {
126
+ wpforo_verify_nonce( 'wpforo_get_revision' );
127
  if( $revisionid = wpforo_bigintval( wpfval( $_POST, 'revisionid' ) ) ) {
128
  if( $revision = WPF()->revision->get_revision( [ 'include' => $revisionid ] ) ) wp_send_json_success( $revision );
129
  }
131
  }
132
 
133
  public function ajax_delete_revision() {
134
+ wpforo_verify_nonce( 'wpforo_delete_revision' );
135
  if( $revisionid = wpforo_bigintval( wpfval( $_POST, 'revisionid' ) ) ) {
136
  if( WPF()->revision->delete( $revisionid ) ) {
137
  $args = [
modules/subscriptions/classes/Actions.php CHANGED
@@ -173,15 +173,15 @@ class Actions {
173
  && ($forum = WPF()->forum->get_forum( $forumid ))
174
  ) {
175
  $topic['body'] = $post['body'];
176
- $this->after_add_topic( $topic, $forum );
177
  WPF()->sbscrb->Mentioning->Actions->send_mail_to_mentioned_users( $topic, $forum );
 
178
  }
179
  }else{
180
  if( ($topicid = wpforo_bigintval(wpfval($post, 'topicid')))
181
  && ($topic = WPF()->topic->get_topic( $topicid ))
182
  ) {
183
- $this->after_add_post( $post, $topic );
184
  WPF()->sbscrb->Mentioning->Actions->send_mail_to_mentioned_users( $post, $topic );
 
185
  }
186
  }
187
  }
@@ -225,10 +225,17 @@ class Actions {
225
  $unsubscribe_link = '';
226
  }
227
 
228
- if( wpforo_is_users_same( $owner, $user ) ) continue;
 
 
 
 
229
 
230
- $sbj_msg = WPF()->sbscrb->get_sbj_msg( 'new_topic', $forum, $topic, $owner, $user, $unsubscribe_link );
231
- wpforo_send_email( $user['user_email'], $sbj_msg['sbj'], $sbj_msg['msg'] );
 
 
 
232
  }
233
  }
234
 
@@ -261,16 +268,24 @@ class Actions {
261
  $unsubscribe_link = '';
262
  }
263
 
264
- if( wpforo_is_users_same( $owner, $user ) ) continue;
 
 
 
 
265
 
266
- $sbj_msg = WPF()->sbscrb->get_sbj_msg( 'new_post', $topic, $post, $owner, $user, $unsubscribe_link );
267
- wpforo_send_email( $user['user_email'], $sbj_msg['sbj'], $sbj_msg['msg'] );
 
 
 
268
  }
269
  }
270
 
271
  ############### -- AJAX ACTIONS -- ###############
272
 
273
  public function subscribe() {
 
274
  $return = 0;
275
  $resp = [ 'notice' => WPF()->notice->get_notices() ];
276
  $args = [
@@ -364,6 +379,7 @@ class Actions {
364
  }
365
 
366
  public function unsubscribe() {
 
367
  $r = false;
368
 
369
  $boardid = wpfkey( $_POST, 'boardid' ) ? (int) $_POST['boardid'] : WPF()->board->get_current( 'boardid' );
173
  && ($forum = WPF()->forum->get_forum( $forumid ))
174
  ) {
175
  $topic['body'] = $post['body'];
 
176
  WPF()->sbscrb->Mentioning->Actions->send_mail_to_mentioned_users( $topic, $forum );
177
+ $this->after_add_topic( $topic, $forum );
178
  }
179
  }else{
180
  if( ($topicid = wpforo_bigintval(wpfval($post, 'topicid')))
181
  && ($topic = WPF()->topic->get_topic( $topicid ))
182
  ) {
 
183
  WPF()->sbscrb->Mentioning->Actions->send_mail_to_mentioned_users( $post, $topic );
184
+ $this->after_add_post( $post, $topic );
185
  }
186
  }
187
  }
225
  $unsubscribe_link = '';
226
  }
227
 
228
+ $key = 'topicid_' . $topic['topicid'] . '_user_email_' . $user['user_email'];
229
+ if( ! WPF()->ram_cache->exists( $key ) ){
230
+
231
+ if( wpforo_is_users_same( $owner, $user ) ) continue;
232
+ if( wpforo_is_users_same( $user ) ) continue;
233
 
234
+ $sbj_msg = WPF()->sbscrb->get_sbj_msg( 'new_topic', $forum, $topic, $owner, $user, $unsubscribe_link );
235
+ wpforo_send_email( $user['user_email'], $sbj_msg['sbj'], $sbj_msg['msg'] );
236
+
237
+ WPF()->ram_cache->set( $key, true );
238
+ }
239
  }
240
  }
241
 
268
  $unsubscribe_link = '';
269
  }
270
 
271
+ $key = 'postid_' . $post['postid'] . '_user_email_' . $user['user_email'];
272
+ if( ! WPF()->ram_cache->exists( $key ) ){
273
+
274
+ if( wpforo_is_users_same( $owner, $user ) ) continue;
275
+ if( wpforo_is_users_same( $user ) ) continue;
276
 
277
+ $sbj_msg = WPF()->sbscrb->get_sbj_msg( 'new_post', $topic, $post, $owner, $user, $unsubscribe_link );
278
+ wpforo_send_email( $user['user_email'], $sbj_msg['sbj'], $sbj_msg['msg'] );
279
+
280
+ WPF()->ram_cache->set( $key, true );
281
+ }
282
  }
283
  }
284
 
285
  ############### -- AJAX ACTIONS -- ###############
286
 
287
  public function subscribe() {
288
+ wpforo_verify_nonce( 'wpforo_subscribe_ajax' );
289
  $return = 0;
290
  $resp = [ 'notice' => WPF()->notice->get_notices() ];
291
  $args = [
379
  }
380
 
381
  public function unsubscribe() {
382
+ wpforo_verify_nonce( 'wpforo_unsubscribe' );
383
  $r = false;
384
 
385
  $boardid = wpfkey( $_POST, 'boardid' ) ? (int) $_POST['boardid'] : WPF()->board->get_current( 'boardid' );
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: gVectors Team
3
  Tags: forum, forums, forum plugin, WordPress forum plugin, community, discussion
4
  Requires at least: 5.1
5
  Tested up to: 6.0
6
- Stable tag: 2.0.5
7
  Requires PHP: 5.6 and higher
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
@@ -17,13 +17,14 @@ wpForo Forums is the best WordPress forum plugin. Full-fledged yet easy and ligh
17
  = 5 Minute Forum Installation! =
18
 
19
  1. Activate plugin and find forums on /community/ page, (/community-2/ if /community/ is used),
20
- 2. Manage Forums in Dashboard > wpForo > Forums admin page,
21
- 3. Manage Forum Menu in Dashboard > Appearance > Menu admin page,
22
- 4. Manage Forum Widgets in Dashboard > Appearance > Widgets admin page,
23
- 5. Manage Forum Colors in Dashboard > wpForo > Settings > Colors & Styles admin page, you can choose forum color styles.
 
24
 
25
  Support Forum and Demo: [https://wpforo.com/community/](https://wpforo.com/community/)
26
- Forum Documentation: [https://wpforo.com/documentation/](https://wpforo.com/docs/)
27
  GDPR Compliance: [https://wpforo.com/gdpr/](https://wpforo.com/gdpr/)
28
 
29
 
@@ -46,7 +47,7 @@ wpForo is a WordPress forum plugin with all possibilities of plugin translation.
46
 
47
  = FORUM FEATURES =
48
 
49
- * Multi-board: Allows to create more than one forum in the same website
50
  * Multi-language: Allows to forums with different languages
51
  * Multi-layout: Four modern forum layouts (Q&A, Threaded...)
52
  * Designed for small and extremely large forums/communities.
@@ -162,7 +163,7 @@ Find wpForo forum plugin addons on [gVectors Team website...](https://gvectors.c
162
 
163
  == Changelog ==
164
 
165
- = wpForo Forum 2.0.1 - 2.0.5 | 03.08.2021 - 08.08.2021 =
166
 
167
  [wpForo Forum v2.0 Release Summary](https://wpforo.com/community/wpforo-announcements/wpforo-2-0-1-is-released/)
168
 
@@ -178,6 +179,38 @@ IMPORTANT NOTES for UPDATE
178
 
179
  ADDED FEATURES and FIXED BUGS
180
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181
  * Version 2.0.5
182
  * Added: Topic and Post dislike notification
183
  * Added: ID's to forum wrappers on forum home page
3
  Tags: forum, forums, forum plugin, WordPress forum plugin, community, discussion
4
  Requires at least: 5.1
5
  Tested up to: 6.0
6
+ Stable tag: 2.0.6
7
  Requires PHP: 5.6 and higher
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
17
  = 5 Minute Forum Installation! =
18
 
19
  1. Activate plugin and find forums on /community/ page, (/community-2/ if /community/ is used),
20
+ 2. Manage forum page, title, etc in Dashboard > wpForo > Board > Edit Board admin page,
21
+ 3. Manage Forums in Dashboard > wpForo > Forums admin page,
22
+ 4. Manage Forum Menu in Dashboard > Appearance > Menu admin page,
23
+ 5. Manage Forum Widgets in Dashboard > Appearance > Widgets admin page,
24
+ 6. Manage Forum Colors in Dashboard > wpForo > Settings > Colors & Styles admin page, you can choose forum color styles.
25
 
26
  Support Forum and Demo: [https://wpforo.com/community/](https://wpforo.com/community/)
27
+ Forum Documentation: [https://wpforo.com/docs/](https://wpforo.com/docs/)
28
  GDPR Compliance: [https://wpforo.com/gdpr/](https://wpforo.com/gdpr/)
29
 
30
 
47
 
48
  = FORUM FEATURES =
49
 
50
+ * Multi-board: Allows to have multiple separate forum pages
51
  * Multi-language: Allows to forums with different languages
52
  * Multi-layout: Four modern forum layouts (Q&A, Threaded...)
53
  * Designed for small and extremely large forums/communities.
163
 
164
  == Changelog ==
165
 
166
+ = wpForo Forum 2.0.1 - 2.0.6 | 03.08.2021 - 19.08.2021 =
167
 
168
  [wpForo Forum v2.0 Release Summary](https://wpforo.com/community/wpforo-announcements/wpforo-2-0-1-is-released/)
169
 
179
 
180
  ADDED FEATURES and FIXED BUGS
181
 
182
+ * Version 2.0.6
183
+ * Added: Usergroup permission "Can upload cover profile image"
184
+ * Added: Display Tags link in forum footer
185
+ * Added: Favored button in member's profile buttons
186
+ * Added: Member paths in cache excluding admin notes
187
+ * Added: Admin notification when the default board is missing
188
+ * Added: Info in Errors & Issues tab when old customized template files are detected
189
+ * Security: Added wp_nonce and wp_send_json_error() to all AJAX requests
190
+ * Spam Protection: Minimum user level to display signature
191
+ * Spam Protection: Don't show profile fields for users who don't have content
192
+ * Fixed Bug: Classic theme issues (like button, search icon, profile page)
193
+ * Fixed Bug: Disable forum statistic using the corresponding option
194
+ * Fixed Bug: Duplicated information about points on profile and members page
195
+ * Fixed Bug: Icon issue in Member Title profile field
196
+ * Fixed Bug: Problem with password changing in forum profile page
197
+ * Fixed Bug: Using WordPress timezone for not-loggedin visitors
198
+ * Fixed Bug: The checkbox options of Admin Note don't work
199
+ * Fixed Bug: Cannot add forum cover image in non-default boards
200
+ * Fixed Bug: Problems with manual approval of new registered users
201
+ * Fixed Bug: Turn off topic suggestion when editing a topic
202
+ * Fixed Bug: Problem with saving the board description
203
+ * Fixed Bug: Stop loading UM css and other functions if UM is not installed
204
+ * Fixed Bug: Pagination dropdown background issue
205
+ * Fixed Bug: Remove nofollow links from the end of breadcrumbs
206
+ * Fixed Bug: Avatar overlapping issue in Simplified layout
207
+ * Fixed Bug: Avoid sending duplicated email on new reply and user mentioning
208
+ * Fixed Bug: Don't send email to the post approving moderator
209
+ * Fixed Bug: Email template and shortcode issues
210
+ * Fixed Bug: User Profile Synchronization Issue
211
+ * Fixed Bug: Filter by forums in Recent Posts widget
212
+ * Fixed Bug: PHP Note: Empty values in widget / Warning: Undefined array key Posts.php on line 655
213
+ * --------
214
  * Version 2.0.5
215
  * Added: Topic and Post dislike notification
216
  * Added: ID's to forum wrappers on forum home page
themes/2022/footer.php CHANGED
@@ -14,7 +14,7 @@ if( ! defined( 'ABSPATH' ) ) exit;
14
  <div id="wpforo-footer">
15
  <?php $stat = WPF()->statistic(); ?>
16
  <?php do_action( 'wpforo_stat_bar_start', WPF() ); ?>
17
- <?php if( wpforo_setting( 'components', 'footer_stat' ) ): ?>
18
  <div id="wpforo-stat-header">
19
  <div class="wpf-footer-title">
20
  <svg viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M640 896v512h-256v-512h256zm384-512v1024h-256v-1024h256zm1024 1152v128h-2048v-1536h128v1408h1920zm-640-896v768h-256v-768h256zm384-384v1152h-256v-1152h256z"/></svg>
@@ -24,12 +24,12 @@ if( ! defined( 'ABSPATH' ) ) exit;
24
  <div class="wpf-all-read"><?php wpforo_mark_all_read_link() ?></div>
25
  <?php if( isset( $stat['posts'] ) && $stat['posts'] ): ?><div class="wpf-stat-recent-posts"><a href="<?php echo esc_url( wpforo_home_url( wpforo_settings_get_slug( 'recent' ) ) ) ?>"><i class="fas fa-list-ul"></i> <span><?php wpforo_phrase( 'Recent Posts' ) ?></span></a></div><?php endif; ?>
26
  <?php if( isset( $stat['posts'] ) && $stat['posts'] ): ?><div class="wpf-stat-unread-posts"><a href="<?php echo esc_url( wpforo_home_url( wpforo_settings_get_slug( 'recent' ) . '?view=unread' ) ) ?>"><i class="fas fa-layer-group"></i> <span><?php wpforo_phrase( 'Unread Posts' ) ?></span></a></div><?php endif; ?>
27
- <?php if( !wpforo_is_module_enabled( 'tags' ) ): ?><div class="wpf-stat-tags"><a href="<?php echo esc_url( wpforo_home_url( wpforo_settings_get_slug( 'tags' ) ) ) ?>"><i class="fas fa-tag"></i> <span><?php wpforo_phrase( 'Tags' ) ?></span></a></div><?php endif; ?>
28
  </div>
29
  </div>
30
  <div id="wpforo-stat-body">
31
 
32
- <?php if( WPF()->usergroup->can( 'view_stat' ) ) : ?>
33
  <div class="wpf-footer-box">
34
  <ul>
35
  <li>
14
  <div id="wpforo-footer">
15
  <?php $stat = WPF()->statistic(); ?>
16
  <?php do_action( 'wpforo_stat_bar_start', WPF() ); ?>
17
+ <?php if( wpforo_setting( 'components', 'footer' ) ): ?>
18
  <div id="wpforo-stat-header">
19
  <div class="wpf-footer-title">
20
  <svg viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M640 896v512h-256v-512h256zm384-512v1024h-256v-1024h256zm1024 1152v128h-2048v-1536h128v1408h1920zm-640-896v768h-256v-768h256zm384-384v1152h-256v-1152h256z"/></svg>
24
  <div class="wpf-all-read"><?php wpforo_mark_all_read_link() ?></div>
25
  <?php if( isset( $stat['posts'] ) && $stat['posts'] ): ?><div class="wpf-stat-recent-posts"><a href="<?php echo esc_url( wpforo_home_url( wpforo_settings_get_slug( 'recent' ) ) ) ?>"><i class="fas fa-list-ul"></i> <span><?php wpforo_phrase( 'Recent Posts' ) ?></span></a></div><?php endif; ?>
26
  <?php if( isset( $stat['posts'] ) && $stat['posts'] ): ?><div class="wpf-stat-unread-posts"><a href="<?php echo esc_url( wpforo_home_url( wpforo_settings_get_slug( 'recent' ) . '?view=unread' ) ) ?>"><i class="fas fa-layer-group"></i> <span><?php wpforo_phrase( 'Unread Posts' ) ?></span></a></div><?php endif; ?>
27
+ <?php if( wpforo_is_module_enabled( 'tags' ) ): ?><div class="wpf-stat-tags"><a href="<?php echo esc_url( wpforo_home_url( wpforo_settings_get_slug( 'tags' ) ) ) ?>"><i class="fas fa-tag"></i> <span><?php wpforo_phrase( 'Tags' ) ?></span></a></div><?php endif; ?>
28
  </div>
29
  </div>
30
  <div id="wpforo-stat-body">
31
 
32
+ <?php if( wpforo_setting( 'components', 'footer_stat' ) && WPF()->usergroup->can( 'view_stat' ) ) : ?>
33
  <div class="wpf-footer-box">
34
  <ul>
35
  <li>
themes/2022/members.php CHANGED
@@ -36,7 +36,6 @@ $members = WPF()->current_object['members'];
36
  <div class="wpforo-member-reputation">
37
  <?php wpforo_member_title($member, true, '', '', ['usergroup']) ?>
38
  <?php wpforo_member_badge($member) ?>
39
- <?php do_action( 'wpforo_after_member_badge', $member ) ?>
40
  </div>
41
  <div class="wpforo-member-joined">
42
  <?php wpforo_phrase('Joined:') ?> <?php wpforo_date( $member['user_registered'], 'date' ) ?>
36
  <div class="wpforo-member-reputation">
37
  <?php wpforo_member_title($member, true, '', '', ['usergroup']) ?>
38
  <?php wpforo_member_badge($member) ?>
 
39
  </div>
40
  <div class="wpforo-member-joined">
41
  <?php wpforo_phrase('Joined:') ?> <?php wpforo_date( $member['user_registered'], 'date' ) ?>
themes/2022/profile-home.php CHANGED
@@ -118,7 +118,13 @@ $rating_level = wpfval( WPF()->current_object['user'], 'rating', 'level' );
118
 
119
  <div class="wpf-profile-section wpf-mi-section">
120
  <div class="wpf-table">
121
- <?php wpforo_fields( $fields ); ?>
 
 
 
 
 
 
122
  </div>
123
  </div>
124
 
118
 
119
  <div class="wpf-profile-section wpf-mi-section">
120
  <div class="wpf-table">
121
+ <?php if( apply_filters('wpforo_profile_field_displaying_restriction', true) ): ?>
122
+ <?php if( WPF()->usergroup->can( 'em', wpfval( WPF()->current_object['user'], 'groupid' ) ) || wpfval( WPF()->current_object['user'], 'posts' ) ): ?>
123
+ <?php wpforo_fields( $fields ); ?>
124
+ <?php endif; ?>
125
+ <?php else: ?>
126
+ <?php wpforo_fields( $fields ); ?>
127
+ <?php endif; ?>
128
  </div>
129
  </div>
130
 
themes/2022/profile.php CHANGED
@@ -49,7 +49,6 @@ $user = wpforo_get_current_object_user();
49
  <div class="wpfp-box wpfp-reputation">
50
  <?php wpforo_member_title($user, true,'', '', ['usergroup']) ?>
51
  <?php wpforo_member_badge($user) ?>
52
- <?php do_action( 'wpforo_after_member_badge', $user ); ?>
53
  </div>
54
  <div class="wpfp-flex"><?php do_action( 'wpforo_after_member_badge_right', $user ); ?></div>
55
  <?php if( WPF()->current_object['user_is_same_current_user'] || WPF()->usergroup->can( 'vmrd' ) ) : ?>
49
  <div class="wpfp-box wpfp-reputation">
50
  <?php wpforo_member_title($user, true,'', '', ['usergroup']) ?>
51
  <?php wpforo_member_badge($user) ?>
 
52
  </div>
53
  <div class="wpfp-flex"><?php do_action( 'wpforo_after_member_badge_right', $user ); ?></div>
54
  <?php if( WPF()->current_object['user_is_same_current_user'] || WPF()->usergroup->can( 'vmrd' ) ) : ?>
themes/2022/style-rtl.css CHANGED
@@ -509,7 +509,7 @@ RTL Style of Classic Theme
509
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box{ min-width: 60px; margin: 0 5px; }
510
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbl{ font-size: 12px; padding-bottom: 2px;}
511
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd{ font-size: 16px; padding: 0 2px; line-height: 16px;}
512
- #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd.wpf-sbd-avatar{display: flex; justify-content: flex-start; align-items: center;}
513
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd.wpf-sbd-avatar img{ width: 25px; height: 25px; border: 2px solid #fff; margin-left: -8px;}
514
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd.wpf-sbd-avatar .wpf-sbd-count{font-size: 13px; margin-right: 13px;}
515
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-last-post-info{display: flex; justify-content: flex-start; align-content: center; margin-top: 5px; padding-top: 1px;}
@@ -1189,7 +1189,8 @@ RTL Style of Classic Theme
1189
 
1190
  #wpforo #wpforo-wrap .wpf-form-wrapper{padding-top:10px;}
1191
  #wpforo #wpforo-wrap .wpf-post-create{padding:10px 0;}
1192
- #wpforo #wpforo-wrap .wpf-field.wpf-field-name-title input[type="text"]{padding: 5px 15px;}
 
1193
  #wpforo #wpforo-wrap .wpf-reply-form-title{ margin:25px 0 15px 0; font-size:22px; font-weight:normal; line-height:26px; display:block;}
1194
  #wpforo #wpforo-wrap .wpf-post-create .wp-editor-tools{padding:5px 5px 0 10px; margin-bottom:10px;}
1195
  #wpforo #wpforo-wrap .wpf-post-create .wp-editor-tabs a.switch-tmce{padding:5px 10px; border-bottom:none;}
@@ -1456,7 +1457,7 @@ RTL Style of Classic Theme
1456
  #wpforo #wpforo-wrap .wpf-navi .wpf-navi-wrap .wpf-next-button{padding:3px 8px!important; color:#fff; font-size:12px; cursor:pointer; line-height: 16px; border-radius: 10px 0 0 10px;}
1457
  #wpforo #wpforo-wrap .wpf-navi .wpf-navi-wrap i.fa-chevron-left{font-size:10px; margin: 0 2px;}
1458
  #wpforo #wpforo-wrap .wpf-navi .wpf-navi-wrap i.fa-chevron-right{font-size:10px; margin: 0 2px;}
1459
- #wpforo #wpforo-wrap .wpf-navi select.wpf-navi-dropdown {appearance:none; width:auto; -webkit-appearance:none; -moz-appearance: none; font-size:12px; padding:1px 10px!important; margin:0; cursor:pointer; border-radius: 0;}
1460
 
1461
  /******************************************************/
1462
  /******************** Stat Panel **********************/
509
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box{ min-width: 60px; margin: 0 5px; }
510
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbl{ font-size: 12px; padding-bottom: 2px;}
511
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd{ font-size: 16px; padding: 0 2px; line-height: 16px;}
512
+ #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd.wpf-sbd-avatar{display: flex; justify-content: flex-start; align-items: center; overflow: hidden;}
513
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd.wpf-sbd-avatar img{ width: 25px; height: 25px; border: 2px solid #fff; margin-left: -8px;}
514
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd.wpf-sbd-avatar .wpf-sbd-count{font-size: 13px; margin-right: 13px;}
515
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-last-post-info{display: flex; justify-content: flex-start; align-content: center; margin-top: 5px; padding-top: 1px;}
1189
 
1190
  #wpforo #wpforo-wrap .wpf-form-wrapper{padding-top:10px;}
1191
  #wpforo #wpforo-wrap .wpf-post-create{padding:10px 0;}
1192
+ #wpforo #wpforo-wrap .wpf-topic-create .wpf-field.wpf-field-name-title input[type="text"],
1193
+ #wpforo #wpforo-wrap .wpf-post-create .wpf-field.wpf-field-name-title input[type="text"]{padding: 5px 15px;}
1194
  #wpforo #wpforo-wrap .wpf-reply-form-title{ margin:25px 0 15px 0; font-size:22px; font-weight:normal; line-height:26px; display:block;}
1195
  #wpforo #wpforo-wrap .wpf-post-create .wp-editor-tools{padding:5px 5px 0 10px; margin-bottom:10px;}
1196
  #wpforo #wpforo-wrap .wpf-post-create .wp-editor-tabs a.switch-tmce{padding:5px 10px; border-bottom:none;}
1457
  #wpforo #wpforo-wrap .wpf-navi .wpf-navi-wrap .wpf-next-button{padding:3px 8px!important; color:#fff; font-size:12px; cursor:pointer; line-height: 16px; border-radius: 10px 0 0 10px;}
1458
  #wpforo #wpforo-wrap .wpf-navi .wpf-navi-wrap i.fa-chevron-left{font-size:10px; margin: 0 2px;}
1459
  #wpforo #wpforo-wrap .wpf-navi .wpf-navi-wrap i.fa-chevron-right{font-size:10px; margin: 0 2px;}
1460
+ #wpforo #wpforo-wrap .wpf-navi select.wpf-navi-dropdown {appearance:none; width:auto; -webkit-appearance:none; -moz-appearance: none; font-size:12px; padding:1px 10px!important; margin:0; cursor:pointer; border-radius: 0; background-image: none;}
1461
 
1462
  /******************************************************/
1463
  /******************** Stat Panel **********************/
themes/2022/style.css CHANGED
@@ -515,7 +515,7 @@ Author: gVectors Team
515
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box{ min-width: 60px; margin: 0 5px; }
516
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbl{ font-size: 12px; padding-bottom: 2px;}
517
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd{ font-size: 16px; padding: 0 2px; line-height: 16px;}
518
- #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd.wpf-sbd-avatar{display: flex; justify-content: flex-start; align-items: center;}
519
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd.wpf-sbd-avatar img{ width: 25px; height: 25px; border: 2px solid #fff; margin-right: -8px;}
520
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd.wpf-sbd-avatar .wpf-sbd-count{font-size: 13px; margin-left: 13px;}
521
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-last-post-info{display: flex; justify-content: flex-start; align-content: center; margin-top: 5px; padding-top: 1px;}
@@ -1199,7 +1199,8 @@ Author: gVectors Team
1199
 
1200
  #wpforo #wpforo-wrap .wpf-form-wrapper{padding-top:10px;}
1201
  #wpforo #wpforo-wrap .wpf-post-create{padding:10px 0;}
1202
- #wpforo #wpforo-wrap .wpf-field.wpf-field-name-title input[type="text"]{padding: 5px 15px;}
 
1203
  #wpforo #wpforo-wrap .wpf-reply-form-title{ margin:25px 0 15px 0; font-size:22px; font-weight:normal; line-height:26px; display:block;}
1204
  #wpforo #wpforo-wrap .wpf-post-create .wp-editor-tools{padding:5px 10px 0 5px; margin-bottom:10px;}
1205
  #wpforo #wpforo-wrap .wpf-post-create .wp-editor-tabs a.switch-tmce{padding:5px 10px; border-bottom:none;}
@@ -1466,7 +1467,7 @@ Author: gVectors Team
1466
  #wpforo #wpforo-wrap .wpf-navi .wpf-navi-wrap .wpf-next-button{padding:3px 8px!important; color:#fff; font-size:12px; cursor:pointer; line-height: 16px; border-radius: 0 10px 10px 0;}
1467
  #wpforo #wpforo-wrap .wpf-navi .wpf-navi-wrap i.fa-chevron-left{font-size:10px; margin: 0 2px;}
1468
  #wpforo #wpforo-wrap .wpf-navi .wpf-navi-wrap i.fa-chevron-right{font-size:10px; margin: 0 2px;}
1469
- #wpforo #wpforo-wrap .wpf-navi select.wpf-navi-dropdown {appearance:none; width:auto; -webkit-appearance:none; -moz-appearance: none; font-size:12px; padding:1px 10px!important; margin:0; cursor:pointer; border-radius: 0;}
1470
 
1471
  /******************************************************/
1472
  /******************** Stat Panel **********************/
515
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box{ min-width: 60px; margin: 0 5px; }
516
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbl{ font-size: 12px; padding-bottom: 2px;}
517
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd{ font-size: 16px; padding: 0 2px; line-height: 16px;}
518
+ #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd.wpf-sbd-avatar{display: flex; justify-content: flex-start; align-items: center; overflow: hidden;}
519
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd.wpf-sbd-avatar img{ width: 25px; height: 25px; border: 2px solid #fff; margin-right: -8px;}
520
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-forum-details .wpf-stat-box .wpf-sbd.wpf-sbd-avatar .wpf-sbd-count{font-size: 13px; margin-left: 13px;}
521
  #wpforo #wpforo-wrap .wpfl-2 .wpforo-forum .wpforo-forum-data .wpforo-last-post-info{display: flex; justify-content: flex-start; align-content: center; margin-top: 5px; padding-top: 1px;}
1199
 
1200
  #wpforo #wpforo-wrap .wpf-form-wrapper{padding-top:10px;}
1201
  #wpforo #wpforo-wrap .wpf-post-create{padding:10px 0;}
1202
+ #wpforo #wpforo-wrap .wpf-topic-create .wpf-field.wpf-field-name-title input[type="text"],
1203
+ #wpforo #wpforo-wrap .wpf-post-create .wpf-field.wpf-field-name-title input[type="text"]{padding: 5px 15px;}
1204
  #wpforo #wpforo-wrap .wpf-reply-form-title{ margin:25px 0 15px 0; font-size:22px; font-weight:normal; line-height:26px; display:block;}
1205
  #wpforo #wpforo-wrap .wpf-post-create .wp-editor-tools{padding:5px 10px 0 5px; margin-bottom:10px;}
1206
  #wpforo #wpforo-wrap .wpf-post-create .wp-editor-tabs a.switch-tmce{padding:5px 10px; border-bottom:none;}
1467
  #wpforo #wpforo-wrap .wpf-navi .wpf-navi-wrap .wpf-next-button{padding:3px 8px!important; color:#fff; font-size:12px; cursor:pointer; line-height: 16px; border-radius: 0 10px 10px 0;}
1468
  #wpforo #wpforo-wrap .wpf-navi .wpf-navi-wrap i.fa-chevron-left{font-size:10px; margin: 0 2px;}
1469
  #wpforo #wpforo-wrap .wpf-navi .wpf-navi-wrap i.fa-chevron-right{font-size:10px; margin: 0 2px;}
1470
+ #wpforo #wpforo-wrap .wpf-navi select.wpf-navi-dropdown {appearance:none; width:auto; -webkit-appearance:none; -moz-appearance: none; font-size:12px; padding:1px 10px!important; margin:0; cursor:pointer; border-radius: 0; background-image: none;}
1471
 
1472
  /******************************************************/
1473
  /******************** Stat Panel **********************/
themes/classic/layouts/1/post.php CHANGED
@@ -49,6 +49,7 @@ if( ! defined( 'ABSPATH' ) ) exit;
49
  <?php WPF()->tpl->member_social_buttons( $member ) ?>
50
  </div>
51
  </div>
 
52
  </div><!-- left -->
53
  <div class="wpf-right">
54
  <div class="wpforo-post-content-top">
49
  <?php WPF()->tpl->member_social_buttons( $member ) ?>
50
  </div>
51
  </div>
52
+ <?php do_action( 'wpforo_post_left_end', $post, $topic, $forum, 1 ); ?>
53
  </div><!-- left -->
54
  <div class="wpf-right">
55
  <div class="wpforo-post-content-top">
themes/classic/layouts/2/post.php CHANGED
@@ -74,6 +74,7 @@ if( ! defined( 'ABSPATH' ) ) exit;
74
  <span class="wpf-mod-message"><i class="fas fa-exclamation-circle" aria-hidden="true"></i> <?php wpforo_phrase( 'Awaiting moderation' ) ?></span>
75
  <?php endif; ?>
76
  </div>
 
77
  </div>
78
  <div class="wpforo-post-content-bottom">
79
  <div class="cbleft wpfcl-0">
74
  <span class="wpf-mod-message"><i class="fas fa-exclamation-circle" aria-hidden="true"></i> <?php wpforo_phrase( 'Awaiting moderation' ) ?></span>
75
  <?php endif; ?>
76
  </div>
77
+ <?php do_action( 'wpforo_post_content_end', $post, $topic, $forum, 2 ); ?>
78
  </div>
79
  <div class="wpforo-post-content-bottom">
80
  <div class="cbleft wpfcl-0">
themes/classic/style-rtl.css CHANGED
@@ -332,6 +332,29 @@ RTL Style of Classic Theme
332
  #wpforo #wpforo-wrap .wpf-post-starter{padding: 3px 10px; display: inline-block; line-height: 16px; font-size: 12px;}
333
  #wpforo #wpforo-wrap .wpf-post-starter i{margin-left: 2px;}
334
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
335
  /****************************************************/
336
  /********* wpForo Layout 1 (Extended Layout) ********/
337
  /****************************************************/
@@ -410,6 +433,12 @@ RTL Style of Classic Theme
410
  #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .bottom .bright{float:left; text-align:left;}
411
  #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .wpf-right .wpf-post-starter{margin-left: 10px; border-bottom: none; margin-bottom: -1px;}
412
 
 
 
 
 
 
 
413
  /******************************************************/
414
  /********* wpForo Layout 2 (Simplified Layout) ********/
415
  /******************************************************/
@@ -907,6 +936,34 @@ RTL Style of Classic Theme
907
  #wpforo #wpforo-wrap .wpforo-activity-content .activity-date{padding:10px; white-space:nowrap; width:23%; text-align:center;}
908
  #wpforo #wpforo-wrap .wpforo-activity-content .activity-foot {padding:10px; width:100%; text-align:left; margin-top:2px; border-top:#ffffff solid 1px;}
909
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
910
  /******************************************************/
911
  /******************** SUBSCRIPTION ********************/
912
  /******************************************************/
@@ -1572,6 +1629,8 @@ body.wpf-dark #wpforo-dialog-extra-wrap #wpforo-dialog{background-color: #000; c
1572
  #wpforo #wpforo-wrap .wpf-acp-footer{background: #F5F5F5; padding:10px; border-top: 1px dashed #ccc; display: flex; justify-content: center; flex-wrap: wrap;}
1573
  #wpforo #wpforo-wrap .wpf-acp-footer a.wpf-button-secondary{margin: 2px; background: #fff; padding: 5px 7px; font-size: 12px;}
1574
 
 
 
1575
  /****************************************************/
1576
  /************* Please login to be able reply *******/
1577
  /****************************************************/
332
  #wpforo #wpforo-wrap .wpf-post-starter{padding: 3px 10px; display: inline-block; line-height: 16px; font-size: 12px;}
333
  #wpforo #wpforo-wrap .wpf-post-starter i{margin-left: 2px;}
334
 
335
+ #wpforo #wpforo-wrap .wpf-button-outlined{color: #fff; margin-left: 10px;}
336
+ #wpforo #wpforo-wrap .wpforo-follow-wrap,
337
+ #wpforo #wpforo-wrap .wpf-ab-mute_mention{display: none;}
338
+ #wpforo #wpforo-wrap .wpf-profile-panel{background: #f5f5f5;margin-top: 10px;}
339
+
340
+ /******************************************************/
341
+ /********************* Popover ************************/
342
+ /******************************************************/
343
+ #wpforo #wpforo-wrap .wpf-popover { display: inline-block; text-decoration: none; position: relative; margin: 0 2px; -webkit-transition: all .5s; -moz-transition: all .5s; transition: all .5s;}
344
+ #wpforo #wpforo-wrap .wpf-popover .wpf-popover-content {background: #f5f5f5;color: #555;border-radius: 15px;font-size: 14px;font-weight: bold;position: absolute;bottom: 0;right: -20px;left: -20px;padding: 5px 7px;visibility: hidden;opacity: 0;-webkit-transition: all .4s;-moz-transition: all .4s;transition: all .4s;text-align: center;box-shadow: 0 0 7px #ccc;}
345
+ #wpforo #wpforo-wrap .wpf-popover .wpf-popover-content:before {content: '';border-right: 5px solid transparent;border-left: 5px solid transparent;border-top: 11px solid transparent;position: absolute;bottom: -11px;right: 45%;text-align: center;}
346
+ #wpforo #wpforo-wrap .wpf-popover:hover .wpf-popover-content,
347
+ #wpforo #wpforo-wrap .wpf-popover:focus .wpf-popover-content,
348
+ #wpforo #wpforo-wrap .wpf-popover:active .wpf-popover-content{bottom: 35px; visibility: visible; opacity: 1; text-align: center; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 10px 5px;}
349
+ #wpforo #wpforo-wrap .wpf-popover > span > i{font-size: 18px; line-height: 18px; cursor: pointer;}
350
+ #wpforo #wpforo-wrap .wpf-popover .wpf-popover-content span{display: block;}
351
+ #wpforo #wpforo-wrap .wpf-popover .wpf-popover-content i{font-size: 18px; line-height: 18px; cursor: pointer; background: transparent; border-radius: 50%; padding: 5px;}
352
+ #wpforo #wpforo-wrap .wpf-popover .wpf-popover-content i:hover{background: #fff;}
353
+ #wpforo #wpforo-wrap .wpf-popover .wpf-react.wpf-unreacted > i {color: #999999 !important;}
354
+ #wpforo #wpforo-wrap .wpf-popover i.fa-thumbs-up{color: #3f7796;}
355
+ #wpforo #wpforo-wrap .wpf-popover i.fa-thumbs-down{color: #f42d2c;}
356
+ #wpforo #wpforo-wrap .wpf-popover .wpf-react.wpf-unreacted > i{ color: #999999; }
357
+
358
  /****************************************************/
359
  /********* wpForo Layout 1 (Extended Layout) ********/
360
  /****************************************************/
433
  #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .bottom .bright{float:left; text-align:left;}
434
  #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .wpf-right .wpf-post-starter{margin-left: 10px; border-bottom: none; margin-bottom: -1px;}
435
 
436
+ #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .wpf-left{position: relative;}
437
+ #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .wpf-left .wpforo-reaction{padding: 12px 15px 0px 5px; margin-right: -8px;}
438
+ #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .wpf-left .wpforo-reaction > span > i{font-size: 20px;}
439
+ #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .bottom {font-size:12px; padding:10px; display: flex; justify-content: space-between; align-items: center;}
440
+ #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .bottom .reacted-users{text-align:right; flex-grow: 1;}
441
+
442
  /******************************************************/
443
  /********* wpForo Layout 2 (Simplified Layout) ********/
444
  /******************************************************/
936
  #wpforo #wpforo-wrap .wpforo-activity-content .activity-date{padding:10px; white-space:nowrap; width:23%; text-align:center;}
937
  #wpforo #wpforo-wrap .wpforo-activity-content .activity-foot {padding:10px; width:100%; text-align:left; margin-top:2px; border-top:#ffffff solid 1px;}
938
 
939
+ #wpforo #wpforo-wrap .wpf-activity-panel {box-shadow: 0px 0px 3px #cccccc;}
940
+ #wpforo #wpforo-wrap .wpfa-reply .wpf-activity-icon svg {fill: #999999;}
941
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel{display: flex; justify-content: space-between; align-items: stretch; border-radius: 10px; margin:30px 0; padding: 10px;}
942
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel .wpf-activity-panel-left{display: flex; justify-content: flex-start; align-items: center; font-size: 14px;}
943
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel .wpf-activity-panel-left span{padding: 0 3px;}
944
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel .wpf-activity-panel-right{display: flex; justify-content: flex-end; align-items: center; font-size: 14px;}
945
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel .wpf-activity-panel-right span{padding: 0 10px;}
946
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel .wpf-activity-panel-right span:last-child{border-left: none;}
947
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel .wpf-activity-panel-right span.wpf-active{border-radius: 5px;}
948
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity{display: flex; justify-content: space-between; align-items: stretch; margin-bottom: 10px;}
949
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity{display: flex; justify-content: space-between; align-items: stretch; margin-bottom: 10px;}
950
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-icon{width: 70px; padding:5px 10px; position: relative;}
951
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-icon i{position: absolute; display: inline-block; width: 23px; height: 23px; text-align: center; right: -2px; top: 39px; border-radius: 50%; font-size: 14px; line-height: 23px;}
952
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-icon svg{width: 34px; height: 34px;}
953
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-icon .wpf-activity-tlabel{line-height: 15px; font-size: 11px; text-transform: uppercase;}
954
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data{flex-grow: 1; padding-right: 20px; width: calc(100% - 80px);}
955
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-top{display: flex; justify-content: space-between; align-items: flex-start;}
956
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-bottom{display: flex; justify-content: flex-start; align-items: center; margin-top: 1px;}
957
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-date{width: 130px; text-align: left; font-size: 13px;}
958
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-stat{display: flex; justify-content: flex-start; align-items: center;}
959
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-stat div{margin-left: 15px;}
960
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-bottom .wpf-activity-flabel{font-size: 12px; text-transform: uppercase;}
961
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-bottom .wpf-activity-forum{padding-right: 10px; font-size: 12px; margin-right: 10px;}
962
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-bottom .wpf-activity-forum i{margin-left: 5px;}
963
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-top .wpf-activity-title{font-size: 15px;}
964
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-top .wpf-activity-title i{padding-left: 3px;}
965
+ #wpforo #wpforo-wrap.wpft-favored .wpfa-reply .wpf-activity-icon svg{width: 32px; height: 32px; margin-top: 5px; margin-right: 2px;}
966
+
967
  /******************************************************/
968
  /******************** SUBSCRIPTION ********************/
969
  /******************************************************/
1629
  #wpforo #wpforo-wrap .wpf-acp-footer{background: #F5F5F5; padding:10px; border-top: 1px dashed #ccc; display: flex; justify-content: center; flex-wrap: wrap;}
1630
  #wpforo #wpforo-wrap .wpf-acp-footer a.wpf-button-secondary{margin: 2px; background: #fff; padding: 5px 7px; font-size: 12px;}
1631
 
1632
+ #wpforo #wpforo-wrap .wpfbg-10{background-color: #ff8a34 !important;}
1633
+
1634
  /****************************************************/
1635
  /************* Please login to be able reply *******/
1636
  /****************************************************/
themes/classic/style.css CHANGED
@@ -337,6 +337,29 @@ Author: gVectors Team
337
  #wpforo #wpforo-wrap .wpf-post-starter{padding: 3px 10px; display: inline-block; line-height: 16px; font-size: 12px;}
338
  #wpforo #wpforo-wrap .wpf-post-starter i{margin-right: 2px;}
339
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
340
  /****************************************************/
341
  /********* wpForo Layout 1 (Extended Layout) ********/
342
  /****************************************************/
@@ -415,6 +438,12 @@ Author: gVectors Team
415
  #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .bottom .bright{float:right; text-align:right;}
416
  #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .wpf-right .wpf-post-starter{margin-right: 10px; border-bottom: none; margin-bottom: -1px;}
417
 
 
 
 
 
 
 
418
  /******************************************************/
419
  /********* wpForo Layout 2 (Simplified Layout) ********/
420
  /******************************************************/
@@ -912,6 +941,34 @@ Author: gVectors Team
912
  #wpforo #wpforo-wrap .wpforo-activity-content .activity-date{padding:10px; white-space:nowrap; width:23%; text-align:center;}
913
  #wpforo #wpforo-wrap .wpforo-activity-content .activity-foot {padding:10px; width:100%; text-align:right; margin-top:2px; border-top:#ffffff solid 1px;}
914
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
915
  /******************************************************/
916
  /******************** SUBSCRIPTION ********************/
917
  /******************************************************/
@@ -1581,6 +1638,8 @@ body.wpf-dark #wpforo-dialog-extra-wrap #wpforo-dialog{background-color: #000; c
1581
  #wpforo #wpforo-wrap .wpf-acp-footer{background: #F5F5F5; padding:10px; border-top: 1px dashed #ccc; display: flex; justify-content: center; flex-wrap: wrap;}
1582
  #wpforo #wpforo-wrap .wpf-acp-footer a.wpf-button-secondary{margin: 2px; background: #fff; padding: 5px 7px; font-size: 12px;}
1583
 
 
 
1584
  /****************************************************/
1585
  /************* Please login to be able reply *******/
1586
  /****************************************************/
337
  #wpforo #wpforo-wrap .wpf-post-starter{padding: 3px 10px; display: inline-block; line-height: 16px; font-size: 12px;}
338
  #wpforo #wpforo-wrap .wpf-post-starter i{margin-right: 2px;}
339
 
340
+ #wpforo #wpforo-wrap .wpf-button-outlined{color: #fff; margin-left: 10px;}
341
+ #wpforo #wpforo-wrap .wpforo-follow-wrap,
342
+ #wpforo #wpforo-wrap .wpf-ab-mute_mention{display: none;}
343
+ #wpforo #wpforo-wrap .wpf-profile-panel{background: #f5f5f5;margin-top: 10px;}
344
+
345
+ /******************************************************/
346
+ /********************* Popover ************************/
347
+ /******************************************************/
348
+ #wpforo #wpforo-wrap .wpf-popover { display: inline-block; text-decoration: none; position: relative; margin: 0 2px; -webkit-transition: all .5s; -moz-transition: all .5s; transition: all .5s;}
349
+ #wpforo #wpforo-wrap .wpf-popover .wpf-popover-content {background: #f5f5f5;color: #555;border-radius: 15px;font-size: 14px;font-weight: bold;position: absolute;bottom: 0;left: -20px;right: -20px;padding: 5px 7px;visibility: hidden;opacity: 0;-webkit-transition: all .4s;-moz-transition: all .4s;transition: all .4s;text-align: center;box-shadow: 0 0 7px #ccc;}
350
+ #wpforo #wpforo-wrap .wpf-popover .wpf-popover-content:before {content: '';border-left: 5px solid transparent;border-right: 5px solid transparent;border-top: 11px solid transparent;position: absolute;bottom: -11px;left: 45%;text-align: center;}
351
+ #wpforo #wpforo-wrap .wpf-popover:hover .wpf-popover-content,
352
+ #wpforo #wpforo-wrap .wpf-popover:focus .wpf-popover-content,
353
+ #wpforo #wpforo-wrap .wpf-popover:active .wpf-popover-content{bottom: 35px; visibility: visible; opacity: 1; text-align: center; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 10px 5px;}
354
+ #wpforo #wpforo-wrap .wpf-popover > span > i{font-size: 18px; line-height: 18px; cursor: pointer;}
355
+ #wpforo #wpforo-wrap .wpf-popover .wpf-popover-content span{display: block;}
356
+ #wpforo #wpforo-wrap .wpf-popover .wpf-popover-content i{font-size: 18px; line-height: 18px; cursor: pointer; background: transparent; border-radius: 50%; padding: 5px;}
357
+ #wpforo #wpforo-wrap .wpf-popover .wpf-popover-content i:hover{background: #fff;}
358
+ #wpforo #wpforo-wrap .wpf-popover .wpf-react.wpf-unreacted > i {color: #999999 !important;}
359
+ #wpforo #wpforo-wrap .wpf-popover i.fa-thumbs-up{color: #3f7796;}
360
+ #wpforo #wpforo-wrap .wpf-popover i.fa-thumbs-down{color: #f42d2c;}
361
+ #wpforo #wpforo-wrap .wpf-popover .wpf-react.wpf-unreacted > i{ color: #999999; }
362
+
363
  /****************************************************/
364
  /********* wpForo Layout 1 (Extended Layout) ********/
365
  /****************************************************/
438
  #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .bottom .bright{float:right; text-align:right;}
439
  #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .wpf-right .wpf-post-starter{margin-right: 10px; border-bottom: none; margin-bottom: -1px;}
440
 
441
+ #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .wpf-left{position: relative;}
442
+ #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .wpf-left .wpforo-reaction{padding: 12px 5px 0px 15px; margin-left: -8px;}
443
+ #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .wpf-left .wpforo-reaction > span > i{font-size: 20px;}
444
+ #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .bottom {font-size:12px; padding:10px; display: flex; justify-content: space-between; align-items: center;}
445
+ #wpforo #wpforo-wrap .wpfl-1 .wpforo-post .bottom .reacted-users{text-align:left; flex-grow: 1;}
446
+
447
  /******************************************************/
448
  /********* wpForo Layout 2 (Simplified Layout) ********/
449
  /******************************************************/
941
  #wpforo #wpforo-wrap .wpforo-activity-content .activity-date{padding:10px; white-space:nowrap; width:23%; text-align:center;}
942
  #wpforo #wpforo-wrap .wpforo-activity-content .activity-foot {padding:10px; width:100%; text-align:right; margin-top:2px; border-top:#ffffff solid 1px;}
943
 
944
+ #wpforo #wpforo-wrap .wpf-activity-panel {box-shadow: 0px 0px 3px #cccccc;}
945
+ #wpforo #wpforo-wrap .wpfa-reply .wpf-activity-icon svg {fill: #999999;}
946
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel{display: flex; justify-content: space-between; align-items: stretch; border-radius: 10px; margin:30px 0; padding: 10px;}
947
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel .wpf-activity-panel-left{display: flex; justify-content: flex-start; align-items: center; font-size: 14px;}
948
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel .wpf-activity-panel-left span{padding: 0 3px;}
949
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel .wpf-activity-panel-right{display: flex; justify-content: flex-end; align-items: center; font-size: 14px;}
950
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel .wpf-activity-panel-right span{padding: 0 10px;}
951
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel .wpf-activity-panel-right span:last-child{border-right: none;}
952
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-panel .wpf-activity-panel-right span.wpf-active{border-radius: 5px;}
953
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity{display: flex; justify-content: space-between; align-items: stretch; margin-bottom: 10px;}
954
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity{display: flex; justify-content: space-between; align-items: stretch; margin-bottom: 10px;}
955
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-icon{width: 70px; padding:5px 10px; position: relative;}
956
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-icon i{position: absolute; display: inline-block; width: 23px; height: 23px; text-align: center; left: -2px; top: 39px; border-radius: 50%; font-size: 14px; line-height: 23px;}
957
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-icon svg{width: 34px; height: 34px;}
958
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-icon .wpf-activity-tlabel{line-height: 15px; font-size: 11px; text-transform: uppercase;}
959
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data{flex-grow: 1; padding-left: 20px; width: calc(100% - 80px);}
960
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-top{display: flex; justify-content: space-between; align-items: flex-start;}
961
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-bottom{display: flex; justify-content: flex-start; align-items: center; margin-top: 1px;}
962
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-date{width: 130px; text-align: right; font-size: 13px;}
963
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-stat{display: flex; justify-content: flex-start; align-items: center;}
964
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-stat div{margin-right: 15px;}
965
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-bottom .wpf-activity-flabel{font-size: 12px; text-transform: uppercase;}
966
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-bottom .wpf-activity-forum{padding-left: 10px; font-size: 12px; margin-left: 10px;}
967
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-bottom .wpf-activity-forum i{margin-right: 5px;}
968
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-top .wpf-activity-title{font-size: 15px;}
969
+ #wpforo #wpforo-wrap.wpft-favored .wpf-activity-data .wpf-activity-top .wpf-activity-title i{padding-right: 3px;}
970
+ #wpforo #wpforo-wrap.wpft-favored .wpfa-reply .wpf-activity-icon svg{width: 32px; height: 32px; margin-top: 5px; margin-left: 2px;}
971
+
972
  /******************************************************/
973
  /******************** SUBSCRIPTION ********************/
974
  /******************************************************/
1638
  #wpforo #wpforo-wrap .wpf-acp-footer{background: #F5F5F5; padding:10px; border-top: 1px dashed #ccc; display: flex; justify-content: center; flex-wrap: wrap;}
1639
  #wpforo #wpforo-wrap .wpf-acp-footer a.wpf-button-secondary{margin: 2px; background: #fff; padding: 5px 7px; font-size: 12px;}
1640
 
1641
+ #wpforo #wpforo-wrap .wpfbg-10{background-color: #ff8a34 !important;}
1642
+
1643
  /****************************************************/
1644
  /************* Please login to be able reply *******/
1645
  /****************************************************/
themes/classic/styles/matrix.css CHANGED
@@ -725,4 +725,5 @@ body.wpf-dark #wpf-msg-box a:hover, body.wpf-dark #wpf-msg-box a:active{color:__
725
  #wpforo #wpforo-wrap.wpf-dark .wpf-acp-content a.wpf-button-secondary:hover {box-shadow: 0px 0px 8px #fff;color: #fff;}
726
  #wpforo #wpforo-wrap.wpf-dark .wpf-acp-footer a.wpf-button-secondary {background: #777;color: #fff;}
727
  #wpforo #wpforo-wrap.wpf-dark .wpf-acp-footer a.wpf-button-secondary:last-child{color: #fff!important; background: #e22d00;}
 
728
  .wpf-link{ color: __WPFCOLOR_12__ !important; }
725
  #wpforo #wpforo-wrap.wpf-dark .wpf-acp-content a.wpf-button-secondary:hover {box-shadow: 0px 0px 8px #fff;color: #fff;}
726
  #wpforo #wpforo-wrap.wpf-dark .wpf-acp-footer a.wpf-button-secondary {background: #777;color: #fff;}
727
  #wpforo #wpforo-wrap.wpf-dark .wpf-acp-footer a.wpf-button-secondary:last-child{color: #fff!important; background: #e22d00;}
728
+ #wpforo #wpforo-wrap.wpf-dark .wpf-profile-panel{background: transparent;}
729
  .wpf-link{ color: __WPFCOLOR_12__ !important; }
themes/classic/widgets-rtl.css CHANGED
@@ -62,10 +62,9 @@
62
  #wpf-widget-online-users .wpforo-widget-content a.onlineuser{ padding:3px 7px; border:1px solid #ededed; display:inline-block; margin:0 2px 5px 3px; line-height:18px; font-size:13px;}
63
  #wpforo #wpf-widget-online-users .wpforo-widget-content a.onlineavatar,
64
  #wpf-widget-online-users .wpforo-widget-content a.onlineavatar{ padding:1px; border:1px solid #ededed; display:inline-block; margin:0 2px 5px 3px; width:20%;max-width: 64px;}
65
- #wpforo #wpf-widget-search input[type="text"],
66
- #wpf-widget-search input[type="text"]{ font-size:14px; line-height:16px; padding:2px 5px; display:inline-block; margin:0; height:28px;}
67
- #wpforo #wpf-widget-search input[type="submit"],
68
- #wpf-widget-search input[type="submit"]{ font-size:14px; line-height:16px; padding:2px 5px; display:inline-block; margin:0; height:28px;}
69
  #wpforo #wpf-widget-forums .wpforo-widget-content .wpf-dl-item,
70
  #wpf-widget-forums .wpforo-widget-content .wpf-dl-item{ padding-top:2px; display:block;}
71
  #wpforo #wpf-widget-forums .wpforo-widget-content .wpf-dl-item i,
@@ -178,6 +177,8 @@
178
  #wpforo #wpf-widget-profile .wpf-prof-footer .wpf-button,
179
  #wpf-widget-profile .wpf-prof-footer .wpf-button{box-shadow: none;}
180
 
 
 
181
  /******************************************************/
182
  /********************* Addons Widgets *****************/
183
  /******************************************************/
62
  #wpf-widget-online-users .wpforo-widget-content a.onlineuser{ padding:3px 7px; border:1px solid #ededed; display:inline-block; margin:0 2px 5px 3px; line-height:18px; font-size:13px;}
63
  #wpforo #wpf-widget-online-users .wpforo-widget-content a.onlineavatar,
64
  #wpf-widget-online-users .wpforo-widget-content a.onlineavatar{ padding:1px; border:1px solid #ededed; display:inline-block; margin:0 2px 5px 3px; width:20%;max-width: 64px;}
65
+ #wpf-widget-search #wpforo-search-form .wpf-search-widget-label {position: relative !important;display: block !important;}
66
+ #wpf-widget-search #wpforo-search-form .wpf-search-widget-label input[type="text"] {position: relative !important;display: block !important;padding: 7px 8px;height: 32px;}
67
+ #wpf-widget-search #wpforo-search-form .wpf-search-widget-label svg {enable-background: new 0 0 16 16;fill: #999;position: absolute;width: 19px;height: 19px;left: 5px;bottom: 6px;cursor: pointer;}
 
68
  #wpforo #wpf-widget-forums .wpforo-widget-content .wpf-dl-item,
69
  #wpf-widget-forums .wpforo-widget-content .wpf-dl-item{ padding-top:2px; display:block;}
70
  #wpforo #wpf-widget-forums .wpforo-widget-content .wpf-dl-item i,
177
  #wpforo #wpf-widget-profile .wpf-prof-footer .wpf-button,
178
  #wpf-widget-profile .wpf-prof-footer .wpf-button{box-shadow: none;}
179
 
180
+ #wpforo #wpforo-wrap .wpforo-widget-content .wpf-circle {box-shadow: none;}
181
+
182
  /******************************************************/
183
  /********************* Addons Widgets *****************/
184
  /******************************************************/
themes/classic/widgets.css CHANGED
@@ -62,10 +62,9 @@
62
  #wpf-widget-online-users .wpforo-widget-content a.onlineuser{ padding:3px 7px; border:1px solid #ededed; display:inline-block; margin:0 3px 5px 2px; line-height:18px; font-size:13px;}
63
  #wpforo #wpf-widget-online-users .wpforo-widget-content a.onlineavatar,
64
  #wpf-widget-online-users .wpforo-widget-content a.onlineavatar{ padding:1px; border:1px solid #ededed; display:inline-block; margin:0 3px 5px 2px; width:20%;max-width: 64px;}
65
- #wpforo #wpf-widget-search input[type="text"],
66
- #wpf-widget-search input[type="text"]{ font-size:14px; line-height:16px; padding:2px 5px; display:inline-block; margin:0; height:28px;}
67
- #wpforo #wpf-widget-search input[type="submit"],
68
- #wpf-widget-search input[type="submit"]{ font-size:14px; line-height:16px; padding:2px 5px; display:inline-block; margin:0; height:28px;}
69
  #wpforo #wpf-widget-forums .wpforo-widget-content .wpf-dl-item,
70
  #wpf-widget-forums .wpforo-widget-content .wpf-dl-item{ padding-top:2px; display:block;}
71
  #wpforo #wpf-widget-forums .wpforo-widget-content .wpf-dl-item i,
@@ -178,6 +177,8 @@
178
  #wpforo #wpf-widget-profile .wpf-prof-footer .wpf-button,
179
  #wpf-widget-profile .wpf-prof-footer .wpf-button{box-shadow: none;}
180
 
 
 
181
  /******************************************************/
182
  /********************* Addons Widgets *****************/
183
  /******************************************************/
62
  #wpf-widget-online-users .wpforo-widget-content a.onlineuser{ padding:3px 7px; border:1px solid #ededed; display:inline-block; margin:0 3px 5px 2px; line-height:18px; font-size:13px;}
63
  #wpforo #wpf-widget-online-users .wpforo-widget-content a.onlineavatar,
64
  #wpf-widget-online-users .wpforo-widget-content a.onlineavatar{ padding:1px; border:1px solid #ededed; display:inline-block; margin:0 3px 5px 2px; width:20%;max-width: 64px;}
65
+ #wpf-widget-search #wpforo-search-form .wpf-search-widget-label {position: relative !important;display: block !important;}
66
+ #wpf-widget-search #wpforo-search-form .wpf-search-widget-label input[type="text"] {position: relative !important;display: block !important;padding: 7px 8px;height: 32px;}
67
+ #wpf-widget-search #wpforo-search-form .wpf-search-widget-label svg {enable-background: new 0 0 16 16;fill: #999;position: absolute;width: 19px;height: 19px;right: 5px;bottom: 6px;cursor: pointer;}
 
68
  #wpforo #wpf-widget-forums .wpforo-widget-content .wpf-dl-item,
69
  #wpf-widget-forums .wpforo-widget-content .wpf-dl-item{ padding-top:2px; display:block;}
70
  #wpforo #wpf-widget-forums .wpforo-widget-content .wpf-dl-item i,
177
  #wpforo #wpf-widget-profile .wpf-prof-footer .wpf-button,
178
  #wpf-widget-profile .wpf-prof-footer .wpf-button{box-shadow: none;}
179
 
180
+ #wpforo #wpforo-wrap .wpforo-widget-content .wpf-circle {box-shadow: none;}
181
+
182
  /******************************************************/
183
  /********************* Addons Widgets *****************/
184
  /******************************************************/
widgets/RecentPosts.php CHANGED
@@ -89,9 +89,8 @@ class RecentPosts extends WP_Widget {
89
  foreach( $postids as $postid ) {
90
  $class = '';
91
  $post = wpforo_post( $postid );
92
- if( ! WPF()->post->view_access( $post ) ) {
93
- continue;
94
- }
95
  $current = $post['topicid'] == wpfval( WPF()->current_object, 'topicid' );
96
  if( ! $current ) {
97
  $class = 'class="' . ( $instance['display_only_unread'] ? 'wpf-unread-post' : wpforo_unread( $post['topicid'], 'post', false, $post['postid'] ) ) . '"';
@@ -234,14 +233,10 @@ class RecentPosts extends WP_Widget {
234
  value="<?php echo esc_attr( $title ); ?>">
235
  </p>
236
  <p>
237
- <label for="<?php echo $this->get_field_id( 'forumids_filter' ) ?>"><?php _e( 'Filter by forums', 'wpforo' ); ?>
238
- :</label>
239
- <input id="<?php echo $this->get_field_id( 'forumids_filter' ) ?>" class="wpf_wdg_forumids_filter"
240
- name="<?php echo esc_attr( $this->get_field_name( 'forumids_filter' ) ); ?>" <?php checked( $forumids_filter ); ?>
241
- type="checkbox">
242
- <label for="<?php echo $this->get_field_id( 'forumids' ) ?>"></label>
243
- <select id="<?php echo $this->get_field_id( 'forumids' ) ?>" class="wpf_wdg_forumids">
244
- <?php WPF()->forum->tree( 'select_box', false, $selected ) ?>
245
  </select>
246
  </p>
247
  <p>
89
  foreach( $postids as $postid ) {
90
  $class = '';
91
  $post = wpforo_post( $postid );
92
+ if( ! wpfval($post, 'forumid') ) continue;
93
+ if( ! WPF()->post->view_access( $post ) ) continue;
 
94
  $current = $post['topicid'] == wpfval( WPF()->current_object, 'topicid' );
95
  if( ! $current ) {
96
  $class = 'class="' . ( $instance['display_only_unread'] ? 'wpf-unread-post' : wpforo_unread( $post['topicid'], 'post', false, $post['postid'] ) ) . '"';
233
  value="<?php echo esc_attr( $title ); ?>">
234
  </p>
235
  <p>
236
+ <label for="<?php echo $this->get_field_id('forumids_filter') ?>"><?php _e('Filter by forums', 'wpforo'); ?>:</label>
237
+ <input id="<?php echo $this->get_field_id('forumids_filter') ?>" class="wpf_wdg_forumids_filter" name="<?php echo esc_attr( $this->get_field_name( 'forumids_filter' ) ); ?>" <?php checked( $forumids_filter ); ?> type="checkbox">
238
+ <select id="<?php echo $this->get_field_id('forumids') ?>" class="wpf_wdg_forumids" name="<?php echo esc_attr( $this->get_field_name( 'forumids' ) ); ?>[]" multiple>
239
+ <?php WPF()->forum->tree( 'select_box', false, $selected, false ) ?>
 
 
 
 
240
  </select>
241
  </p>
242
  <p>
widgets/RecentTopics.php CHANGED
@@ -138,7 +138,8 @@ class RecentTopics extends WP_Widget {
138
  <input id="<?php echo $this->get_field_id( 'forumids_filter' ) ?>" class="wpf_wdg_forumids_filter"
139
  name="<?php echo esc_attr( $this->get_field_name( 'forumids_filter' ) ); ?>" <?php checked( $forumids_filter ); ?>
140
  type="checkbox">
141
- <label for="<?php echo $this->get_field_id( 'forumids' ) ?>"></label><select id="<?php echo $this->get_field_id( 'forumids' ) ?>" class="wpf_wdg_forumids"
 
142
  name="<?php echo esc_attr( $this->get_field_name( 'forumids' ) ); ?>[]" multiple>
143
  <?php WPF()->forum->tree( 'select_box', false, $selected ) ?>
144
  </select>
138
  <input id="<?php echo $this->get_field_id( 'forumids_filter' ) ?>" class="wpf_wdg_forumids_filter"
139
  name="<?php echo esc_attr( $this->get_field_name( 'forumids_filter' ) ); ?>" <?php checked( $forumids_filter ); ?>
140
  type="checkbox">
141
+ <label for="<?php echo $this->get_field_id( 'forumids' ) ?>"></label>
142
+ <select id="<?php echo $this->get_field_id( 'forumids' ) ?>" class="wpf_wdg_forumids"
143
  name="<?php echo esc_attr( $this->get_field_name( 'forumids' ) ); ?>[]" multiple>
144
  <?php WPF()->forum->tree( 'select_box', false, $selected ) ?>
145
  </select>
wpforo.php CHANGED
@@ -5,14 +5,14 @@
5
  * Description: WordPress Forum plugin. wpForo is a full-fledged forum solution for your community. Comes with multiple modern forum layouts.
6
  * Author: gVectors Team
7
  * Author URI: https://gvectors.com/
8
- * Version: 2.0.5
9
  * Text Domain: wpforo
10
  * Domain Path: /languages
11
  */
12
 
13
  namespace wpforo;
14
 
15
- define( 'WPFORO_VERSION', '2.0.5' );
16
 
17
  //Exit if accessed directly
18
  if( ! defined( 'ABSPATH' ) ) exit;
@@ -462,11 +462,13 @@ final class wpforo {
462
  public function check_issues() {
463
  //Make sure all users profiles are created
464
  if( $this->is_installed() ) {
465
- $users = (int) $this->db->get_var( "SELECT COUNT(*) FROM `" . $this->db->users . "`" );
466
- $profiles = (int) $this->db->get_var( "SELECT COUNT(*) FROM `" . $this->tables->profiles . "`" );
467
- $delta = $users - $profiles;
468
  if( apply_filters( 'wpforo_profile_synchronization_notice', true ) ) {
469
- if( true ) add_action( 'admin_notices', 'wpforo_profile_notice', 10 );
 
 
 
 
 
470
  }
471
  }
472
  //Make sure tables structures are correct for current version
@@ -476,9 +478,10 @@ final class wpforo {
476
  $db_note = false;
477
  $problems = wpforo_database_check();
478
  if( ! empty( $problems ) ) {
479
- foreach( $problems as $problem ) {
480
  if( wpfval( $problem, 'fields' ) ) $db_note = true;
481
  if( wpfval( $problem, 'exists' ) ) $db_note = true;
 
482
  }
483
  if( $db_note ) {
484
  add_action( 'admin_notices', 'wpforo_database_notice', 10 );
@@ -1260,8 +1263,12 @@ final class wpforo {
1260
 
1261
  if( $this->current_object['template'] === 'cantlogin' ) {
1262
  if( $this->current_userid ) {
1263
- WPF()->ram_cache->set( 'USER_LOGIN_REFERER', WPF()->current_user_login );
1264
- wp_logout();
 
 
 
 
1265
  } else {
1266
  wp_safe_redirect( wpforo_login_url() );
1267
  exit();
5
  * Description: WordPress Forum plugin. wpForo is a full-fledged forum solution for your community. Comes with multiple modern forum layouts.
6
  * Author: gVectors Team
7
  * Author URI: https://gvectors.com/
8
+ * Version: 2.0.6
9
  * Text Domain: wpforo
10
  * Domain Path: /languages
11
  */
12
 
13
  namespace wpforo;
14
 
15
+ define( 'WPFORO_VERSION', '2.0.6' );
16
 
17
  //Exit if accessed directly
18
  if( ! defined( 'ABSPATH' ) ) exit;
462
  public function check_issues() {
463
  //Make sure all users profiles are created
464
  if( $this->is_installed() ) {
 
 
 
465
  if( apply_filters( 'wpforo_profile_synchronization_notice', true ) ) {
466
+ if( is_multisite() ) {
467
+ $sql = "SELECT COUNT(`user_id`) FROM `" . WPF()->db->usermeta . "` WHERE `meta_key` LIKE '" . WPF()->blog_prefix . "capabilities' AND `user_id` NOT IN( SELECT `userid` FROM `" . WPF()->tables->profiles . "` )";
468
+ } else {
469
+ $sql = "SELECT COUNT(`ID`) as user_id FROM `" . WPF()->db->users . "` WHERE `ID` NOT IN( SELECT `userid` FROM `" . WPF()->tables->profiles . "` )";
470
+ }
471
+ if( (int) $this->db->get_var( $sql ) ) add_action( 'admin_notices', 'wpforo_profile_notice', 10 );
472
  }
473
  }
474
  //Make sure tables structures are correct for current version
478
  $db_note = false;
479
  $problems = wpforo_database_check();
480
  if( ! empty( $problems ) ) {
481
+ foreach( $problems as $key => $problem ) {
482
  if( wpfval( $problem, 'fields' ) ) $db_note = true;
483
  if( wpfval( $problem, 'exists' ) ) $db_note = true;
484
+ if( $key === 'data' ) $db_note = true;
485
  }
486
  if( $db_note ) {
487
  add_action( 'admin_notices', 'wpforo_database_notice', 10 );
1263
 
1264
  if( $this->current_object['template'] === 'cantlogin' ) {
1265
  if( $this->current_userid ) {
1266
+ if( $this->current_user['status'] !== 'active' ){
1267
+ WPF()->ram_cache->set( 'USER_LOGIN_REFERER', WPF()->current_user_login );
1268
+ wp_logout();
1269
+ }else{
1270
+ wp_safe_redirect( wpforo_home_url() );
1271
+ }
1272
  } else {
1273
  wp_safe_redirect( wpforo_login_url() );
1274
  exit();