wpForo Forum - Version 1.4.7

Version Description

Download this release

Release Info

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

Code changes from version 1.4.6 to 1.4.7

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: 4.1
5
  Tested up to: 4.9
6
- Stable tag: 1.4.6
7
  Requires PHP: 5.4 and higher
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
@@ -144,12 +144,29 @@ Find wpForo forum plugin addons on [gVectors Team website...](https://gvectors.c
144
 
145
  == Changelog ==
146
 
147
- = wpForo Forum 1.4.6 | 04.03.2018 =
148
 
 
149
  [wpForo v1.4.6 Release Summary](https://wpforo.com/community/wpforo-announcements/wpforo-1-4-6-is-released/)
150
 
151
  IMPORTANT: wpForo Font Awesome lib is updated to version 5. If your theme doesn't have v5 and you've disabled wpForo Font Awesome lib, please enable it back in Settings > Features admin page. If you've changed forum icons, member fields and reputation icons, please edit and insert new values using [Font Awesome 5](https://fontawesome.com/icons?d=gallery&m=free) new classes.
152
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
153
  * Added: Font Awesome 5
154
  * Added: Moderation Tools
155
  - Move Topic
3
  Tags: forum, forums, forum plugin, WordPress forum plugin, community, discussion
4
  Requires at least: 4.1
5
  Tested up to: 4.9
6
+ Stable tag: 1.4.7
7
  Requires PHP: 5.4 and higher
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
144
 
145
  == Changelog ==
146
 
147
+ = wpForo Forum 1.4.6 / 1.4.7 | 09.03.2018 =
148
 
149
+ [wpForo v1.4.7 Release Summary](https://wpforo.com/community/wpforo-announcements/wpforo-1-4-7-is-released/)
150
  [wpForo v1.4.6 Release Summary](https://wpforo.com/community/wpforo-announcements/wpforo-1-4-6-is-released/)
151
 
152
  IMPORTANT: wpForo Font Awesome lib is updated to version 5. If your theme doesn't have v5 and you've disabled wpForo Font Awesome lib, please enable it back in Settings > Features admin page. If you've changed forum icons, member fields and reputation icons, please edit and insert new values using [Font Awesome 5](https://fontawesome.com/icons?d=gallery&m=free) new classes.
153
 
154
+ * wpForo Forum v1.4.7
155
+ * Changed: Loading icon on first click of Topic Tool button
156
+ * Changed: Disable comment button for wpForo activity in BuddyPress
157
+ * Changed: Don't post an activity from Private Forums in BuddyPress
158
+ * Changed: Display forum slug field (don't hide in screen options)
159
+ * Changed: Don't allow set Guest and Admin usergroups as Default
160
+ * Fixed Bug: Topic Tools only work on first page
161
+ * Fixed Bug: Sync forum profile avatar with blog comments avatar
162
+ * Fixed Bug: Missing reply icon and incorrect topic icons
163
+ * Fixed Bug: Update topics order by moved, split, merged replies date
164
+ * Fixed Bug: Last post information from private forum in forum stat
165
+ * Fixed Bug: Wrong order of posts in Profile Activity
166
+ * Fixed Bug: Wrong order of last posts in Extended Layout Topic
167
+ * Fixed Bug: Password reset URL problem with Usernames with space
168
+ * ----------
169
+ * wpForo Forum v1.4.6
170
  * Added: Font Awesome 5
171
  * Added: Moderation Tools
172
  - Move Topic
wpf-admin/forum.php CHANGED
@@ -14,7 +14,7 @@
14
  <div class="metabox-prefs">
15
  <label for="forum_cat-hide"><input class="hide-postbox-tog" name="forum_cat-hide" type="checkbox" id="forum_cat-hide" value="forum_cat" checked="checked"><?php _e('Forum Options', 'wpforo'); ?></label>
16
  <label for="forum_permissions-hide"><input class="hide-postbox-tog" name="forum_permissions-hide" type="checkbox" id="forum_permissions-hide" value="forum_permissions" checked="checked"><?php _e('Permissions', 'wpforo'); ?></label>
17
- <label for="forum_slug-hide"><input class="hide-postbox-tog" name="forum_slug-hide" type="checkbox" id="forum_slug-hide" value="forum_slug"><?php _e('Slug', 'wpforo'); ?></label>
18
  <label for="forum_meta-hide"><input class="hide-postbox-tog" name="forum_meta-hide" type="checkbox" id="forum_meta-hide" value="forum_meta" checked="checked"><?php _e('Forum Meta', 'wpforo'); ?></label>
19
  <br class="clear">
20
  </div>
@@ -124,7 +124,7 @@
124
  <div id="side-sortables" class="meta-box-sortables ui-sortable">
125
 
126
 
127
- <div id="forum_cat" class="postbox" style="display: block; ">
128
  <div class="handlediv" title="Click to toggle"><br></div>
129
  <h3 class="hndle"><span><?php _e('Forum Options', 'wpforo'); ?></span></h3>
130
  <div class="inside">
@@ -154,7 +154,7 @@
154
  </div>
155
  </div>
156
 
157
- <div id="submitdiv" class="postbox" style="display: block; ">
158
  <div class="handlediv" title="Click to toggle"><br></div>
159
  <h3 class="hndle"><span><?php _e('Publish', 'wpforo'); ?></span></h3>
160
  <div class="inside">
@@ -170,7 +170,7 @@
170
  </div>
171
 
172
 
173
- <div id="forum_permissions" class="postbox" style="display: block; ">
174
  <div class="handlediv" title="Click to toggle"><br></div>
175
  <h3 class="hndle"><span>Forum Permissions</span></h3>
176
  <div class="inside">
@@ -186,7 +186,7 @@
186
  <div id="postbox-container-2" class="postbox-container">
187
  <div id="normal-sortables" class="meta-box-sortables ui-sortable">
188
 
189
- <div id="forum_slug" class="postbox hide-if-js" style="display: none; ">
190
  <div class="handlediv" title="Click to toggle"><br></div>
191
  <h3 class="hndle"><span><?php _e('Forum Slug', 'wpforo'); ?></span></h3>
192
  <div class="inside">
@@ -195,7 +195,7 @@
195
  </div>
196
  </div>
197
 
198
- <div id="forum_icon" class="postbox hide-if-js" style="display: block; ">
199
  <div class="handlediv" title="Click to toggle"><br></div>
200
  <h3 class="hndle"><span><?php _e('Forum Icon', 'wpforo'); ?></span></h3>
201
  <div class="inside" style="padding-top:10px;">
@@ -207,7 +207,7 @@
207
  </div>
208
  </div>
209
 
210
- <div id="forum_meta" class="postbox hide-if-js" style="display: block; ">
211
  <div class="handlediv" title="Click to toggle"><br></div>
212
  <h3 class="hndle"><span><?php _e('Forum SEO', 'wpforo'); ?></span></h3>
213
  <div class="inside" style="padding-top:10px;">
14
  <div class="metabox-prefs">
15
  <label for="forum_cat-hide"><input class="hide-postbox-tog" name="forum_cat-hide" type="checkbox" id="forum_cat-hide" value="forum_cat" checked="checked"><?php _e('Forum Options', 'wpforo'); ?></label>
16
  <label for="forum_permissions-hide"><input class="hide-postbox-tog" name="forum_permissions-hide" type="checkbox" id="forum_permissions-hide" value="forum_permissions" checked="checked"><?php _e('Permissions', 'wpforo'); ?></label>
17
+ <label for="forum_slug-hide"><input class="hide-postbox-tog" name="forum_slug-hide" type="checkbox" id="forum_slug-hide" value="forum_slug" checked="checked"><?php _e('Slug', 'wpforo'); ?></label>
18
  <label for="forum_meta-hide"><input class="hide-postbox-tog" name="forum_meta-hide" type="checkbox" id="forum_meta-hide" value="forum_meta" checked="checked"><?php _e('Forum Meta', 'wpforo'); ?></label>
19
  <br class="clear">
20
  </div>
124
  <div id="side-sortables" class="meta-box-sortables ui-sortable">
125
 
126
 
127
+ <div id="forum_cat" class="postbox">
128
  <div class="handlediv" title="Click to toggle"><br></div>
129
  <h3 class="hndle"><span><?php _e('Forum Options', 'wpforo'); ?></span></h3>
130
  <div class="inside">
154
  </div>
155
  </div>
156
 
157
+ <div id="submitdiv" class="postbox">
158
  <div class="handlediv" title="Click to toggle"><br></div>
159
  <h3 class="hndle"><span><?php _e('Publish', 'wpforo'); ?></span></h3>
160
  <div class="inside">
170
  </div>
171
 
172
 
173
+ <div id="forum_permissions" class="postbox">
174
  <div class="handlediv" title="Click to toggle"><br></div>
175
  <h3 class="hndle"><span>Forum Permissions</span></h3>
176
  <div class="inside">
186
  <div id="postbox-container-2" class="postbox-container">
187
  <div id="normal-sortables" class="meta-box-sortables ui-sortable">
188
 
189
+ <div id="forum_slug" class="postbox">
190
  <div class="handlediv" title="Click to toggle"><br></div>
191
  <h3 class="hndle"><span><?php _e('Forum Slug', 'wpforo'); ?></span></h3>
192
  <div class="inside">
195
  </div>
196
  </div>
197
 
198
+ <div id="forum_icon" class="postbox">
199
  <div class="handlediv" title="Click to toggle"><br></div>
200
  <h3 class="hndle"><span><?php _e('Forum Icon', 'wpforo'); ?></span></h3>
201
  <div class="inside" style="padding-top:10px;">
207
  </div>
208
  </div>
209
 
210
+ <div id="forum_meta" class="postbox">
211
  <div class="handlediv" title="Click to toggle"><br></div>
212
  <h3 class="hndle"><span><?php _e('Forum SEO', 'wpforo'); ?></span></h3>
213
  <div class="inside" style="padding-top:10px;">
wpf-admin/usergroup.php CHANGED
@@ -51,9 +51,9 @@
51
  </td>
52
  <td class="column-title" style="border-bottom:1px dotted #CCCCCC; vertical-align:middle; padding-left:20px; background:<?php echo esc_html($bgcolor) ?>;">
53
  <strong style="color: #00a636">
54
- <?php if( $ugroup['groupid'] == WPF()->usergroup->default_groupid ) :
55
- _e( 'is Default', 'wpforo' );
56
- else : ?>
57
  <a class="row-title" href="<?php echo admin_url('admin.php?page=wpforo-usergroups&default=' . intval($ugroup['groupid'])) ?>" title="<?php _e('DO NOT set this option on higher level user groups !!!', 'wpforo') ?>"><?php _e('Set as Default', 'wpforo') ?></a>
58
  <?php endif ?>
59
  </strong>
51
  </td>
52
  <td class="column-title" style="border-bottom:1px dotted #CCCCCC; vertical-align:middle; padding-left:20px; background:<?php echo esc_html($bgcolor) ?>;">
53
  <strong style="color: #00a636">
54
+ <?php if( $ugroup['groupid'] == WPF()->usergroup->default_groupid ) : _e( 'is Default', 'wpforo' ); ?>
55
+ <?php elseif( $ugroup['groupid'] == 4 || $ugroup['groupid'] == 1) : ?>
56
+ <?php else : ?>
57
  <a class="row-title" href="<?php echo admin_url('admin.php?page=wpforo-usergroups&default=' . intval($ugroup['groupid'])) ?>" title="<?php _e('DO NOT set this option on higher level user groups !!!', 'wpforo') ?>"><?php _e('Set as Default', 'wpforo') ?></a>
58
  <?php endif ?>
59
  </strong>
wpf-admin/xml/english.xml CHANGED
@@ -426,6 +426,7 @@
426
  <phrase name="Forum post like"><![CDATA[Forum post like]]></phrase>
427
  <phrase name="Tools"><![CDATA[Tools]]></phrase>
428
  <phrase name="Target Topic URL"><![CDATA[Target Topic URL]]></phrase>
 
429
  <phrase name="Merge Topics"><![CDATA[Merge Topics]]></phrase>
430
  <phrase name="Split Topic"><![CDATA[Split Topic]]></phrase>
431
  <phrase name="Please copy the target topic URL from browser address bar and paste in the field below."><![CDATA[Please copy the target topic URL from browser address bar and paste in the field below.]]></phrase>
426
  <phrase name="Forum post like"><![CDATA[Forum post like]]></phrase>
427
  <phrase name="Tools"><![CDATA[Tools]]></phrase>
428
  <phrase name="Target Topic URL"><![CDATA[Target Topic URL]]></phrase>
429
+ <phrase name="Target Topic not found"><![CDATA[Target Topic not found]]></phrase>
430
  <phrase name="Merge Topics"><![CDATA[Merge Topics]]></phrase>
431
  <phrase name="Split Topic"><![CDATA[Split Topic]]></phrase>
432
  <phrase name="Please copy the target topic URL from browser address bar and paste in the field below."><![CDATA[Please copy the target topic URL from browser address bar and paste in the field below.]]></phrase>
wpf-assets/js/ajax.js CHANGED
@@ -763,7 +763,7 @@ jQuery(document).ready(function ($) {
763
  if( tools.is(':visible') ){
764
  tools.slideUp(250, 'linear');
765
  }else{
766
- $("#wpf-msg-box").hide();
767
  tools.find('.wpf-tool-tabs .wpf-tool-tab').removeClass('wpf-tt-active');
768
  tools.find('.wpf-tool-tabs .wpf-tool-tab:first-child').addClass('wpf-tt-active');
769
  wpforo_topic_tools_tab_load();
763
  if( tools.is(':visible') ){
764
  tools.slideUp(250, 'linear');
765
  }else{
766
+ $("#wpf-msg-box").hide(); $('#wpforo-load').visible();
767
  tools.find('.wpf-tool-tabs .wpf-tool-tab').removeClass('wpf-tt-active');
768
  tools.find('.wpf-tool-tabs .wpf-tool-tab:first-child').addClass('wpf-tt-active');
769
  wpforo_topic_tools_tab_load();
wpf-includes/class-forums.php CHANGED
@@ -150,7 +150,7 @@ class wpForoForum{
150
  ){
151
  $forumid = WPF()->db->insert_id;
152
  $this->delete_tree_cache();
153
- wpforo_clean_cache('forum', $forumid, $args);
154
  WPF()->notice->add('Your forum successfully added', 'success');
155
  return $forumid;
156
  }
@@ -237,7 +237,7 @@ class wpForoForum{
237
  WPF()->db->query($sql);
238
  }
239
  $this->delete_tree_cache();
240
- wpforo_clean_cache('forum');
241
  WPF()->notice->add('Forum successfully updated', 'success');
242
  return $forumid;
243
  }
@@ -949,4 +949,24 @@ class wpForoForum{
949
  }
950
  }
951
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
952
  }
150
  ){
151
  $forumid = WPF()->db->insert_id;
152
  $this->delete_tree_cache();
153
+ wpforo_clean_cache();
154
  WPF()->notice->add('Your forum successfully added', 'success');
155
  return $forumid;
156
  }
237
  WPF()->db->query($sql);
238
  }
239
  $this->delete_tree_cache();
240
+ wpforo_clean_cache();
241
  WPF()->notice->add('Forum successfully updated', 'success');
242
  return $forumid;
243
  }
949
  }
950
  }
951
 
952
+ function private_forum( $forumid, $usergroups = array() ){
953
+ if( $forumid ){
954
+ if( empty($usergroups) ) {
955
+ $groupid = WPF()->current_user_groupid;
956
+ $usergroups = array( $groupid );
957
+ }
958
+ elseif( is_numeric($usergroups) ){
959
+ $usergroups = array( $usergroups );
960
+ }
961
+ if( !empty($usergroups) && is_array($usergroups) ){
962
+ foreach( $usergroups as $usergroup ){
963
+ if( !WPF()->perm->forum_can('vf', $forumid, $usergroup) ){
964
+ return true;
965
+ }
966
+ }
967
+ }
968
+ }
969
+ return false;
970
+ }
971
+
972
  }
wpf-includes/class-members.php CHANGED
@@ -526,7 +526,7 @@ class wpForoMember{
526
  $insert_timezone = (isset($_POST['wpforo_usertimezone'])) ? sanitize_text_field($_POST['wpforo_usertimezone']) : '';
527
  $about = get_user_meta( $userid, 'description', true );
528
  return $this->add_profile(
529
- array( 'userid' => intval($userid),
530
  'username' => sanitize_user($user->user_login),
531
  'groupid' => intval($insert_groupid),
532
  'site' => esc_url($user->user_url),
@@ -1402,7 +1402,7 @@ class wpForoMember{
1402
  }
1403
 
1404
  if( $args['email'] ){
1405
- $post_args = array( 'email' => $args['email'], 'orderby' => 'created', 'order' => 'ASC' );
1406
  $posts = WPF()->post->get_posts( $post_args );
1407
  if( !empty($posts) ){
1408
  $args['posts'] = count($posts);
526
  $insert_timezone = (isset($_POST['wpforo_usertimezone'])) ? sanitize_text_field($_POST['wpforo_usertimezone']) : '';
527
  $about = get_user_meta( $userid, 'description', true );
528
  return $this->add_profile(
529
+ array( 'userid' => wpforo_bigintval($userid),
530
  'username' => sanitize_user($user->user_login),
531
  'groupid' => intval($insert_groupid),
532
  'site' => esc_url($user->user_url),
1402
  }
1403
 
1404
  if( $args['email'] ){
1405
+ $post_args = array( 'email' => $args['email'], 'orderby' => '`created` ASC, `postid` ASC' );
1406
  $posts = WPF()->post->get_posts( $post_args );
1407
  if( !empty($posts) ){
1408
  $args['posts'] = count($posts);
wpf-includes/class-moderation.php CHANGED
@@ -56,7 +56,7 @@ class wpForoModeration
56
  if (isset($_GET['filter_by_userid']) && wpforo_bigintval($_GET['filter_by_userid'])) $args['userid'] = wpforo_bigintval($_GET['filter_by_userid']);
57
  $filter_by_status = intval((isset($_GET['filter_by_status']) ? $_GET['filter_by_status'] : 1));
58
  $args['status'] = $filter_by_status;
59
- if( !isset($_GET['order']) ) $args['order'] = 'DESC';
60
  $posts = WPF()->post->get_posts($args, $items_count);
61
  return $posts;
62
  }
56
  if (isset($_GET['filter_by_userid']) && wpforo_bigintval($_GET['filter_by_userid'])) $args['userid'] = wpforo_bigintval($_GET['filter_by_userid']);
57
  $filter_by_status = intval((isset($_GET['filter_by_status']) ? $_GET['filter_by_status'] : 1));
58
  $args['status'] = $filter_by_status;
59
+ if( !isset($_GET['order']) ) $args['orderby'] = '`created` DESC, `postid` DESC';
60
  $posts = WPF()->post->get_posts($args, $items_count);
61
  return $posts;
62
  }
wpf-includes/class-phrases.php CHANGED
@@ -138,7 +138,7 @@ class wpForoPhrase{
138
 
139
  public function xml_import($xmlfile, $type = 'import'){
140
  $file = WPFORO_DIR . '/wpf-admin/xml/' . $xmlfile;
141
- if( file_exists( $file ) ) {
142
  $xr = xml_parser_create();
143
  $fp = fopen($file, "r");
144
  $xml = fread($fp, filesize($file));
138
 
139
  public function xml_import($xmlfile, $type = 'import'){
140
  $file = WPFORO_DIR . '/wpf-admin/xml/' . $xmlfile;
141
+ if( file_exists( $file ) && function_exists('xml_parser_create') ) {
142
  $xr = xml_parser_create();
143
  $fp = fopen($file, "r");
144
  $xml = fread($fp, filesize($file));
wpf-includes/class-posts.php CHANGED
@@ -299,7 +299,7 @@ class wpForoPost{
299
 
300
  //Delete post
301
  if( WPF()->db->delete(WPF()->db->prefix . 'wpforo_posts', array( 'postid' => intval($postid) ), array( '%d' )) ){
302
- $last_post = $this->get_posts( array('topicid' => intval($post['topicid']), 'orderby' => 'postid', 'order' => 'DESC', 'row_count' => 1, 'status' => 0, 'private' => 0) );
303
  if(is_array($last_post) && !empty($last_post)){
304
  $last_post = $last_post[0];
305
  }else{
@@ -781,7 +781,7 @@ class wpForoPost{
781
  $position = array();
782
 
783
  if( isset($arg) && !is_array($arg) ){
784
- $postid = intval($arg);
785
  $post = $this->get_post($postid);
786
  }
787
  elseif( !empty($arg) && isset($arg['postid']) ){
@@ -792,15 +792,15 @@ class wpForoPost{
792
  if( is_array($post) && !empty($post) && $postid ){
793
  $url = $this->get_forumslug_byid($postid) . '/' . $this->get_topicslug_byid($postid);
794
  if( $post['topicid'] ){
795
- if( !$position ) $position = WPF()->db->get_var("SELECT COUNT(`postid`) FROM `".WPF()->db->prefix."wpforo_posts` WHERE `topicid` = ".intval($post['topicid'])." AND `postid` <= " . ($post['parentid'] ? intval($post['parentid']) : intval($postid) ) );
796
- if( $position <= WPF()->post->options['posts_per_page'] ) return wpforo_home_url($url, false, $absolute ) . "#post-" . intval($postid);
797
  if( $position && WPF()->post->options['posts_per_page'] ) {
798
  $paged = ceil($position / WPF()->post->options['posts_per_page']);
799
  }
800
  else{
801
  $paged = 1;
802
  }
803
- return wpforo_home_url( $url . "/paged/" . $paged, false, $absolute ) ."#post-" . intval($postid);
804
  }
805
  }
806
 
299
 
300
  //Delete post
301
  if( WPF()->db->delete(WPF()->db->prefix . 'wpforo_posts', array( 'postid' => intval($postid) ), array( '%d' )) ){
302
+ $last_post = $this->get_posts( array('topicid' => intval($post['topicid']), 'orderby' => '`created` DESC, `postid` DESC', 'row_count' => 1, 'status' => 0, 'private' => 0) );
303
  if(is_array($last_post) && !empty($last_post)){
304
  $last_post = $last_post[0];
305
  }else{
781
  $position = array();
782
 
783
  if( isset($arg) && !is_array($arg) ){
784
+ $postid = wpforo_bigintval($arg);
785
  $post = $this->get_post($postid);
786
  }
787
  elseif( !empty($arg) && isset($arg['postid']) ){
792
  if( is_array($post) && !empty($post) && $postid ){
793
  $url = $this->get_forumslug_byid($postid) . '/' . $this->get_topicslug_byid($postid);
794
  if( $post['topicid'] ){
795
+ if( !$position ) $position = WPF()->db->get_var("SELECT COUNT(`postid`) FROM `".WPF()->db->prefix."wpforo_posts` WHERE `topicid` = ".wpforo_bigintval($post['topicid'])." AND `postid` <= " . ( $post['parentid'] && WPF()->forum->get_layout($post['forumid']) == 3 ? wpforo_bigintval($post['parentid']) : wpforo_bigintval($postid) ) );
796
+ if( $position <= WPF()->post->options['posts_per_page'] ) return wpforo_home_url($url, false, $absolute ) . "#post-" . wpforo_bigintval($postid);
797
  if( $position && WPF()->post->options['posts_per_page'] ) {
798
  $paged = ceil($position / WPF()->post->options['posts_per_page']);
799
  }
800
  else{
801
  $paged = 1;
802
  }
803
+ return wpforo_home_url( $url . "/paged/" . $paged, false, $absolute ) ."#post-" . wpforo_bigintval($postid);
804
  }
805
  }
806
 
wpf-includes/class-topics.php CHANGED
@@ -581,7 +581,8 @@ class wpForoTopic{
581
  'order' => 'DESC', // ASC DESC
582
  'offset' => NULL, // this use when you give row_count
583
  'row_count' => NULL, // 4 or 1 ...
584
- 'where' => NULL,
 
585
  );
586
 
587
  $args = wpforo_parse_args( $args, $default );
@@ -611,13 +612,13 @@ class wpForoTopic{
611
  if(!is_user_logged_in()) $guest = WPF()->member->get_guest_cookies();
612
 
613
  if(empty($forumids)){
614
- if( isset($forumid) && !WPF()->perm->forum_can('vf', $forumid) ){
615
  return array();
616
  }
617
  }
618
 
619
  if( isset($forumid) && $forumid ){
620
- if( WPF()->perm->forum_can('vp', $forumid) ){
621
  if(!is_null($private)) $wheres[] = " `private` = " . intval($private);
622
  }
623
  elseif( isset(WPF()->current_userid) && WPF()->current_userid ){
@@ -630,9 +631,12 @@ class wpForoTopic{
630
  $wheres[] = " `private` = 0";
631
  }
632
  }
 
 
 
633
 
634
  if( isset($forumid) && $forumid ){
635
- if( WPF()->perm->forum_can('au', $forumid) ){
636
  if(!is_null($status)) $wheres[] = " `status` = " . intval($status);
637
  }
638
  elseif( isset(WPF()->current_userid) && WPF()->current_userid ){
@@ -645,6 +649,9 @@ class wpForoTopic{
645
  $wheres[] = " `status` = 0";
646
  }
647
  }
 
 
 
648
 
649
  if( function_exists('WPF_POLL') ){
650
  if( !is_null($pollid) ) $wheres[] = " `pollid` <> 0";
@@ -675,16 +682,16 @@ class wpForoTopic{
675
 
676
  if(!empty($forumids) || !$forumid){
677
  foreach($topics as $key => $topic){
678
- if( !WPF()->perm->forum_can('vf', $topic['forumid']) ){
679
  unset($topics[$key]);
680
  }
681
  if( isset($topics[$key]) && isset($topic['private']) && $topic['private'] && !wpforo_is_owner($topic['userid'], $topic['email']) ){
682
- if( !WPF()->perm->forum_can('vp', $topic['forumid']) ){
683
  unset($topics[$key]);
684
  }
685
  }
686
  if( isset($topics[$key]) && isset($topic['status']) && $topic['status'] && !wpforo_is_owner($topic['userid'], $topic['email']) ){
687
- if( !WPF()->perm->forum_can('au', $topic['forumid']) ){
688
  unset($topics[$key]);
689
  }
690
  }
@@ -1147,17 +1154,17 @@ class wpForoTopic{
1147
  $first_postid = 0;
1148
  }
1149
 
1150
- $sql = "SELECT `postid` FROM `". WPF()->db->prefix ."wpforo_posts` WHERE `topicid` = %d ORDER BY `is_first_post` ASC, `created` DESC, `postid` DESC LIMIT 1";
1151
- if( !$last_post = WPF()->db->get_var( WPF()->db->prepare($sql, $topic['topicid']) ) ) $last_post = 0;
1152
 
1153
  if( false !== WPF()->db->update(
1154
  WPF()->db->prefix . "wpforo_topics",
1155
- array('first_postid' => $first_postid, 'last_post' => $last_post),
1156
  array('topicid' => $topic['topicid']),
1157
- array('%d','%d'),
1158
  array('%d')
1159
  ) ) {
1160
- wpforo_clean_cache('topicid', $topic['topicid'], $topic);
1161
  return true;
1162
  }
1163
  return false;
581
  'order' => 'DESC', // ASC DESC
582
  'offset' => NULL, // this use when you give row_count
583
  'row_count' => NULL, // 4 or 1 ...
584
+ 'permgroup' => NULL, //Тreat permissions based on attribute value not on current user usergroup
585
+ 'where' => NULL,
586
  );
587
 
588
  $args = wpforo_parse_args( $args, $default );
612
  if(!is_user_logged_in()) $guest = WPF()->member->get_guest_cookies();
613
 
614
  if(empty($forumids)){
615
+ if( isset($forumid) && !WPF()->perm->forum_can('vf', $forumid, $permgroup) ){
616
  return array();
617
  }
618
  }
619
 
620
  if( isset($forumid) && $forumid ){
621
+ if( WPF()->perm->forum_can('vp', $forumid, $permgroup) ){
622
  if(!is_null($private)) $wheres[] = " `private` = " . intval($private);
623
  }
624
  elseif( isset(WPF()->current_userid) && WPF()->current_userid ){
631
  $wheres[] = " `private` = 0";
632
  }
633
  }
634
+ else{
635
+ if(!is_null($private)) $wheres[] = " `private` = " . intval($private);
636
+ }
637
 
638
  if( isset($forumid) && $forumid ){
639
+ if( WPF()->perm->forum_can('au', $forumid, $permgroup) ){
640
  if(!is_null($status)) $wheres[] = " `status` = " . intval($status);
641
  }
642
  elseif( isset(WPF()->current_userid) && WPF()->current_userid ){
649
  $wheres[] = " `status` = 0";
650
  }
651
  }
652
+ else{
653
+ if(!is_null($status)) $wheres[] = " `status` = " . intval($status);
654
+ }
655
 
656
  if( function_exists('WPF_POLL') ){
657
  if( !is_null($pollid) ) $wheres[] = " `pollid` <> 0";
682
 
683
  if(!empty($forumids) || !$forumid){
684
  foreach($topics as $key => $topic){
685
+ if( !WPF()->perm->forum_can('vf', $topic['forumid'], $permgroup) ){
686
  unset($topics[$key]);
687
  }
688
  if( isset($topics[$key]) && isset($topic['private']) && $topic['private'] && !wpforo_is_owner($topic['userid'], $topic['email']) ){
689
+ if( !WPF()->perm->forum_can('vp', $topic['forumid'], $permgroup) ){
690
  unset($topics[$key]);
691
  }
692
  }
693
  if( isset($topics[$key]) && isset($topic['status']) && $topic['status'] && !wpforo_is_owner($topic['userid'], $topic['email']) ){
694
+ if( !WPF()->perm->forum_can('au', $topic['forumid'], $permgroup) ){
695
  unset($topics[$key]);
696
  }
697
  }
1154
  $first_postid = 0;
1155
  }
1156
 
1157
+ $sql = "SELECT `postid`, `created` FROM `". WPF()->db->prefix ."wpforo_posts` WHERE `topicid` = %d ORDER BY `is_first_post` ASC, `created` DESC, `postid` DESC LIMIT 1";
1158
+ if( !$last_post = WPF()->db->get_row( WPF()->db->prepare($sql, $topic['topicid']), ARRAY_A ) ) $last_post = array( 'postid' => 0, 'created' => $topic['modified']);
1159
 
1160
  if( false !== WPF()->db->update(
1161
  WPF()->db->prefix . "wpforo_topics",
1162
+ array('first_postid' => $first_postid, 'last_post' => $last_post['postid'], 'modified' => $last_post['created']),
1163
  array('topicid' => $topic['topicid']),
1164
+ array('%d','%d','%s'),
1165
  array('%d')
1166
  ) ) {
1167
+ wpforo_clean_cache('topic');
1168
  return true;
1169
  }
1170
  return false;
wpf-includes/functions-installation.php CHANGED
@@ -489,6 +489,12 @@ function wpforo_activation(){
489
  if( !wpforo_db_check( $args ) ){
490
  @$wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "wpforo_profiles` ADD `online_time` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `last_login`, ADD KEY (`online_time`)" );
491
  }
 
 
 
 
 
 
492
  #################################################################
493
  // ADD `private` field in post TABLE ///////////////////////////
494
  $args = array( 'table' => $wpdb->prefix . 'wpforo_posts', 'col' => 'private', 'check' => 'col_exists' );
489
  if( !wpforo_db_check( $args ) ){
490
  @$wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "wpforo_profiles` ADD `online_time` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `last_login`, ADD KEY (`online_time`)" );
491
  }
492
+ #################################################################
493
+ // DROP uname unique key from profiles TABLE ///////////////////////////
494
+ $args = array( 'table' => $wpdb->prefix . 'wpforo_profiles', 'col' => 'UNIQUE USERNAME', 'check' => 'key_exists' );
495
+ if( wpforo_db_check( $args ) ){
496
+ @$wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "wpforo_profiles` DROP KEY `UNIQUE USERNAME`" );
497
+ }
498
  #################################################################
499
  // ADD `private` field in post TABLE ///////////////////////////
500
  $args = array( 'table' => $wpdb->prefix . 'wpforo_posts', 'col' => 'private', 'check' => 'col_exists' );
wpf-includes/functions-integration.php CHANGED
@@ -84,7 +84,7 @@ function wpforo_bp_activity( $args = array() ){
84
  $default = array( 'action' => '',
85
  'title' => '',
86
  'content' => '',
87
- 'component' => 'activity',
88
  'type' => false,
89
  'primary_link' => '',
90
  'user_id' => '',
@@ -126,7 +126,7 @@ function wpforo_bp_activity_delete( $args = array() ){
126
  $default = array( 'action' => '',
127
  'title' => '',
128
  'content' => '',
129
- 'component' => 'activity',
130
  'type' => false,
131
  'primary_link' => '',
132
  'user_id' => '',
@@ -140,10 +140,25 @@ function wpforo_bp_activity_delete( $args = array() ){
140
  }
141
  }
142
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  //Register BuddyPress Activities
144
  function wpforo_bp_register_activity_actions() {
145
- bp_activity_set_action( 'activity', 'wpforo_topic', wpforo_phrase( 'Forum topic', false ), '', wpforo_phrase( 'Forum topic', false ), array( 'member' ));
146
- bp_activity_set_action( 'activity', 'wpforo_post', wpforo_phrase( 'Forum post', false ), '', wpforo_phrase( 'Forum post', false ), array( 'member' ));
147
- bp_activity_set_action( 'activity', 'wpforo_like', wpforo_phrase( 'Forum post like', false ), '', wpforo_phrase( 'Forum post like', false ), array( 'member' ));
148
  }
149
  add_action( 'bp_register_activity_actions', 'wpforo_bp_register_activity_actions' );
 
84
  $default = array( 'action' => '',
85
  'title' => '',
86
  'content' => '',
87
+ 'component' => 'WPForo',
88
  'type' => false,
89
  'primary_link' => '',
90
  'user_id' => '',
126
  $default = array( 'action' => '',
127
  'title' => '',
128
  'content' => '',
129
+ 'component' => 'WPForo',
130
  'type' => false,
131
  'primary_link' => '',
132
  'user_id' => '',
140
  }
141
  }
142
 
143
+ //Disable comment button for wpForo activity
144
+ function wpforo_bp_activity_disable_comment( $can_comment = true ){
145
+ if ( false === $can_comment ) return $can_comment;
146
+ if( function_exists('bp_get_activity_action_name') ){
147
+ $action_name = bp_get_activity_action_name();
148
+ $disabled_actions = array( 'wpforo_topic', 'wpforo_post', 'wpforo_like' );
149
+ $disabled_actions = apply_filters( 'wpforo_bp_activity_disable_comment', $disabled_actions );
150
+ if ( in_array( $action_name, $disabled_actions ) ) {
151
+ $can_comment = false;
152
+ }
153
+ }
154
+ return $can_comment;
155
+ }
156
+
157
  //Register BuddyPress Activities
158
  function wpforo_bp_register_activity_actions() {
159
+ bp_activity_set_action( 'WPForo', 'wpforo_topic', wpforo_phrase( 'Forum topic', false ), '', wpforo_phrase( 'Forum topic', false ), array( 'member' ));
160
+ bp_activity_set_action( 'WPForo', 'wpforo_post', wpforo_phrase( 'Forum post', false ), '', wpforo_phrase( 'Forum post', false ), array( 'member' ));
161
+ bp_activity_set_action( 'WPForo', 'wpforo_like', wpforo_phrase( 'Forum post like', false ), '', wpforo_phrase( 'Forum post like', false ), array( 'member' ));
162
  }
163
  add_action( 'bp_register_activity_actions', 'wpforo_bp_register_activity_actions' );
164
+ add_filter( 'bp_activity_can_comment', 'wpforo_bp_activity_disable_comment');
wpf-includes/functions-template.php CHANGED
@@ -1319,7 +1319,7 @@ function wpforo_moderation_tools(){
1319
  */
1320
  function wpforo_activity( $args = array() ){
1321
 
1322
- $default = array( 'action' => '', 'title' => '', 'content' => '', 'component' => 'activity', 'type' => '', 'primary_link' => '', 'user_id' => '', 'item_id'=> '', 'date_recorded' => '');
1323
  $args = wpforo_parse_args( $args, $default );
1324
 
1325
  //BuddyPress Member Activity
@@ -1344,6 +1344,13 @@ function wpforo_activity_content( $item = array() ){
1344
  $args = array();
1345
  if( empty($item) ) return false;
1346
  if((isset($item['status']) && $item['status']) || (isset($item['private']) && $item['private'])) return false;
 
 
 
 
 
 
 
1347
  if( isset($item['first_postid']) && $item['first_postid'] ) {
1348
  $args['item_id'] = $item['first_postid'];
1349
  }
@@ -1399,6 +1406,13 @@ function wpforo_activity_like( $item = array() ){
1399
  $args = array();
1400
  if( empty($item) ) return false;
1401
  if((isset($item['status']) && $item['status']) || (isset($item['private']) && $item['private'])) return false;
 
 
 
 
 
 
 
1402
  if( isset($item['postid']) && $item['postid'] ) $args['item_id'] = $item['postid'];
1403
  $args['user_id'] = WPF()->current_userid;
1404
  $member = wpforo_member( $args['user_id'] );
1319
  */
1320
  function wpforo_activity( $args = array() ){
1321
 
1322
+ $default = array( 'action' => '', 'title' => '', 'content' => '', 'component' => 'WPForo', 'type' => '', 'primary_link' => '', 'user_id' => '', 'item_id'=> '', 'date_recorded' => '');
1323
  $args = wpforo_parse_args( $args, $default );
1324
 
1325
  //BuddyPress Member Activity
1344
  $args = array();
1345
  if( empty($item) ) return false;
1346
  if((isset($item['status']) && $item['status']) || (isset($item['private']) && $item['private'])) return false;
1347
+ if( isset($item['forumid']) && $item['forumid'] ){
1348
+ $private_for_usergroups = array(3, 4, 5);
1349
+ $private_for_usergroups = apply_filters( 'wpforo_activity_private_for_usergroups', $private_for_usergroups );
1350
+ if( !empty($private_for_usergroups) && WPF()->forum->private_forum($item['forumid'], $private_for_usergroups) ){
1351
+ return false;
1352
+ }
1353
+ }
1354
  if( isset($item['first_postid']) && $item['first_postid'] ) {
1355
  $args['item_id'] = $item['first_postid'];
1356
  }
1406
  $args = array();
1407
  if( empty($item) ) return false;
1408
  if((isset($item['status']) && $item['status']) || (isset($item['private']) && $item['private'])) return false;
1409
+ if( isset($item['forumid']) && $item['forumid'] ){
1410
+ $private_for_usergroups = array(3, 4, 5);
1411
+ $private_for_usergroups = apply_filters( 'wpforo_activity_private_for_usergroups', $private_for_usergroups );
1412
+ if( !empty($private_for_usergroups) && WPF()->forum->private_forum($item['forumid'], $private_for_usergroups) ){
1413
+ return false;
1414
+ }
1415
+ }
1416
  if( isset($item['postid']) && $item['postid'] ) $args['item_id'] = $item['postid'];
1417
  $args['user_id'] = WPF()->current_userid;
1418
  $member = wpforo_member( $args['user_id'] );
wpf-includes/functions.php CHANGED
@@ -1626,6 +1626,8 @@ function wpforo_db_check( $args = array() ){
1626
  $col = $wpdb->get_row("SHOW COLUMNS FROM `$table` LIKE '$col'", ARRAY_A);
1627
  return $col['Type'];
1628
  }
 
 
1629
  }
1630
 
1631
  function wpforo_is_owner( $userid, $email = '' ){
1626
  $col = $wpdb->get_row("SHOW COLUMNS FROM `$table` LIKE '$col'", ARRAY_A);
1627
  return $col['Type'];
1628
  }
1629
+
1630
+ return false;
1631
  }
1632
 
1633
  function wpforo_is_owner( $userid, $email = '' ){
wpf-includes/install-sql.php CHANGED
@@ -136,7 +136,6 @@
136
  `timezone` VARCHAR(255),
137
  PRIMARY KEY (`userid`),
138
  UNIQUE KEY `UNIQUE ID` (`userid`),
139
- UNIQUE KEY `UNIQUE USERNAME` (`username`(191)),
140
  KEY `groupid` (`groupid`),
141
  KEY `online_time` (`online_time`),
142
  KEY `posts` (`posts`),
@@ -213,10 +212,10 @@
213
  `confirmkey` varchar(32) NOT NULL,
214
  `userid` BIGINT UNSIGNED NOT NULL,
215
  `active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
216
- `user_name` VARCHAR(100) NOT NULL,
217
- `user_email` VARCHAR(100) NOT NULL,
218
  PRIMARY KEY (`subid`),
219
- UNIQUE KEY `itemid` (`itemid`,`type`,`userid`),
220
  UNIQUE KEY `confirmkey` (`confirmkey`),
221
  KEY `itemid_2` (`itemid`),
222
  KEY `userid` (`userid`)
136
  `timezone` VARCHAR(255),
137
  PRIMARY KEY (`userid`),
138
  UNIQUE KEY `UNIQUE ID` (`userid`),
 
139
  KEY `groupid` (`groupid`),
140
  KEY `online_time` (`online_time`),
141
  KEY `posts` (`posts`),
212
  `confirmkey` varchar(32) NOT NULL,
213
  `userid` BIGINT UNSIGNED NOT NULL,
214
  `active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
215
+ `user_name` VARCHAR(60) NOT NULL,
216
+ `user_email` VARCHAR(60) NOT NULL,
217
  PRIMARY KEY (`subid`),
218
+ UNIQUE KEY `fld_group_unq` (`itemid`,`type`,`userid`,`user_email`(60)),
219
  UNIQUE KEY `confirmkey` (`confirmkey`),
220
  KEY `itemid_2` (`itemid`),
221
  KEY `userid` (`userid`)
wpf-includes/wpf-actions.php CHANGED
@@ -8,8 +8,11 @@ function wpforo_actions(){
8
  if( isset($_POST['wpfreg']) && !empty($_POST['wpfreg']) && $userid = WPF()->member->create($_POST['wpfreg'])){
9
  wpforo_verify_form('ref');
10
  WPF()->member->reset($userid);
11
- $redirect_url = WPF()->member->get_profile_url( $userid, 'account' );
12
- if( WPF()->member->options['redirect_url_after_register'] ) $redirect_url = WPF()->member->options['redirect_url_after_register'];
 
 
 
13
  wp_redirect($redirect_url);
14
  exit();
15
  }
@@ -27,8 +30,11 @@ function wpforo_actions(){
27
  }
28
  $wpf_login_times++;
29
  update_user_meta( $user->ID, '_wpf_login_times', $wpf_login_times );
30
- $redirect_url = wpforo_home_url( preg_replace('#\?.*$#is', '', wpforo_get_request_uri()) );
31
- if( WPF()->member->options['redirect_url_after_login'] ) $redirect_url = WPF()->member->options['redirect_url_after_login'];
 
 
 
32
  wp_redirect($redirect_url);
33
  exit();
34
  }else{
@@ -147,6 +153,8 @@ function wpforo_actions(){
147
 
148
  if( WPF()->topic->merge( WPF()->current_object['topic'], $target, array(), $to_target_title, $append ) )
149
  $redirect_to = WPF()->topic->get_topic_url($target);
 
 
150
  }
151
  }
152
  wp_redirect( $redirect_to );
@@ -177,6 +185,8 @@ function wpforo_actions(){
177
 
178
  if( WPF()->topic->merge( WPF()->current_object['topic'], $target, $_POST['wpforo']['posts'], $to_target_title, $append ) )
179
  $redirect_to = WPF()->topic->get_topic_url($target);
 
 
180
  }
181
  }
182
  }
@@ -251,6 +261,7 @@ function wpforo_actions(){
251
  WPF()->forum->rebuild_stats($forumid);
252
  WPF()->db->query("DELETE FROM `" . WPF()->db->prefix . "options` WHERE `option_name` LIKE 'wpforo_stat%'" );
253
  }
 
254
  WPF()->notice->add('Updated Successfully!', 'success');
255
  }
256
  }
@@ -800,7 +811,7 @@ function wpforo_actions(){
800
 
801
  if(isset($_GET['topic']) && $_GET['topic']){
802
  if( $_GET['topic'] == 'g' ){
803
- $posts = WPF()->post->get_posts( array( 'row_count' => $topic_rss_items, 'orderby' => 'created', 'order' => 'DESC', 'check_private' => true ) );
804
  $topic['title'] = '';
805
  $topic['topicurl'] = '#';
806
  }
@@ -808,7 +819,7 @@ function wpforo_actions(){
808
  $topicid = intval($_GET['topic']);
809
  $topic = wpforo_topic($topicid); //WPF()->topic->get_topic($topicid);
810
  $topic['topicurl'] = ( $topic['url'] ) ? $topic['url'] : WPF()->topic->get_topic_url($topicid);
811
- $posts = WPF()->post->get_posts( array( 'topicid' => $topicid, 'row_count' => $topic_rss_items, 'orderby' => 'created', 'order' => 'DESC', 'check_private' => true ) );
812
  }
813
  foreach($posts as $key => $post){
814
  $member = wpforo_member( $post );
8
  if( isset($_POST['wpfreg']) && !empty($_POST['wpfreg']) && $userid = WPF()->member->create($_POST['wpfreg'])){
9
  wpforo_verify_form('ref');
10
  WPF()->member->reset($userid);
11
+ if( WPF()->member->options['redirect_url_after_register'] ){
12
+ $redirect_url = WPF()->member->options['redirect_url_after_register'];
13
+ }else{
14
+ $redirect_url = ( wpforo_feature('user-register-email-confirm') ? wpforo_home_url() : WPF()->member->get_profile_url( $userid, 'account' ) );
15
+ }
16
  wp_redirect($redirect_url);
17
  exit();
18
  }
30
  }
31
  $wpf_login_times++;
32
  update_user_meta( $user->ID, '_wpf_login_times', $wpf_login_times );
33
+ if( WPF()->member->options['redirect_url_after_login'] ){
34
+ $redirect_url = WPF()->member->options['redirect_url_after_login'];
35
+ }else{
36
+ $redirect_url = wpforo_home_url( preg_replace('#\?.*$#is', '', wpforo_get_request_uri()) );
37
+ }
38
  wp_redirect($redirect_url);
39
  exit();
40
  }else{
153
 
154
  if( WPF()->topic->merge( WPF()->current_object['topic'], $target, array(), $to_target_title, $append ) )
155
  $redirect_to = WPF()->topic->get_topic_url($target);
156
+ }else{
157
+ WPF()->notice->add('Target Topic not found', 'error');
158
  }
159
  }
160
  wp_redirect( $redirect_to );
185
 
186
  if( WPF()->topic->merge( WPF()->current_object['topic'], $target, $_POST['wpforo']['posts'], $to_target_title, $append ) )
187
  $redirect_to = WPF()->topic->get_topic_url($target);
188
+ }else{
189
+ WPF()->notice->add('Target Topic not found', 'error');
190
  }
191
  }
192
  }
261
  WPF()->forum->rebuild_stats($forumid);
262
  WPF()->db->query("DELETE FROM `" . WPF()->db->prefix . "options` WHERE `option_name` LIKE 'wpforo_stat%'" );
263
  }
264
+ WPF()->forum->delete_tree_cache();
265
  WPF()->notice->add('Updated Successfully!', 'success');
266
  }
267
  }
811
 
812
  if(isset($_GET['topic']) && $_GET['topic']){
813
  if( $_GET['topic'] == 'g' ){
814
+ $posts = WPF()->post->get_posts( array( 'row_count' => $topic_rss_items, 'orderby' => '`created` DESC, `postid` DESC', 'check_private' => true ) );
815
  $topic['title'] = '';
816
  $topic['topicurl'] = '#';
817
  }
819
  $topicid = intval($_GET['topic']);
820
  $topic = wpforo_topic($topicid); //WPF()->topic->get_topic($topicid);
821
  $topic['topicurl'] = ( $topic['url'] ) ? $topic['url'] : WPF()->topic->get_topic_url($topicid);
822
+ $posts = WPF()->post->get_posts( array( 'topicid' => $topicid, 'row_count' => $topic_rss_items, 'orderby' => '`created` DESC, `postid` DESC', 'check_private' => true ) );
823
  }
824
  foreach($posts as $key => $post){
825
  $member = wpforo_member( $post );
wpf-includes/wpf-hooks.php CHANGED
@@ -1249,10 +1249,14 @@ function wpforo_avatar( $avatar, $id_or_email, $size, $default, $alt ) {
1249
  $id = (int) $id_or_email;
1250
  $user = get_user_by( 'id' , $id );
1251
  }elseif( is_object( $id_or_email ) ) {
1252
- if ( ! empty( $id_or_email->ID ) ) {
1253
- $id = (int) $id_or_email->ID;
1254
  $user = get_user_by( 'id' , $id );
1255
  }
 
 
 
 
1256
  }else{
1257
  $user = get_user_by( 'email', $id_or_email );
1258
  }
@@ -1912,7 +1916,7 @@ function wpforo_redirect_to_custom_password_reset(){
1912
  exit;
1913
  }
1914
 
1915
- $redirect_url = wpforo_home_url( '?wpforo=resetpassword&rp_key='.esc_attr( $_REQUEST['key'] ).'&rp_login='.esc_attr( $_REQUEST['login'] ) );
1916
 
1917
  wp_redirect( $redirect_url );
1918
  exit;
1249
  $id = (int) $id_or_email;
1250
  $user = get_user_by( 'id' , $id );
1251
  }elseif( is_object( $id_or_email ) ) {
1252
+ if ( ! empty( $id_or_email->user_id ) ) {
1253
+ $id = (int) $id_or_email->user_id;
1254
  $user = get_user_by( 'id' , $id );
1255
  }
1256
+ elseif ( ! empty( $id_or_email->ID ) ) {
1257
+ $id = (int) $id_or_email->ID;
1258
+ $user = get_user_by( 'id' , $id );
1259
+ }
1260
  }else{
1261
  $user = get_user_by( 'email', $id_or_email );
1262
  }
1916
  exit;
1917
  }
1918
 
1919
+ $redirect_url = wpforo_home_url( '?wpforo=resetpassword&rp_key='.esc_attr( urlencode($_REQUEST['key']) ).'&rp_login='.esc_attr( urlencode($_REQUEST['login']) ) );
1920
 
1921
  wp_redirect( $redirect_url );
1922
  exit;
wpf-includes/wpf-phrases.php CHANGED
@@ -728,6 +728,7 @@ $wpforo_phrases = array(
728
  'Forum post like' => __('Forum post like', 'wpforo'),
729
  'Tools' => __('Tools', 'wpforo'),
730
  'Target Topic URL' => __('Target Topic URL', 'wpforo'),
 
731
  'Merge Topics' => __('Merge Topics', 'wpforo'),
732
  'Split Topic' => __('Split Topic', 'wpforo'),
733
  'Please copy the target topic URL from browser address bar and paste in the field below.' => __('Please copy the target topic URL from browser address bar and paste in the field below.', 'wpforo'),
728
  'Forum post like' => __('Forum post like', 'wpforo'),
729
  'Tools' => __('Tools', 'wpforo'),
730
  'Target Topic URL' => __('Target Topic URL', 'wpforo'),
731
+ 'Target Topic not found' => __('Target Topic not found', 'wpforo'),
732
  'Merge Topics' => __('Merge Topics', 'wpforo'),
733
  'Split Topic' => __('Split Topic', 'wpforo'),
734
  'Please copy the target topic URL from browser address bar and paste in the field below.' => __('Please copy the target topic URL from browser address bar and paste in the field below.', 'wpforo'),
wpf-languages/wpforo.pot CHANGED
@@ -5,7 +5,7 @@ msgid ""
5
  msgstr ""
6
  "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
7
  "Project-Id-Version: Forum - wpForo\n"
8
- "POT-Creation-Date: 2018-03-04 19:04+0400\n"
9
  "PO-Revision-Date: 2016-06-28 21:09+0400\n"
10
  "Last-Translator: \n"
11
  "Language-Team: \n"
@@ -1733,7 +1733,7 @@ msgstr ""
1733
  msgid "Count of users in this usergroup"
1734
  msgstr ""
1735
 
1736
- #: wpf-admin/usergroup.php:55
1737
  msgid "is Default"
1738
  msgstr ""
1739
 
@@ -1932,41 +1932,41 @@ msgstr ""
1932
  msgid "Open link in a new tab"
1933
  msgstr ""
1934
 
1935
- #: wpf-includes/class-template.php:1403 wpf-includes/wpf-phrases.php:327
1936
  msgid "Theme file not readable"
1937
  msgstr ""
1938
 
1939
- #: wpf-includes/functions-installation.php:665
1940
  msgid "Start Profile Synchronization"
1941
  msgstr ""
1942
 
1943
- #: wpf-includes/functions-installation.php:665
1944
  msgid "Continue Synchronization"
1945
  msgstr ""
1946
 
1947
- #: wpf-includes/functions-installation.php:668
1948
  msgid ""
1949
  "This process may take a few seconds or dozens of minutes, please be patient "
1950
  "and don't close this page."
1951
  msgstr ""
1952
 
1953
- #: wpf-includes/functions-installation.php:669
1954
  msgid ""
1955
  "You can permanently disable this message in Dashboard > Forums > Features "
1956
  "admin page."
1957
  msgstr ""
1958
 
1959
- #: wpf-includes/functions-installation.php:671
1960
  msgid "wpForo Forum Installation | "
1961
  msgstr ""
1962
 
1963
- #: wpf-includes/functions-installation.php:672
1964
  msgid ""
1965
  "Forum users' profile data are not synchronized yet, this step is required! "
1966
  "Please click the button below to complete installation."
1967
  msgstr ""
1968
 
1969
- #: wpf-includes/functions-installation.php:684
1970
  msgid ""
1971
  "This process may take a few seconds or dozens of minutes, please be patient "
1972
  "and don't close this page. Database backup is not required. If you got 500 "
@@ -1974,15 +1974,15 @@ msgid ""
1974
  "in MySQL server."
1975
  msgstr ""
1976
 
1977
- #: wpf-includes/functions-installation.php:685
1978
  msgid "Updater Database"
1979
  msgstr ""
1980
 
1981
- #: wpf-includes/functions-installation.php:686
1982
  msgid "wpForo - Update Database "
1983
  msgstr ""
1984
 
1985
- #: wpf-includes/functions-installation.php:687
1986
  msgid "Please click the button below to complete wpForo update."
1987
  msgstr ""
1988
 
@@ -4221,20 +4221,24 @@ msgid "Target Topic URL"
4221
  msgstr ""
4222
 
4223
  #: wpf-includes/wpf-phrases.php:731
4224
- msgid "Merge Topic"
4225
  msgstr ""
4226
 
4227
  #: wpf-includes/wpf-phrases.php:732
4228
- msgid "Split Topic"
4229
  msgstr ""
4230
 
4231
  #: wpf-includes/wpf-phrases.php:733
 
 
 
 
4232
  msgid ""
4233
  "Please copy the target topic URL from browser address bar and paste in the "
4234
  "field below."
4235
  msgstr ""
4236
 
4237
- #: wpf-includes/wpf-phrases.php:734
4238
  msgid ""
4239
  "All posts will be merged and displayed (ordered) in target topic according "
4240
  "to posts dates. If you want to append merged posts to the end of the target "
@@ -4242,63 +4246,63 @@ msgid ""
4242
  "option below."
4243
  msgstr ""
4244
 
4245
- #: wpf-includes/wpf-phrases.php:735
4246
  msgid ""
4247
  "Update post dates (current date) to allow append posts to the end of the "
4248
  "target topic."
4249
  msgstr ""
4250
 
4251
- #: wpf-includes/wpf-phrases.php:736
4252
  msgid "Update post titles with target topic title."
4253
  msgstr ""
4254
 
4255
- #: wpf-includes/wpf-phrases.php:737
4256
  msgid ""
4257
  "Topics once merged cannot be unmerged. This topic URL will no longer be "
4258
  "available."
4259
  msgstr ""
4260
 
4261
- #: wpf-includes/wpf-phrases.php:738
4262
  msgid "Create New Topic"
4263
  msgstr ""
4264
 
4265
- #: wpf-includes/wpf-phrases.php:739
4266
  msgid ""
4267
  "Create new topic with split posts. The first post of new topic becomes the "
4268
  "earliest reply."
4269
  msgstr ""
4270
 
4271
- #: wpf-includes/wpf-phrases.php:740
4272
  msgid "New Topic Title"
4273
  msgstr ""
4274
 
4275
- #: wpf-includes/wpf-phrases.php:741
4276
  msgid "New Topic Forum"
4277
  msgstr ""
4278
 
4279
- #: wpf-includes/wpf-phrases.php:742
4280
  msgid "Select Posts to Split"
4281
  msgstr ""
4282
 
4283
- #: wpf-includes/wpf-phrases.php:743
4284
  msgid ""
4285
  "Topic once split cannot be unsplit. The first post of new topic becomes the "
4286
  "earliest reply."
4287
  msgstr ""
4288
 
4289
- #: wpf-includes/wpf-phrases.php:744
4290
  msgid "Merge"
4291
  msgstr ""
4292
 
4293
- #: wpf-includes/wpf-phrases.php:745
4294
  msgid "Split"
4295
  msgstr ""
4296
 
4297
- #: wpf-includes/wpf-phrases.php:746
4298
  msgid "Move Reply"
4299
  msgstr ""
4300
 
4301
- #: wpf-includes/wpf-phrases.php:747
4302
  msgid ""
4303
  "This action changes topic URL. Once the topic is moved to other forum the "
4304
  "old URL of this topic will no longer be available."
@@ -4410,7 +4414,7 @@ msgid ""
4410
  msgstr ""
4411
 
4412
  #. Plugin Name of the plugin/theme
4413
- msgid "wpForo - Forums"
4414
  msgstr ""
4415
 
4416
  #. Plugin URI of the plugin/theme
5
  msgstr ""
6
  "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
7
  "Project-Id-Version: Forum - wpForo\n"
8
+ "POT-Creation-Date: 2018-03-09 11:03+0400\n"
9
  "PO-Revision-Date: 2016-06-28 21:09+0400\n"
10
  "Last-Translator: \n"
11
  "Language-Team: \n"
1733
  msgid "Count of users in this usergroup"
1734
  msgstr ""
1735
 
1736
+ #: wpf-admin/usergroup.php:54
1737
  msgid "is Default"
1738
  msgstr ""
1739
 
1932
  msgid "Open link in a new tab"
1933
  msgstr ""
1934
 
1935
+ #: wpf-includes/class-template.php:1412 wpf-includes/wpf-phrases.php:327
1936
  msgid "Theme file not readable"
1937
  msgstr ""
1938
 
1939
+ #: wpf-includes/functions-installation.php:671
1940
  msgid "Start Profile Synchronization"
1941
  msgstr ""
1942
 
1943
+ #: wpf-includes/functions-installation.php:671
1944
  msgid "Continue Synchronization"
1945
  msgstr ""
1946
 
1947
+ #: wpf-includes/functions-installation.php:674
1948
  msgid ""
1949
  "This process may take a few seconds or dozens of minutes, please be patient "
1950
  "and don't close this page."
1951
  msgstr ""
1952
 
1953
+ #: wpf-includes/functions-installation.php:675
1954
  msgid ""
1955
  "You can permanently disable this message in Dashboard > Forums > Features "
1956
  "admin page."
1957
  msgstr ""
1958
 
1959
+ #: wpf-includes/functions-installation.php:677
1960
  msgid "wpForo Forum Installation | "
1961
  msgstr ""
1962
 
1963
+ #: wpf-includes/functions-installation.php:678
1964
  msgid ""
1965
  "Forum users' profile data are not synchronized yet, this step is required! "
1966
  "Please click the button below to complete installation."
1967
  msgstr ""
1968
 
1969
+ #: wpf-includes/functions-installation.php:690
1970
  msgid ""
1971
  "This process may take a few seconds or dozens of minutes, please be patient "
1972
  "and don't close this page. Database backup is not required. If you got 500 "
1974
  "in MySQL server."
1975
  msgstr ""
1976
 
1977
+ #: wpf-includes/functions-installation.php:691
1978
  msgid "Updater Database"
1979
  msgstr ""
1980
 
1981
+ #: wpf-includes/functions-installation.php:692
1982
  msgid "wpForo - Update Database "
1983
  msgstr ""
1984
 
1985
+ #: wpf-includes/functions-installation.php:693
1986
  msgid "Please click the button below to complete wpForo update."
1987
  msgstr ""
1988
 
4221
  msgstr ""
4222
 
4223
  #: wpf-includes/wpf-phrases.php:731
4224
+ msgid "Target Topic not found"
4225
  msgstr ""
4226
 
4227
  #: wpf-includes/wpf-phrases.php:732
4228
+ msgid "Merge Topics"
4229
  msgstr ""
4230
 
4231
  #: wpf-includes/wpf-phrases.php:733
4232
+ msgid "Split Topic"
4233
+ msgstr ""
4234
+
4235
+ #: wpf-includes/wpf-phrases.php:734
4236
  msgid ""
4237
  "Please copy the target topic URL from browser address bar and paste in the "
4238
  "field below."
4239
  msgstr ""
4240
 
4241
+ #: wpf-includes/wpf-phrases.php:735
4242
  msgid ""
4243
  "All posts will be merged and displayed (ordered) in target topic according "
4244
  "to posts dates. If you want to append merged posts to the end of the target "
4246
  "option below."
4247
  msgstr ""
4248
 
4249
+ #: wpf-includes/wpf-phrases.php:736
4250
  msgid ""
4251
  "Update post dates (current date) to allow append posts to the end of the "
4252
  "target topic."
4253
  msgstr ""
4254
 
4255
+ #: wpf-includes/wpf-phrases.php:737
4256
  msgid "Update post titles with target topic title."
4257
  msgstr ""
4258
 
4259
+ #: wpf-includes/wpf-phrases.php:738
4260
  msgid ""
4261
  "Topics once merged cannot be unmerged. This topic URL will no longer be "
4262
  "available."
4263
  msgstr ""
4264
 
4265
+ #: wpf-includes/wpf-phrases.php:739
4266
  msgid "Create New Topic"
4267
  msgstr ""
4268
 
4269
+ #: wpf-includes/wpf-phrases.php:740
4270
  msgid ""
4271
  "Create new topic with split posts. The first post of new topic becomes the "
4272
  "earliest reply."
4273
  msgstr ""
4274
 
4275
+ #: wpf-includes/wpf-phrases.php:741
4276
  msgid "New Topic Title"
4277
  msgstr ""
4278
 
4279
+ #: wpf-includes/wpf-phrases.php:742
4280
  msgid "New Topic Forum"
4281
  msgstr ""
4282
 
4283
+ #: wpf-includes/wpf-phrases.php:743
4284
  msgid "Select Posts to Split"
4285
  msgstr ""
4286
 
4287
+ #: wpf-includes/wpf-phrases.php:744
4288
  msgid ""
4289
  "Topic once split cannot be unsplit. The first post of new topic becomes the "
4290
  "earliest reply."
4291
  msgstr ""
4292
 
4293
+ #: wpf-includes/wpf-phrases.php:745
4294
  msgid "Merge"
4295
  msgstr ""
4296
 
4297
+ #: wpf-includes/wpf-phrases.php:746
4298
  msgid "Split"
4299
  msgstr ""
4300
 
4301
+ #: wpf-includes/wpf-phrases.php:747
4302
  msgid "Move Reply"
4303
  msgstr ""
4304
 
4305
+ #: wpf-includes/wpf-phrases.php:748
4306
  msgid ""
4307
  "This action changes topic URL. Once the topic is moved to other forum the "
4308
  "old URL of this topic will no longer be available."
4414
  msgstr ""
4415
 
4416
  #. Plugin Name of the plugin/theme
4417
+ msgid "wpForo"
4418
  msgstr ""
4419
 
4420
  #. Plugin URI of the plugin/theme
wpf-themes/classic/layouts/1/post.php CHANGED
@@ -12,6 +12,7 @@
12
  </div>
13
  <br class="wpf-clear" />
14
  </div>
 
15
  <?php
16
 
17
  foreach($posts as $key => $post) : ?>
@@ -19,7 +20,6 @@
19
  <?php $member = wpforo_member($post); ?>
20
  <div id="post-<?php echo intval($post['postid']) ?>" class="post-wrap">
21
  <div class="wpforo-post wpfcl-1">
22
- <?php if($post['is_first_post']) wpforo_moderation_tools(); ?>
23
  <div class="wpf-left">
24
  <?php if( WPF()->perm->usergroup_can('va') && wpforo_feature('avatars') ): ?>
25
  <div class="author-avatar"><?php echo WPF()->member->avatar( $member, 'alt="'.esc_attr($member['display_name']).'"', 80 ) ?></div>
12
  </div>
13
  <br class="wpf-clear" />
14
  </div>
15
+ <?php wpforo_moderation_tools(); ?>
16
  <?php
17
 
18
  foreach($posts as $key => $post) : ?>
20
  <?php $member = wpforo_member($post); ?>
21
  <div id="post-<?php echo intval($post['postid']) ?>" class="post-wrap">
22
  <div class="wpforo-post wpfcl-1">
 
23
  <div class="wpf-left">
24
  <?php if( WPF()->perm->usergroup_can('va') && wpforo_feature('avatars') ): ?>
25
  <div class="author-avatar"><?php echo WPF()->member->avatar( $member, 'alt="'.esc_attr($member['display_name']).'"', 80 ) ?></div>
wpf-themes/classic/layouts/1/topic.php CHANGED
@@ -23,7 +23,7 @@
23
  $first_post = wpforo_post($topic['first_postid']);
24
  $intro_posts = WPF()->post->options['layout_extended_intro_posts_count']; if( $intro_posts < 1 ){ $intro_posts = NULL; } else { $intro_posts = ($intro_posts > 1) ? ($intro_posts - 1) : $intro_posts = 0; }
25
  $first_poster = wpforo_member($first_post);
26
- $posts = WPF()->post->get_posts( array('topicid' => $topic['topicid'], 'exclude' => $topic['first_postid'], 'order' => 'DESC', 'row_count' => $intro_posts) );
27
  $posts = array_reverse($posts);
28
  }
29
  $topic_url = wpforo_topic($topic['topicid'], 'url');
23
  $first_post = wpforo_post($topic['first_postid']);
24
  $intro_posts = WPF()->post->options['layout_extended_intro_posts_count']; if( $intro_posts < 1 ){ $intro_posts = NULL; } else { $intro_posts = ($intro_posts > 1) ? ($intro_posts - 1) : $intro_posts = 0; }
25
  $first_poster = wpforo_member($first_post);
26
+ $posts = WPF()->post->get_posts( array('topicid' => $topic['topicid'], 'exclude' => $topic['first_postid'], 'orderby' => '`is_first_post` ASC, `created` DESC, `postid` DESC', 'row_count' => $intro_posts) );
27
  $posts = array_reverse($posts);
28
  }
29
  $topic_url = wpforo_topic($topic['topicid'], 'url');
wpf-themes/classic/layouts/2/post.php CHANGED
@@ -13,13 +13,13 @@
13
  </div>
14
  <div class="wpf-clear"></div>
15
  </div>
 
16
 
17
  <?php foreach($posts as $key => $post) : ?>
18
 
19
  <?php $member = wpforo_member($post); ?>
20
  <div id="post-<?php echo intval($post['postid']) ?>" class="post-wrap">
21
  <div class="wpforo-post wpfcl-1">
22
- <?php if($post['is_first_post']) wpforo_moderation_tools(); ?>
23
  <div class="wpf-left">
24
  <?php if( WPF()->perm->usergroup_can('va') && wpforo_feature('avatars') ): ?>
25
  <div class="author-avatar"><?php echo WPF()->member->avatar($member, 'alt="'.esc_attr($member['display_name']).'"', 110) ?></div>
13
  </div>
14
  <div class="wpf-clear"></div>
15
  </div>
16
+ <?php wpforo_moderation_tools(); ?>
17
 
18
  <?php foreach($posts as $key => $post) : ?>
19
 
20
  <?php $member = wpforo_member($post); ?>
21
  <div id="post-<?php echo intval($post['postid']) ?>" class="post-wrap">
22
  <div class="wpforo-post wpfcl-1">
 
23
  <div class="wpf-left">
24
  <?php if( WPF()->perm->usergroup_can('va') && wpforo_feature('avatars') ): ?>
25
  <div class="author-avatar"><?php echo WPF()->member->avatar($member, 'alt="'.esc_attr($member['display_name']).'"', 110) ?></div>
wpf-themes/classic/layouts/3/post.php CHANGED
@@ -12,13 +12,14 @@
12
  </div>
13
  <br class="wpf-clear" />
14
  </div>
 
 
15
  <?php foreach($posts as $key => $post ) : $is_topic = ( $key ? FALSE : TRUE ); ?>
16
 
17
  <?php if($post['parentid'] == 0): ?>
18
  <?php $member = wpforo_member($post); ?>
19
  <div id="post-<?php echo intval($post['postid']) ?>" class="post-wrap <?php if( !$post['is_first_post'] ) echo 'wpf-answer-wrap' ?>">
20
  <div class="wpforo-post wpfcl-1">
21
- <?php if($post['is_first_post']) wpforo_moderation_tools(); ?>
22
  <div class="wpf-left">
23
  <div class="wpforo-post-voting">
24
  <div class="wpf-positive">
12
  </div>
13
  <br class="wpf-clear" />
14
  </div>
15
+ <?php wpforo_moderation_tools(); ?>
16
+
17
  <?php foreach($posts as $key => $post ) : $is_topic = ( $key ? FALSE : TRUE ); ?>
18
 
19
  <?php if($post['parentid'] == 0): ?>
20
  <?php $member = wpforo_member($post); ?>
21
  <div id="post-<?php echo intval($post['postid']) ?>" class="post-wrap <?php if( !$post['is_first_post'] ) echo 'wpf-answer-wrap' ?>">
22
  <div class="wpforo-post wpfcl-1">
 
23
  <div class="wpf-left">
24
  <div class="wpforo-post-voting">
25
  <div class="wpf-positive">
wpf-themes/classic/recent.php CHANGED
@@ -75,7 +75,7 @@ else{
75
  $first_post = wpforo_post($topic['first_postid']);
76
  $intro_posts = WPF()->post->options['layout_extended_intro_posts_count']; if( $intro_posts < 1 ){ $intro_posts = NULL; } else { $intro_posts = ($intro_posts > 1) ? ($intro_posts - 1) : $intro_posts = 0; }
77
  $first_poster = wpforo_member($first_post);
78
- $posts = WPF()->post->get_posts( array('topicid' => $topic['topicid'], 'order' => 'DESC', 'orderby' => 'postid', 'row_count' => $intro_posts) );
79
  }
80
  $topic_url = wpforo_topic($topic['topicid'], 'url');
81
  $post_toglle = WPF()->post->options['layout_extended_intro_posts_toggle'];
75
  $first_post = wpforo_post($topic['first_postid']);
76
  $intro_posts = WPF()->post->options['layout_extended_intro_posts_count']; if( $intro_posts < 1 ){ $intro_posts = NULL; } else { $intro_posts = ($intro_posts > 1) ? ($intro_posts - 1) : $intro_posts = 0; }
77
  $first_poster = wpforo_member($first_post);
78
+ $posts = WPF()->post->get_posts( array('topicid' => $topic['topicid'], 'orderby' => '`is_first_post` ASC, `created` DESC, `postid` DESC', 'row_count' => $intro_posts) );
79
  }
80
  $topic_url = wpforo_topic($topic['topicid'], 'url');
81
  $post_toglle = WPF()->post->options['layout_extended_intro_posts_toggle'];
wpf-themes/classic/style-rtl.css CHANGED
@@ -878,7 +878,7 @@ RTL Style of Classic Theme
878
  /************* Topic Tools *************************/
879
  /****************************************************/
880
  #wpforo-wrap #wpf_moderation_tools{display: none;}
881
- #wpforo-wrap .wpf-tools {padding: 20px; margin: -2px auto 2px;}
882
  #wpforo-wrap .wpf-tools .wpf-tool-tabs{display: block; width: 100%; margin-bottom: 1px;}
883
  #wpforo-wrap .wpf-tools .wpf-tool-tabs .wpf-tool-tab{ display: inline-block; margin-left: 2px; padding: 10px 15px 5px 15px; font-size: 14px; cursor: pointer; border: 1px solid transparent; border-top-width: 2px;}
884
  #wpforo-wrap .wpf-tools .wpf-tool-tabs .wpf-tool-tab:first-letter{text-transform: uppercase;}
@@ -1198,3 +1198,7 @@ RTL Style of Classic Theme
1198
  #wpforo-wrap .wpf-extra-fields #wpforo_recaptcha_widget{ -webkit-transform:scale(0.85); transform:scale(0.85); -webkit-transform-origin:right 0; transform-origin:right 0; }
1199
  @media screen and (max-width:1000px){ #wpforo-wrap .wpf-extra-fields #wpforo_recaptcha_widget{ transform:scale(0.75);-webkit-transform:scale(0.75); transform-origin:right 0;-webkit-transform-origin:right 0; }}
1200
  @media screen and (max-width:420px){ #wpforo-wrap .wpf-extra-fields #wpforo_recaptcha_widget{ transform:scale(0.65);-webkit-transform:scale(0.65); transform-origin:right 0;-webkit-transform-origin:right 0; }}
 
 
 
 
878
  /************* Topic Tools *************************/
879
  /****************************************************/
880
  #wpforo-wrap #wpf_moderation_tools{display: none;}
881
+ #wpforo-wrap .wpf-tools {padding: 20px; margin: -2px auto 10px;}
882
  #wpforo-wrap .wpf-tools .wpf-tool-tabs{display: block; width: 100%; margin-bottom: 1px;}
883
  #wpforo-wrap .wpf-tools .wpf-tool-tabs .wpf-tool-tab{ display: inline-block; margin-left: 2px; padding: 10px 15px 5px 15px; font-size: 14px; cursor: pointer; border: 1px solid transparent; border-top-width: 2px;}
884
  #wpforo-wrap .wpf-tools .wpf-tool-tabs .wpf-tool-tab:first-letter{text-transform: uppercase;}
1198
  #wpforo-wrap .wpf-extra-fields #wpforo_recaptcha_widget{ -webkit-transform:scale(0.85); transform:scale(0.85); -webkit-transform-origin:right 0; transform-origin:right 0; }
1199
  @media screen and (max-width:1000px){ #wpforo-wrap .wpf-extra-fields #wpforo_recaptcha_widget{ transform:scale(0.75);-webkit-transform:scale(0.75); transform-origin:right 0;-webkit-transform-origin:right 0; }}
1200
  @media screen and (max-width:420px){ #wpforo-wrap .wpf-extra-fields #wpforo_recaptcha_widget{ transform:scale(0.65);-webkit-transform:scale(0.65); transform-origin:right 0;-webkit-transform-origin:right 0; }}
1201
+
1202
+ /* Font Awesome Fixes */
1203
+ #wpforo-wrap .fa-reply:before { content: "\f3e5" !important; }
1204
+ #wpforo-wrap .fas.far{font-weight: normal;}
wpf-themes/classic/style.css CHANGED
@@ -880,7 +880,7 @@ Author: gVectors Team
880
  /************* Topic Tools *************************/
881
  /****************************************************/
882
  #wpforo-wrap #wpf_moderation_tools{display: none;}
883
- #wpforo-wrap .wpf-tools {padding: 20px; margin: -2px auto 2px;}
884
  #wpforo-wrap .wpf-tools .wpf-tool-tabs{display: block; width: 100%; margin-bottom: 1px;}
885
  #wpforo-wrap .wpf-tools .wpf-tool-tabs .wpf-tool-tab{ display: inline-block; margin-right: 2px; padding: 10px 15px 5px 15px; font-size: 14px; cursor: pointer; border: 1px solid transparent; border-top-width: 2px; }
886
  #wpforo-wrap .wpf-tools .wpf-tool-tabs .wpf-tool-tab:first-letter{text-transform: uppercase;}
@@ -1192,7 +1192,6 @@ Author: gVectors Team
1192
  #wpforo-wrap .mce-toolbar .mce-btn-group #mceu_0.mce-btn.mce-listbox {background: transparent;}
1193
  #wpforo-wrap .mce-toolbar #mceu_0.mce-listbox button i{display:none;}
1194
 
1195
- /* reCAPTCHA */
1196
  /* reCAPTCHA */
1197
  #wpforo-wrap #wpforo_recaptcha_widget{ -webkit-transform:scale(0.9); transform:scale(0.9); }
1198
  @media screen and (max-width:1000px){ #wpforo-wrap #wpforo_recaptcha_widget{ transform:scale(0.75);-webkit-transform:scale(0.75); }}
@@ -1200,4 +1199,8 @@ Author: gVectors Team
1200
 
1201
  #wpforo-wrap .wpf-extra-fields #wpforo_recaptcha_widget{ -webkit-transform:scale(0.85); transform:scale(0.85); -webkit-transform-origin:left 0; transform-origin:left 0; }
1202
  @media screen and (max-width:800px){ #wpforo-wrap .wpf-extra-fields #wpforo_recaptcha_widget{ transform:scale(0.75);-webkit-transform:scale(0.75); transform-origin:left 0;-webkit-transform-origin:left 0; }}
1203
- @media screen and (max-width:420px){ #wpforo-wrap .wpf-extra-fields #wpforo_recaptcha_widget{ transform:scale(0.65);-webkit-transform:scale(0.65); transform-origin:left 0;-webkit-transform-origin:left 0; }}
 
 
 
 
880
  /************* Topic Tools *************************/
881
  /****************************************************/
882
  #wpforo-wrap #wpf_moderation_tools{display: none;}
883
+ #wpforo-wrap .wpf-tools {padding: 20px; margin: -2px auto 10px;}
884
  #wpforo-wrap .wpf-tools .wpf-tool-tabs{display: block; width: 100%; margin-bottom: 1px;}
885
  #wpforo-wrap .wpf-tools .wpf-tool-tabs .wpf-tool-tab{ display: inline-block; margin-right: 2px; padding: 10px 15px 5px 15px; font-size: 14px; cursor: pointer; border: 1px solid transparent; border-top-width: 2px; }
886
  #wpforo-wrap .wpf-tools .wpf-tool-tabs .wpf-tool-tab:first-letter{text-transform: uppercase;}
1192
  #wpforo-wrap .mce-toolbar .mce-btn-group #mceu_0.mce-btn.mce-listbox {background: transparent;}
1193
  #wpforo-wrap .mce-toolbar #mceu_0.mce-listbox button i{display:none;}
1194
 
 
1195
  /* reCAPTCHA */
1196
  #wpforo-wrap #wpforo_recaptcha_widget{ -webkit-transform:scale(0.9); transform:scale(0.9); }
1197
  @media screen and (max-width:1000px){ #wpforo-wrap #wpforo_recaptcha_widget{ transform:scale(0.75);-webkit-transform:scale(0.75); }}
1199
 
1200
  #wpforo-wrap .wpf-extra-fields #wpforo_recaptcha_widget{ -webkit-transform:scale(0.85); transform:scale(0.85); -webkit-transform-origin:left 0; transform-origin:left 0; }
1201
  @media screen and (max-width:800px){ #wpforo-wrap .wpf-extra-fields #wpforo_recaptcha_widget{ transform:scale(0.75);-webkit-transform:scale(0.75); transform-origin:left 0;-webkit-transform-origin:left 0; }}
1202
+ @media screen and (max-width:420px){ #wpforo-wrap .wpf-extra-fields #wpforo_recaptcha_widget{ transform:scale(0.65);-webkit-transform:scale(0.65); transform-origin:left 0;-webkit-transform-origin:left 0; }}
1203
+
1204
+ /* Font Awesome Fixes */
1205
+ #wpforo-wrap .fa-reply:before { content: "\f3e5" !important; }
1206
+ #wpforo-wrap .fas.far{font-weight: normal;}
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 (A. Chakhoyan, R. Hovhannisyan)
7
  * Author URI: https://gvectors.com/
8
- * Version: 1.4.6
9
  * Text Domain: wpforo
10
  * Domain Path: /wpf-languages
11
  */
12
 
13
  //Exit if accessed directly
14
  if( !defined( 'ABSPATH' ) ) exit;
15
- if( !defined( 'WPFORO_VERSION' ) ) define('WPFORO_VERSION', '1.4.6');
16
 
17
  function wpforo_load_plugin_textdomain() { load_plugin_textdomain( 'wpforo', FALSE, basename( dirname( __FILE__ ) ) . '/wpf-languages/' ); }
18
  add_action( 'plugins_loaded', 'wpforo_load_plugin_textdomain' );
@@ -339,9 +339,9 @@ if( !class_exists( 'wpForo' ) ) {
339
  $stats['members'] = $this->member->get_count();
340
  $stats['online_members_count'] = $this->member->online_members_count();
341
 
342
- $posts = $this->topic->get_topics(array('orderby' => 'modified', 'order' => 'DESC', 'row_count' => 10, 'private' => 0 ));
343
  $first = key($posts);
344
- if ( isset($posts[$first]) && !empty($posts[$first]) && $this->perm->forum_can('vf', $posts[$first]['forumid']) ) {
345
  $stats['last_post_title'] = $posts[$first]['title'];
346
  $stats['last_post_url'] = $this->post->get_post_url($posts[$first]['last_post']);
347
  }
@@ -522,7 +522,7 @@ if( !class_exists( 'wpForo' ) ) {
522
  'offset' => ($current_object['paged'] - 1) * $this->post->options['posts_per_page'],
523
  'row_count' => $this->post->options['posts_per_page'],
524
  'userid' => $current_object['userid'],
525
- 'order' => 'DESC',
526
  'check_private' => true
527
  );
528
  $current_object['items_count'] = 0;
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 (A. Chakhoyan, R. Hovhannisyan)
7
  * Author URI: https://gvectors.com/
8
+ * Version: 1.4.7
9
  * Text Domain: wpforo
10
  * Domain Path: /wpf-languages
11
  */
12
 
13
  //Exit if accessed directly
14
  if( !defined( 'ABSPATH' ) ) exit;
15
+ if( !defined( 'WPFORO_VERSION' ) ) define('WPFORO_VERSION', '1.4.7');
16
 
17
  function wpforo_load_plugin_textdomain() { load_plugin_textdomain( 'wpforo', FALSE, basename( dirname( __FILE__ ) ) . '/wpf-languages/' ); }
18
  add_action( 'plugins_loaded', 'wpforo_load_plugin_textdomain' );
339
  $stats['members'] = $this->member->get_count();
340
  $stats['online_members_count'] = $this->member->online_members_count();
341
 
342
+ $posts = $this->topic->get_topics(array('orderby' => 'modified', 'order' => 'DESC', 'row_count' => 20, 'private' => 0, 'status' => 0, 'permgroup' => 4 ));
343
  $first = key($posts);
344
+ if ( isset($posts[$first]) && !empty($posts[$first]) && $this->perm->forum_can('vf', $posts[$first]['forumid'], 4) ) {
345
  $stats['last_post_title'] = $posts[$first]['title'];
346
  $stats['last_post_url'] = $this->post->get_post_url($posts[$first]['last_post']);
347
  }
522
  'offset' => ($current_object['paged'] - 1) * $this->post->options['posts_per_page'],
523
  'row_count' => $this->post->options['posts_per_page'],
524
  'userid' => $current_object['userid'],
525
+ 'orderby' => '`created` DESC, `postid` DESC',
526
  'check_private' => true
527
  );
528
  $current_object['items_count'] = 0;