wpForo Forum - Version 1.3.1

Version Description

| 11.06.2017 =

wpForo v1.3.1 Release Summary

  • Tested with WordPress 4.8
  • Fixed Bug: 404 page header issue
  • Fixed Bug: Usergroup style and space issue
  • Fixed Bug: Admin bar displaying issue. Only for logged-in users
  • Fixed Bug: Moderator access to topic/post Moderation admin page
  • Fixed Bug: Bad quality of user avatars on topic list of Simplified Layout
  • Fixed Bug: Cache issue with private/unapproved topics and posts
  • Fixed Bug: Small bug with delete all cache process
  • Fixed Bug: Undefined index: HTTP_REFERER in /functions.php on line 233
  • Fixed Bug: Issue with Edit and Delete button for new reg users if topic/post is unapproved
  • New Addon: wpForo - Blog Cross Posting

IMPORTANT:

  • If you have a copy of wpForo template files in your WP theme /wpforo/ folder please update those. wpForo 1.3.0 requirs new template files.
  • If you're updating from beta, 1.0.x or 1.1.x versions, please navigate to Dashboard > Forums > Tools admin page and check the "Possible Spam Attachments" section. We detected massive spam file uploading cases in non-protected forums. Spammers delete topics and posts but uploaded spam files are still in your file system, most of those PDF files. Please delete all suspected PDF files listed in this section. More Info...
  • To load your customized colors please refresh forum front-end page twice.
  • If you have a Cache Plugin, please delete all caches after wpForo update.
  • If you use CDN and found some issue please purge it.
Download this release

Release Info

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

Code changes from version 1.3.0 to 1.3.1

readme.txt CHANGED
@@ -2,73 +2,57 @@
2
  Contributors: gVectors Team
3
  Tags: forums, forum, community, discussion, bulletin board, question and answers, qa
4
  Requires at least: 4.1
5
- Tested up to: 4.7
6
- Stable tag: 1.3.0
7
  License: GPLv2 or later
8
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
10
  Forums wpForo is a new generation of forum plugins. It's full-fledged forum solution for your community. Comes with multiple modern forum layouts.
11
 
12
  == Description ==
13
 
14
- Forums - wpForo is a new generation of WordPress forum plugins made by [gVectors Team](http://gvectors.com/). Everything you need to run an efficient and professional community. Powerful and beautiful bulletin board with unique features.
15
 
16
- Community and Demo: [http://wpforo.com/community/](http://wpforo.com/community/)
17
- Documentation: [http://wpforo.com/documentation/](http://wpforo.com/documentation/)
18
 
19
 
20
  = Forums can be displayed with three different layouts =
21
 
22
- 1. [**Extended Layout:**](http://wpforo.com/docs/categories-and-forums/forum-layouts/extended-layout/)
23
  Classic forum layout with an unique feature to show one level deeper information. You can see latest topics of each forum on Forum List and latest posts of each topic on Topic List.
24
- 2. [**Simplified Layout:**](http://wpforo.com/docs/categories-and-forums/forum-layouts/simplified-layout/)
25
  Light, modern and beautiful forum layout with topic and post author avatars on forum and topic lists.
26
- 3. [**Question and Answer Layout:**](http://wpforo.com/docs/categories-and-forums/forum-layouts/question-answer-layout/)
27
  Complete Question & Answers discussion board for professional support and for communities similar to Stack Overflow. Perfect platform for users to ask and answer questions, and, through membership and active participation, to vote up or down.
28
 
29
- = Available Translations =
30
-
31
- * | Czech (cs_CZ) by Glados (The Witcher)
32
- * | German (de_DE) by Markus Herrmann
33
- * | Spanish (es_ES) Poncho Camacho
34
- * | Spanish (Mexico) (es_MX) Poncho Camacho
35
- * | Swedish (sv_SE) by Mathias Persson
36
- * | Persian (fa_IR) by wpforo.ir
37
- * | Hebrew (he_IL) Gal Zilberman
38
- * | Japanese (JA_ja) by Seg Way
39
- * | Korean (ko_KO) by Jeehwan Song
40
- * | Dutch (nl_NL) Ger Metselaar i.o.v. Parma multimedia BV
41
- * | Russian (ru_RU) by Dmitry Butkevich
42
- * | Polish (pl_PL) by Bogusław Górecki
43
- * | French (fr_FR) by Julien Coopmann | Florent Lanternier | Youri Le Cottier
44
-
45
  = wpForo Addons =
46
 
47
- * | [wpForo - Embeds](http://gvectors.com/product/wpforo-embeds/)
48
- * | [wpForo - Ads Manager](http://gvectors.com/product/wpforo-ad-manager/)
49
- * | [wpForo - Advanced Attachments](http://gvectors.com/product/wpforo-advanced-attachments/)
50
- * | [wpForo - Private Messages](http://gvectors.com/product/wpforo-private-messages/)
 
51
 
52
  = WPFORO FEATURES =
53
 
54
- * | **DESIGNED FOR ALL** | You can use wpForo for small and extremely large communities. We keep improving plugin performance.
55
- * | **FORUM LAYOUTS** | The "Extended", "Simplified" and "Question & Answer" layouts fit almost all type of discussions needs.
56
- * | **MOBILE FRIENDLY** | wpForo is super responsive on all kind of devices. Adapted on all screen sizes. You get perfectly scaled layouts on desktop, tabs and smartphones.
57
- * | **SEO FRIENDLY** | Built-in SEO functions. SEO effective Permalinks, Titles, Meta Data, Open Graph tags, Smart heading, Crawling friendly content.
58
- * | **CACHE SYSTEM** | Built-in Cache System allows wpForo work super fast with high performance.
59
- * | **ANTISPAM SYSTEM** | Built-in Antispam system called wpForo Spam Control and integrated with Akismet will be a solid protection of your community.
60
- * | **THEME API** | You can create and install new themes, copy the customized forum theme and keep it in active WordPress theme folder.
61
- * | **EXTENDABLE** | We also develop free (built-in) and paid addons. The first addons "Advanced File Attachments", "Polls", "Private Messages" and "Ad Manager" will be available very soon.
62
- * | **MEMBER PROFILE SYSTEM** | Beautiful, modern and informative profile system, with member statistic, bio, settings, activity and subscriptions pages.
63
- * | **MEMBER RATING AND BADGES** | User rating system based on number of posts. Nice Badges and Member Rating Titles per reputation level. Fully customizable.
64
- * | **SUBSCRIPTION AND RSS FEED** | Built-in forum/topic subscription with double opt-in subscription confirmation function. Separate forum/topic RSS2 feeds.
65
- * | **EASY FORUM HIERARCHY** | Drag and Drop forum management system. Easy to set Parent-Child relationship and forum list order.
66
- * | **EASY FORUM MODERATION** | All necessary moderation tools on each topic and post to make easy forum moderation. Fast and AJAX powered action will make it pleasure.
67
- * | **STYLES AND CUSTOMIZATION** | Styles with different colors, dozens of settings, options, switches to manage and integrate forum with your theme look and feel. Almost everything has its option to make it different.
68
- * | **USERGROUPS AND PERMISSIONS** | Built-in, powerful Usergroup system. Allows to create a new, manage and delete. All Usergroups have according permissions, with separate managing options.
69
- * | **FORUM ACCESS ROLES** | This is a set of access roles named e.g.: "Read Only", "Standard Access", "Moderation Access", "Full Access", etc.. to manage Usergroup accesses for each forum.
70
- * | **LANGUAGE API & TRANSLATION** | wpForo has its own Phrase System, which allows you to translate all phrases through Dashboard. And it supports WordPress .MO/.PO translation files.
71
- * | **EASY TO MIGRATE** | You can download [Go2wpForo](http://wpforo.com/community/migrate-to-wpforo-from-other-forum-plugins/migrate-to-wpforo-go2wpforo-tool/) free migration tool from our [support forum](http://wpforo.com/community/migrate-to-wpforo-from-other-forum-plugins/migrate-to-wpforo-go2wpforo-tool/). This tool allows you migrate from different WordPress forum plugins to wpForo.
72
 
73
 
74
  = Currently we're working on =
@@ -76,7 +60,7 @@ Complete Question & Answers discussion board for professional support and for co
76
  * Guest Posting...
77
  * Read/Unread topics and posts...
78
  * Social Network Sharing Buttons...
79
- * [Go2wpForo](http://wpforo.com/community/migrate-to-wpforo-from-other-forum-plugins/migrate-to-wpforo-go2wpforo-tool/) Migration Tool...
80
 
81
 
82
  == Installation ==
@@ -84,7 +68,7 @@ Complete Question & Answers discussion board for professional support and for co
84
  1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/wpforo` directory
85
  2. Activate the plugin through the 'Plugins' screen in WordPress
86
  3. If you have more than 100 users wpForo will ask you synchronize users and create user profile. You just need to click on [Create Profile Data] button in wpForo message box after the plugin activation.
87
- 4. Getting Started Doc http://wpforo.com/docs/root/getting-started/
88
 
89
 
90
  == Frequently Asked Questions ==
@@ -95,30 +79,30 @@ Complete Question & Answers discussion board for professional support and for co
95
  1. **Forum Page:** wpForo creates a page with `/community/` slug. If this slug is used you'll have `/community-2/` or `/community-3/` slug. You can find the correct one in Forums > Settings > General Tab. Make sure you use WordPress permalinks. wpForo doesn't work with default `?p=1` URL structure.
96
 
97
  2. **Change Forum Page:**
98
- http://wpforo.com/docs/root/getting-started/forum-page/change-forum-page/
99
 
100
  3. **Forum Menu:**
101
- http://wpforo.com/docs/root/getting-started/forum-menu/
102
 
103
  4. **Forum Sidebar and Widgets:**
104
- http://wpforo.com/docs/root/getting-started/forum-sidebar-and-widgets/
105
 
106
- 5. **Forum Management:** http://wpforo.com/docs/root/categories-and-forums/forum-manager/
107
 
108
  6. **Forum Style & Colors:**
109
- http://wpforo.com/docs/root/wpforo-settings/style-settings/
110
 
111
  7. **Login and Registration** In Forums > Settings > Features admin page you can force WP to use wpForo Login and Register pages or keep default WordPress pages. For custom Login/Register/Lostpassword Pages please navigate to Members Tab and use "Custom Authorization URLs" option.
112
 
113
  8. **Forum is loaded on website top:** In this case you should navigate to Forums > Settings > Features admin page and check "Enable Output Buffer" option.
114
 
115
  9. **Forums don't show up on the main page** Please read this FAQ topic:
116
- http://wpforo.com/community/faq/forums-dont-show-up-on-the-main-page/
117
 
118
  10. **wpForo Shortcodes**
119
- http://wpforo.com/community/faq/wpforo-shortcodes/
120
 
121
- wpForo Support Forum: <http://wpforo.com/community/>
122
 
123
  == Screenshots ==
124
 
@@ -142,9 +126,35 @@ wpForo Support Forum: <http://wpforo.com/community/>
142
 
143
  == Changelog ==
144
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  = 1.3.0 | 23.05.2017 =
146
 
147
- [wpForo v1.3.0 Release Summary](http://wpforo.com/community/wpforo-announcements/wpforo-1-3-0-is-released/)
148
 
149
  * Added: Two step installation if there are more than 100 users
150
  * Added: wpForo Built-in Cache System
@@ -170,7 +180,7 @@ wpForo Support Forum: <http://wpforo.com/community/>
170
  * Added: New options in Settings > Members to display Usergroup under Avatar
171
  * Added: Options to Disable Object Cache, Memory Cache, HTML Cache.
172
  * Added: Delete All Caches button (Dashboard > Forums > Dashboard)
173
- * New Addon: [wpForo Ads Manager](http://gvectors.com/product/wpforo-ad-manager/)
174
  * Fixed Bug: Visible unapproved replies in approved topic
175
  * Fixed Bug: Subscribers get email when topic is approved but post is not.
176
  * Fixed Bug: Illegal string offset 'userid' in /wpf-hooks.php on line 1281
@@ -183,17 +193,9 @@ wpForo Support Forum: <http://wpforo.com/community/>
183
  * Fixed Bug: Many small bugs
184
 
185
 
186
- IMPORTANT:
187
-
188
- - If you have a copy of wpForo template files in your WP theme /wpforo/ folder please update those. wpForo 1.3.0 requirs new template files.
189
- - If you're updating from beta, 1.0.x or 1.1.x versions, please navigate to Dashboard > Forums > Tools admin page and check the "Possible Spam Attachments" section. We detected massive spam file uploading cases in non-protected forums. Spammers delete topics and posts but uploaded spam files are still in your file system, most of those PDF files. Please delete all suspected PDF files listed in this section. [More Info](http://wpforo.com/community/wpforo-announcements/wpforo-1-2-0-is-released/)...
190
- - To load your customized colors please refresh forum front-end page twice.
191
- - If you have a Cache Plugin, please delete all caches after wpForo update.
192
- - If you use CDN and found some issue please purge it.
193
-
194
  = 1.2.0 | 08.03.2017 =
195
 
196
- [wpForo v1.2.0 Release Summary](http://wpforo.com/community/wpforo-announcements/wpforo-1-2-0-is-released/)
197
 
198
  * Added: wpForo Spam Control - New User
199
  * Added: New Dashboard subMenu - Forums > Tools > Antispam
@@ -217,7 +219,7 @@ IMPORTANT:
217
 
218
  = 1.1.2 | 26.02.2017 =
219
 
220
- [wpForo v1.1.2 Release Summary](http://wpforo.com/community/wpforo-announcements/wpforo-1-1-2-is-released/)
221
 
222
  * Added: New topic type - Private
223
  * Added: Checkbox option on Topic editor: Private Topics
@@ -232,7 +234,7 @@ IMPORTANT:
232
  * Added Access: "Can view private topic" (Admin, Moderator and Topic Creator)
233
  * Performance: Huge SQL optimization and built-in caching system
234
  * SEO Optimization: added rel="nofollow" to links with GET variables
235
- * New Addon: [wpForo - Private Messages](http://gvectors.com/product/wpforo-private-messages/)
236
  * New Addon: wpForo - Ads Manager (comming next week...)
237
  * Fixed Bug: Menu problem on IE / Edge
238
  * Fixed Bug: SubForums problem. Title and topics atatched to wrong forum
@@ -262,7 +264,7 @@ IMPORTANT:
262
  * Fixed Bug: Unnecessary email with Password Reset link on user registration
263
  * Fixed Bug: RTL Issue with widget avatars
264
  * Fixed Bug: Disable banning yourself
265
- * [More info...](http://wpforo.com/community/wpforo-announcements/wpforo-1-1-1-is-released/)
266
 
267
 
268
  = 1.1.0 | 04.12.2016 =
@@ -281,8 +283,8 @@ IMPORTANT:
281
  * Added: Option to notify forum admins when a new post is created
282
  * Added: Option to make post editor subscription checkboxe checked by default
283
  * Added: wpForo Addons admin page
284
- * New Addon: [wpForo - Embeds](http://gvectors.com/product/wpforo-embeds/)
285
- * New Addon: [wpForo - Advanced Attachments](http://gvectors.com/product/wpforo-advanced-attachments/)
286
  * Added: Nicename field in Profile > Accounts page to allow users change and hide usernames in profile URL.
287
  * Added: Option to change message when non-permitted visitor/user tries to view attachments
288
  * Added: Option to make some posts/pages available when "Turn WordPress to wpForo" option is enabled.
@@ -296,7 +298,7 @@ IMPORTANT:
296
  * Fixed Bug: Warning: Missing argument 2 for wpforo_update_last_login_date()
297
  * Optimization: Forum, topic and post loading speed and memory optimization
298
  * Security: improving post and topic creation security, two more level of checking processes before inserting data in database.
299
- * [More info...](http://wpforo.com/community/wpforo-announcements/wpforo-1-1-0-is-released/)
300
 
301
  = 1.0.2 | 10.09.2016 =
302
 
@@ -315,7 +317,7 @@ IMPORTANT:
315
  * Security: Own and other user Usergroup secure management
316
  * Security: Edit profile issues, multi-level control
317
  * Security: Custom avatar uploading file control
318
- * Added: Using wpForo on home page. [Insturction here.](http://wpforo.com/community/faq/how-to-load-forum-on-home-page/)
319
  * Added: Use wpForo without shortcode and page. Set any slug for forum Base URL.
320
  * Added: Option to turn WordPress to wpForo (Disable WordPress on front-end)
321
  * Added: Dynamic recent topic icons on forum list
@@ -339,9 +341,9 @@ IMPORTANT:
339
  * Fixed Bug: Foum SEO title. Warning: Missing argument 2 for wpforo_hide_title()
340
  * Fixed Bug: Fatal error on forum search when Debug Mode is enabled
341
  * Shortcode: Changed [wpforo-index] to [wpforo]
342
- * Shortcode: wpForo new shortcodes. [More info.](http://wpforo.com/community/faq/wpforo-shortcodes/)
343
  * SEO Optimization: Duplicated meta data on Member Profile pages
344
- * [More info...](http://wpforo.com/community/wpforo-announcements/wpforo-1-0-0-is-released/)
345
 
346
 
347
  = Beta-6 | 06.08.2016 =
2
  Contributors: gVectors Team
3
  Tags: forums, forum, community, discussion, bulletin board, question and answers, qa
4
  Requires at least: 4.1
5
+ Tested up to: 4.8
6
+ Stable tag: 1.3.1
7
  License: GPLv2 or later
8
+ License URI: https://www.gnu.org/licenses/gpl-2.0.html
9
 
10
  Forums wpForo is a new generation of forum plugins. It's full-fledged forum solution for your community. Comes with multiple modern forum layouts.
11
 
12
  == Description ==
13
 
14
+ wpForo is a new generation of WordPress forum plugins made by [gVectors Team](https://gvectors.com/). Everything you need to run an efficient and professional community. Powerful and beautiful bulletin board with unique features.
15
 
16
+ Community and Demo: [https://wpforo.com/community/](https://wpforo.com/community/)
17
+ Documentation: [https://wpforo.com/documentation/](https://wpforo.com/documentation/)
18
 
19
 
20
  = Forums can be displayed with three different layouts =
21
 
22
+ 1. [**Extended Layout:**](https://wpforo.com/docs/categories-and-forums/forum-layouts/extended-layout/)
23
  Classic forum layout with an unique feature to show one level deeper information. You can see latest topics of each forum on Forum List and latest posts of each topic on Topic List.
24
+ 2. [**Simplified Layout:**](https://wpforo.com/docs/categories-and-forums/forum-layouts/simplified-layout/)
25
  Light, modern and beautiful forum layout with topic and post author avatars on forum and topic lists.
26
+ 3. [**Question and Answer Layout:**](https://wpforo.com/docs/categories-and-forums/forum-layouts/question-answer-layout/)
27
  Complete Question & Answers discussion board for professional support and for communities similar to Stack Overflow. Perfect platform for users to ask and answer questions, and, through membership and active participation, to vote up or down.
28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  = wpForo Addons =
30
 
31
+ * | [wpForo - Embeds](https://gvectors.com/product/wpforo-embeds/)
32
+ * | [wpForo - Ads Manager](https://gvectors.com/product/wpforo-ad-manager/)
33
+ * | [wpForo - Advanced Attachments](https://gvectors.com/product/wpforo-advanced-attachments/)
34
+ * | [wpForo - Private Messages](https://gvectors.com/product/wpforo-private-messages/)
35
+ * | [wpForo - Blog Cross Posting](https://gvectors.com/product/wpforo-cross-posting/)
36
 
37
  = WPFORO FEATURES =
38
 
39
+ * | You can use wpForo for small and extremely large communities.
40
+ * | The "Extended", "Simplified" and "Question & Answer" layouts fit almost all type of discussions needs.
41
+ * | Super responsive on all kind of devices. Adapted on all screen sizes.
42
+ * | Built-in SEO functions.
43
+ * | Built-in Cache System.
44
+ * | Built-in Antispam system and integrated with Akismet.
45
+ * | Allows create and customized forum theme and keep it in active WordPress theme folder.
46
+ * | Beautiful, modern and informative user profile system.
47
+ * | User rating system based on number of posts. Nice Badges and Member Rating Titles per reputation level.
48
+ * | Built-in forum/topic subscription with double opt-in subscription confirmation function.
49
+ * | Drag and Drop forum management system. Easy to set Parent-Child relationship and forum list order.
50
+ * | All necessary moderation tools on each topic and post to make easy forum moderation.
51
+ * | Styles with different colors, dozens of settings, options, switches to manage and integrate forum with your theme look and feel.
52
+ * | Built-in, powerful Usergroup system. Allows to create a new, manage and delete.
53
+ * | Forum Accesses: "Read Only", "Standard Access", "Moderation Access", "Full Access", etc.. to manage Usergroup accesses for each forum.
54
+ * | wpForo has its own Phrase System, which allows you to translate all phrases through Dashboard. And it supports WordPress .MO/.PO translation files.
55
+ * | You can download [Go2wpForo](https://wpforo.com/community/migrate-to-wpforo-from-other-forum-plugins/migrate-to-wpforo-go2wpforo-tool/) free migration tool from our [support forum](https://wpforo.com/community/migrate-to-wpforo-from-other-forum-plugins/migrate-to-wpforo-go2wpforo-tool/). This tool allows you migrate from different WordPress forum plugins to wpForo.
 
56
 
57
 
58
  = Currently we're working on =
60
  * Guest Posting...
61
  * Read/Unread topics and posts...
62
  * Social Network Sharing Buttons...
63
+ * [Go2wpForo](https://wpforo.com/community/migrate-to-wpforo-from-other-forum-plugins/migrate-to-wpforo-go2wpforo-tool/) Migration Tool...
64
 
65
 
66
  == Installation ==
68
  1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/wpforo` directory
69
  2. Activate the plugin through the 'Plugins' screen in WordPress
70
  3. If you have more than 100 users wpForo will ask you synchronize users and create user profile. You just need to click on [Create Profile Data] button in wpForo message box after the plugin activation.
71
+ 4. Getting Started Doc https://wpforo.com/docs/root/getting-started/
72
 
73
 
74
  == Frequently Asked Questions ==
79
  1. **Forum Page:** wpForo creates a page with `/community/` slug. If this slug is used you'll have `/community-2/` or `/community-3/` slug. You can find the correct one in Forums > Settings > General Tab. Make sure you use WordPress permalinks. wpForo doesn't work with default `?p=1` URL structure.
80
 
81
  2. **Change Forum Page:**
82
+ https://wpforo.com/docs/root/getting-started/forum-page/change-forum-page/
83
 
84
  3. **Forum Menu:**
85
+ https://wpforo.com/docs/root/getting-started/forum-menu/
86
 
87
  4. **Forum Sidebar and Widgets:**
88
+ https://wpforo.com/docs/root/getting-started/forum-sidebar-and-widgets/
89
 
90
+ 5. **Forum Management:** https://wpforo.com/docs/root/categories-and-forums/forum-manager/
91
 
92
  6. **Forum Style & Colors:**
93
+ https://wpforo.com/docs/root/wpforo-settings/style-settings/
94
 
95
  7. **Login and Registration** In Forums > Settings > Features admin page you can force WP to use wpForo Login and Register pages or keep default WordPress pages. For custom Login/Register/Lostpassword Pages please navigate to Members Tab and use "Custom Authorization URLs" option.
96
 
97
  8. **Forum is loaded on website top:** In this case you should navigate to Forums > Settings > Features admin page and check "Enable Output Buffer" option.
98
 
99
  9. **Forums don't show up on the main page** Please read this FAQ topic:
100
+ https://wpforo.com/community/faq/forums-dont-show-up-on-the-main-page/
101
 
102
  10. **wpForo Shortcodes**
103
+ https://wpforo.com/community/faq/wpforo-shortcodes/
104
 
105
+ wpForo Support Forum: <https://wpforo.com/community/>
106
 
107
  == Screenshots ==
108
 
126
 
127
  == Changelog ==
128
 
129
+ = 1.3.1 | 11.06.2017 =
130
+
131
+ [wpForo v1.3.1 Release Summary](https://wpforo.com/community/wpforo-announcements/wpforo-1-3-1-is-released/)
132
+
133
+ * Tested with WordPress 4.8
134
+ * Fixed Bug: 404 page header issue
135
+ * Fixed Bug: Usergroup style and space issue
136
+ * Fixed Bug: Admin bar displaying issue. Only for logged-in users
137
+ * Fixed Bug: Moderator access to topic/post Moderation admin page
138
+ * Fixed Bug: Bad quality of user avatars on topic list of Simplified Layout
139
+ * Fixed Bug: Cache issue with private/unapproved topics and posts
140
+ * Fixed Bug: Small bug with delete all cache process
141
+ * Fixed Bug: Undefined index: HTTP_REFERER in /functions.php on line 233
142
+ * Fixed Bug: Issue with Edit and Delete button for new reg users if topic/post is unapproved
143
+ * New Addon: [wpForo - Blog Cross Posting](https://gvectors.com/product/wpforo-cross-posting/)
144
+
145
+
146
+ IMPORTANT:
147
+
148
+ - If you have a copy of wpForo template files in your WP theme /wpforo/ folder please update those. wpForo 1.3.0 requirs new template files.
149
+ - If you're updating from beta, 1.0.x or 1.1.x versions, please navigate to Dashboard > Forums > Tools admin page and check the "Possible Spam Attachments" section. We detected massive spam file uploading cases in non-protected forums. Spammers delete topics and posts but uploaded spam files are still in your file system, most of those PDF files. Please delete all suspected PDF files listed in this section. [More Info](https://wpforo.com/community/wpforo-announcements/wpforo-1-2-0-is-released/)...
150
+ - To load your customized colors please refresh forum front-end page twice.
151
+ - If you have a Cache Plugin, please delete all caches after wpForo update.
152
+ - If you use CDN and found some issue please purge it.
153
+
154
+
155
  = 1.3.0 | 23.05.2017 =
156
 
157
+ [wpForo v1.3.0 Release Summary](https://wpforo.com/community/wpforo-announcements/wpforo-1-3-0-is-released/)
158
 
159
  * Added: Two step installation if there are more than 100 users
160
  * Added: wpForo Built-in Cache System
180
  * Added: New options in Settings > Members to display Usergroup under Avatar
181
  * Added: Options to Disable Object Cache, Memory Cache, HTML Cache.
182
  * Added: Delete All Caches button (Dashboard > Forums > Dashboard)
183
+ * New Addon: [wpForo Ads Manager](https://gvectors.com/product/wpforo-ad-manager/)
184
  * Fixed Bug: Visible unapproved replies in approved topic
185
  * Fixed Bug: Subscribers get email when topic is approved but post is not.
186
  * Fixed Bug: Illegal string offset 'userid' in /wpf-hooks.php on line 1281
193
  * Fixed Bug: Many small bugs
194
 
195
 
 
 
 
 
 
 
 
 
196
  = 1.2.0 | 08.03.2017 =
197
 
198
+ [wpForo v1.2.0 Release Summary](https://wpforo.com/community/wpforo-announcements/wpforo-1-2-0-is-released/)
199
 
200
  * Added: wpForo Spam Control - New User
201
  * Added: New Dashboard subMenu - Forums > Tools > Antispam
219
 
220
  = 1.1.2 | 26.02.2017 =
221
 
222
+ [wpForo v1.1.2 Release Summary](https://wpforo.com/community/wpforo-announcements/wpforo-1-1-2-is-released/)
223
 
224
  * Added: New topic type - Private
225
  * Added: Checkbox option on Topic editor: Private Topics
234
  * Added Access: "Can view private topic" (Admin, Moderator and Topic Creator)
235
  * Performance: Huge SQL optimization and built-in caching system
236
  * SEO Optimization: added rel="nofollow" to links with GET variables
237
+ * New Addon: [wpForo - Private Messages](https://gvectors.com/product/wpforo-private-messages/)
238
  * New Addon: wpForo - Ads Manager (comming next week...)
239
  * Fixed Bug: Menu problem on IE / Edge
240
  * Fixed Bug: SubForums problem. Title and topics atatched to wrong forum
264
  * Fixed Bug: Unnecessary email with Password Reset link on user registration
265
  * Fixed Bug: RTL Issue with widget avatars
266
  * Fixed Bug: Disable banning yourself
267
+ * [More info...](https://wpforo.com/community/wpforo-announcements/wpforo-1-1-1-is-released/)
268
 
269
 
270
  = 1.1.0 | 04.12.2016 =
283
  * Added: Option to notify forum admins when a new post is created
284
  * Added: Option to make post editor subscription checkboxe checked by default
285
  * Added: wpForo Addons admin page
286
+ * New Addon: [wpForo - Embeds](https://gvectors.com/product/wpforo-embeds/)
287
+ * New Addon: [wpForo - Advanced Attachments](https://gvectors.com/product/wpforo-advanced-attachments/)
288
  * Added: Nicename field in Profile > Accounts page to allow users change and hide usernames in profile URL.
289
  * Added: Option to change message when non-permitted visitor/user tries to view attachments
290
  * Added: Option to make some posts/pages available when "Turn WordPress to wpForo" option is enabled.
298
  * Fixed Bug: Warning: Missing argument 2 for wpforo_update_last_login_date()
299
  * Optimization: Forum, topic and post loading speed and memory optimization
300
  * Security: improving post and topic creation security, two more level of checking processes before inserting data in database.
301
+ * [More info...](https://wpforo.com/community/wpforo-announcements/wpforo-1-1-0-is-released/)
302
 
303
  = 1.0.2 | 10.09.2016 =
304
 
317
  * Security: Own and other user Usergroup secure management
318
  * Security: Edit profile issues, multi-level control
319
  * Security: Custom avatar uploading file control
320
+ * Added: Using wpForo on home page. [Insturction here.](https://wpforo.com/community/faq/how-to-load-forum-on-home-page/)
321
  * Added: Use wpForo without shortcode and page. Set any slug for forum Base URL.
322
  * Added: Option to turn WordPress to wpForo (Disable WordPress on front-end)
323
  * Added: Dynamic recent topic icons on forum list
341
  * Fixed Bug: Foum SEO title. Warning: Missing argument 2 for wpforo_hide_title()
342
  * Fixed Bug: Fatal error on forum search when Debug Mode is enabled
343
  * Shortcode: Changed [wpforo-index] to [wpforo]
344
+ * Shortcode: wpForo new shortcodes. [More info.](https://wpforo.com/community/faq/wpforo-shortcodes/)
345
  * SEO Optimization: Duplicated meta data on Member Profile pages
346
+ * [More info...](https://wpforo.com/community/wpforo-announcements/wpforo-1-0-0-is-released/)
347
 
348
 
349
  = Beta-6 | 06.08.2016 =
wpf-admin/moderation.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  // Exit if accessed directly
3
  if( !defined( 'ABSPATH' ) ) exit;
4
- if( !current_user_can('administrator') ) exit;
5
  ?>
6
 
7
  <div id="wpf-admin-wrap" class="wrap" style="margin-top: 0px">
1
  <?php
2
  // Exit if accessed directly
3
  if( !defined( 'ABSPATH' ) ) exit;
4
+ if( !$wpforo->perm->usergroup_can('aum') ) exit;
5
  ?>
6
 
7
  <div id="wpf-admin-wrap" class="wrap" style="margin-top: 0px">
wpf-admin/tools-tabs/antispam.php CHANGED
@@ -117,11 +117,12 @@
117
  if(is_dir($default_attachments_dir)):
118
  if ($handle = opendir($default_attachments_dir)):
119
  while (false !== ($filename = readdir($handle))):
120
- $level = 0; $color ='';
121
- $file = $default_attachments_dir . '/' . $filename;
122
- $extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
123
- if( $filename == '.' || $filename == '..') continue;
124
- if( !$level = $wpforo->moderation->spam_file($filename) ) continue;
 
125
  if( $level == 2 ) $color = 'style="color:#EE9900;"';
126
  if( $level == 3 ) $color = 'style="color:#FF0000;"';
127
  if( $level == 4 ) $color = 'style="color:#BB0000;"';
117
  if(is_dir($default_attachments_dir)):
118
  if ($handle = opendir($default_attachments_dir)):
119
  while (false !== ($filename = readdir($handle))):
120
+ if( $filename == '.' || $filename == '..') continue;
121
+
122
+ $level = 0; $color ='';
123
+ $file = $default_attachments_dir . '/' . $filename;
124
+ $extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
125
+ if( !$level = $wpforo->moderation->spam_file($filename) ) continue;
126
  if( $level == 2 ) $color = 'style="color:#EE9900;"';
127
  if( $level == 3 ) $color = 'style="color:#FF0000;"';
128
  if( $level == 4 ) $color = 'style="color:#BB0000;"';
wpf-admin/tools.php CHANGED
@@ -17,21 +17,16 @@
17
  wpforo_admin_tools_tabs( $tabs, ( isset($_GET['tab']) ? $_GET['tab'] : 'antispam' ) );
18
  ?>
19
  <div class="wpf-info-bar" style="padding:1% 2%;">
20
- <?php
21
- if(isset($_GET['tab'])){
 
22
  switch($_GET['tab']){
23
- case 'antispam':
24
- include( 'tools-tabs/antispam.php' );
25
- break;
26
  case 'cleanup':
27
- include( 'tools-tabs/cleanup.php' );
28
  break;
29
- default:
30
- include_once( 'tools-tabs/antispam.php' );
31
  }
32
- }else{
33
- include_once( 'tools-tabs/antispam.php' );
34
  }
35
- ?>
 
36
  </div>
37
  </div>
17
  wpforo_admin_tools_tabs( $tabs, ( isset($_GET['tab']) ? $_GET['tab'] : 'antispam' ) );
18
  ?>
19
  <div class="wpf-info-bar" style="padding:1% 2%;">
20
+ <?php
21
+ $includefile = 'tools-tabs/antispam.php';
22
+ if(!empty($_GET['tab'])){
23
  switch($_GET['tab']){
 
 
 
24
  case 'cleanup':
25
+ $includefile = 'tools-tabs/cleanup.php';
26
  break;
 
 
27
  }
 
 
28
  }
29
+ include_once($includefile);
30
+ ?>
31
  </div>
32
  </div>
wpf-admin/xml/english.xml CHANGED
@@ -380,4 +380,8 @@
380
  <phrase name="Post is empty"><![CDATA[Post is empty]]></phrase>
381
  <phrase name="removed link"><![CDATA[removed link]]></phrase>
382
  <phrase name="Submit"><![CDATA[Submit]]></phrase>
 
 
 
 
383
  </language>
380
  <phrase name="Post is empty"><![CDATA[Post is empty]]></phrase>
381
  <phrase name="removed link"><![CDATA[removed link]]></phrase>
382
  <phrase name="Submit"><![CDATA[Submit]]></phrase>
383
+ <phrase name="Usergroup"><![CDATA[Usergroup]]></phrase>
384
+ <phrase name="Rating Title"><![CDATA[Rating Title]]></phrase>
385
+ <phrase name="User Title"><![CDATA[User Title]]></phrase>
386
+ <phrase name="Anonymous"><![CDATA[Anonymous]]></phrase>
387
  </language>
wpf-assets/addons/ad-manager/header-off.png CHANGED
Binary file
wpf-assets/addons/cross/header-off.png ADDED
Binary file
wpf-assets/addons/cross/header.png ADDED
Binary file
wpf-includes/class-forums.php CHANGED
@@ -92,9 +92,11 @@ class wpForoForum{
92
  array('%s','%s','%s','%d','%s','%d','%d','%s','%s','%s','%d','%d','%d','%d')
93
  )
94
  ){
 
95
  $this->delete_tree_cache();
 
96
  $this->wpforo->notice->add('Your forum successfully added', 'success');
97
- return $this->wpforo->db->insert_id;
98
  }
99
 
100
  $this->wpforo->notice->add('Can\'t add forum', 'error');
@@ -174,6 +176,7 @@ class wpForoForum{
174
  $this->wpforo->db->query($sql);
175
  }
176
  $this->delete_tree_cache();
 
177
  $this->wpforo->notice->add('Forum successfully updated', 'success');
178
  return $forumid;
179
  }
@@ -198,13 +201,14 @@ class wpForoForum{
198
  // START delete topic posts include first post
199
  if( $topicids = $this->wpforo->db->get_col( "SELECT `topicid` FROM ".$this->wpforo->db->prefix."wpforo_topics WHERE `forumid` IN(". esc_sql($forumids) .")" ) ){
200
  foreach($topicids as $topicid){
201
- $this->wpforo->topic->delete($topicid);
202
  }
203
  }
204
  // END delete topic posts include first post
205
 
206
  if($this->wpforo->db->query( "DELETE FROM ".$this->wpforo->db->prefix."wpforo_forums WHERE `forumid` IN(". esc_sql($forumids) .")" )){
207
  $this->delete_tree_cache();
 
208
  $this->wpforo->notice->add('Your forum successfully deleted', 'success');
209
  return TRUE;
210
  }
@@ -254,6 +258,7 @@ class wpForoForum{
254
 
255
  if($this->wpforo->db->delete( $this->wpforo->db->prefix.'wpforo_forums', array( 'forumid' => $forumid ), array( '%d' ) )){
256
  $this->delete_tree_cache();
 
257
  $this->wpforo->notice->add('Forum is successfully merged', 'success');
258
  return TRUE;
259
  }
@@ -291,6 +296,7 @@ class wpForoForum{
291
  SET `last_topicid` = ".intval($last_topicid).", `last_postid` = ".intval($last_postid).",
292
  `last_userid` = ".intval($last_userid).", `last_post_date` = '".esc_sql($last_post_date)."'
293
  WHERE `forumid` = ".intval($forumid) );
 
294
  }
295
 
296
  public function rebuild_stats($forumid){
@@ -304,8 +310,10 @@ class wpForoForum{
304
  array('forumid' => $forumid),
305
  array('%d', '%d'),
306
  array('%d')
307
- ) ) return true;
308
-
 
 
309
  return false;
310
  }
311
 
@@ -396,10 +404,6 @@ class wpForoForum{
396
  $args = wpforo_parse_args( $args, $default );
397
  if(is_array($args) && !empty($args)){
398
 
399
- if( $cache ){
400
- $object_key = md5( serialize($args) . $this->wpforo->current_user_groupid ); $object_cache = $this->wpforo->cache->get( $object_key ); if(!empty($object_cache)){$items_count = $object_cache['items_count']; return $object_cache['items'];}
401
- }
402
-
403
  extract($args, EXTR_OVERWRITE);
404
 
405
  $include = wpforo_parse_args( $include );
@@ -440,6 +444,8 @@ class wpForoForum{
440
  }
441
  }
442
 
 
 
443
  $forums = $this->wpforo->db->get_results($sql, ARRAY_A);
444
  $forums = apply_filters('wpforo_get_topics', $forums);
445
 
92
  array('%s','%s','%s','%d','%s','%d','%d','%s','%s','%s','%d','%d','%d','%d')
93
  )
94
  ){
95
+ $forumid = $this->wpforo->db->insert_id;
96
  $this->delete_tree_cache();
97
+ wpforo_clean_cache($forumid, 'forum');
98
  $this->wpforo->notice->add('Your forum successfully added', 'success');
99
+ return $forumid;
100
  }
101
 
102
  $this->wpforo->notice->add('Can\'t add forum', 'error');
176
  $this->wpforo->db->query($sql);
177
  }
178
  $this->delete_tree_cache();
179
+ wpforo_clean_cache($forumid, 'forum');
180
  $this->wpforo->notice->add('Forum successfully updated', 'success');
181
  return $forumid;
182
  }
201
  // START delete topic posts include first post
202
  if( $topicids = $this->wpforo->db->get_col( "SELECT `topicid` FROM ".$this->wpforo->db->prefix."wpforo_topics WHERE `forumid` IN(". esc_sql($forumids) .")" ) ){
203
  foreach($topicids as $topicid){
204
+ $this->wpforo->topic->delete($topicid, false);
205
  }
206
  }
207
  // END delete topic posts include first post
208
 
209
  if($this->wpforo->db->query( "DELETE FROM ".$this->wpforo->db->prefix."wpforo_forums WHERE `forumid` IN(". esc_sql($forumids) .")" )){
210
  $this->delete_tree_cache();
211
+ wpforo_clean_cache();
212
  $this->wpforo->notice->add('Your forum successfully deleted', 'success');
213
  return TRUE;
214
  }
258
 
259
  if($this->wpforo->db->delete( $this->wpforo->db->prefix.'wpforo_forums', array( 'forumid' => $forumid ), array( '%d' ) )){
260
  $this->delete_tree_cache();
261
+ wpforo_clean_cache(0, 'forum');
262
  $this->wpforo->notice->add('Forum is successfully merged', 'success');
263
  return TRUE;
264
  }
296
  SET `last_topicid` = ".intval($last_topicid).", `last_postid` = ".intval($last_postid).",
297
  `last_userid` = ".intval($last_userid).", `last_post_date` = '".esc_sql($last_post_date)."'
298
  WHERE `forumid` = ".intval($forumid) );
299
+ wpforo_clean_cache(0, 'forum');
300
  }
301
 
302
  public function rebuild_stats($forumid){
310
  array('forumid' => $forumid),
311
  array('%d', '%d'),
312
  array('%d')
313
+ ) ) {
314
+ wpforo_clean_cache(0, 'forum');
315
+ return true;
316
+ }
317
  return false;
318
  }
319
 
404
  $args = wpforo_parse_args( $args, $default );
405
  if(is_array($args) && !empty($args)){
406
 
 
 
 
 
407
  extract($args, EXTR_OVERWRITE);
408
 
409
  $include = wpforo_parse_args( $include );
444
  }
445
  }
446
 
447
+ if( $cache ){ $object_key = md5( $sql . $this->wpforo->current_user_groupid ); $object_cache = $this->wpforo->cache->get( $object_key ); if(!empty($object_cache)){$items_count = $object_cache['items_count']; return $object_cache['items'];}}
448
+
449
  $forums = $this->wpforo->db->get_results($sql, ARRAY_A);
450
  $forums = apply_filters('wpforo_get_topics', $forums);
451
 
wpf-includes/class-members.php CHANGED
@@ -6,7 +6,7 @@
6
  class wpForoMember{
7
 
8
  private $wpforo;
9
- static $cache = array( 'users' => array(), 'user' => array() );
10
 
11
  function __construct( $wpForo ){
12
  if(!isset($this->wpforo)) $this->wpforo = $wpForo;
@@ -626,7 +626,7 @@ class wpForoMember{
626
  }
627
 
628
  if( $topicids = $this->wpforo->db->get_col( $this->wpforo->db->prepare( "SELECT topicid FROM {$this->wpforo->db->prefix}wpforo_topics WHERE userid = %d", $userid ) ) ){
629
- foreach( $topicids as $topicid ) $this->wpforo->topic->delete($topicid);
630
  }
631
  }else{
632
  $this->wpforo->db->update( $this->wpforo->db->prefix."wpforo_topics", array('userid' => $reassign), array('userid' => $userid) );
@@ -680,6 +680,7 @@ class wpForoMember{
680
  $this->wpforo->db->prefix.'wpforo_profiles', array( 'userid' => $userid ), array( '%d' )
681
  )
682
  ){
 
683
  $this->clear_db_cache();
684
  $this->wpforo->notice->add('User successfully deleted from wpforo', 'success');
685
  return TRUE;
@@ -1194,11 +1195,73 @@ class wpForoMember{
1194
  }
1195
  }
1196
 
1197
- function banned_count(){
1198
  $count = $this->wpforo->db->get_var("SELECT count(*) FROM `".$this->wpforo->db->prefix."wpforo_profiles` WHERE `status` = 'banned' " );
1199
  return $count;
1200
  }
1201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1202
  }
1203
 
1204
  ?>
6
  class wpForoMember{
7
 
8
  private $wpforo;
9
+ static $cache = array( 'users' => array(), 'user' => array(), 'guest' => array() );
10
 
11
  function __construct( $wpForo ){
12
  if(!isset($this->wpforo)) $this->wpforo = $wpForo;
626
  }
627
 
628
  if( $topicids = $this->wpforo->db->get_col( $this->wpforo->db->prepare( "SELECT topicid FROM {$this->wpforo->db->prefix}wpforo_topics WHERE userid = %d", $userid ) ) ){
629
+ foreach( $topicids as $topicid ) $this->wpforo->topic->delete($topicid, false);
630
  }
631
  }else{
632
  $this->wpforo->db->update( $this->wpforo->db->prefix."wpforo_topics", array('userid' => $reassign), array('userid' => $userid) );
680
  $this->wpforo->db->prefix.'wpforo_profiles', array( 'userid' => $userid ), array( '%d' )
681
  )
682
  ){
683
+ wpforo_clean_cache();
684
  $this->clear_db_cache();
685
  $this->wpforo->notice->add('User successfully deleted from wpforo', 'success');
686
  return TRUE;
1195
  }
1196
  }
1197
 
1198
+ public function banned_count(){
1199
  $count = $this->wpforo->db->get_var("SELECT count(*) FROM `".$this->wpforo->db->prefix."wpforo_profiles` WHERE `status` = 'banned' " );
1200
  return $count;
1201
  }
1202
 
1203
+ public function get_guest( $args = array() ){
1204
+
1205
+ $cache = $this->wpforo->cache->on('memory_cashe');
1206
+
1207
+ if( !isset($args['name']) || $args['name'] == '' ) $args['name'] = wpforo_phrase('Anonymous', false);
1208
+ if( !isset($args['email']) || $args['email'] == '' ) $args['email'] = 'anonymous@example.com';
1209
+
1210
+ $args['name'] = strip_tags($args['name']);
1211
+ $args['email'] = strip_tags($args['email']);
1212
+ $args['posts'] = 0;
1213
+ $args['user_registered'] = 0;
1214
+
1215
+ if(isset($args['email'])){
1216
+ if( $cache && isset(self::$cache['guest'][$args['email']]) ){
1217
+ return self::$cache['guest'][$args['email']];
1218
+ }
1219
+ }
1220
+
1221
+ if( $args['email'] ){
1222
+ $post_args = array( 'email' => $args['email'], 'orderby' => 'created', 'order' => 'ASC' );
1223
+ $posts = $this->wpforo->post->get_posts( $post_args );
1224
+ if( !empty($posts) ){
1225
+ $args['posts'] = count($posts);
1226
+ if( isset($posts[0]['created']) || $posts[0]['created'] ) $args['user_registered'] = $posts[0]['created'];
1227
+ }
1228
+ }
1229
+
1230
+ $member = array( 'ID' => 0,
1231
+ 'userid' => 0,
1232
+ 'user_login' => $args['name'],
1233
+ 'user_pass' => '',
1234
+ 'user_nicename' => sanitize_text_field($args['name']),
1235
+ 'user_email' => $args['email'],
1236
+ 'user_url' => '',
1237
+ 'user_registered' => $args['user_registered'],
1238
+ 'user_activation_key' => '',
1239
+ 'user_status' => 0,
1240
+ 'display_name' => $args['name'],
1241
+ 'title' => '',
1242
+ 'username' => $args['name'],
1243
+ 'groupid' => 4,
1244
+ 'posts' => $args['posts'], 'questions' => 0, 'answers' => 0, 'comments' => 0, 'site' => '', 'icq' => '', 'aim' => '', 'yahoo' => '', 'msn' => '', 'facebook' => '', 'twitter' => '', 'gtalk' => '', 'skype' => '', 'avatar' => '', 'signature' => '', 'about' => '', 'occupation' => '', 'location' => '', 'last_login' => '', 'rank' => 0, 'like' => 0,
1245
+ 'status' => 'active',
1246
+ 'timezone' => '',
1247
+ 'name' => $args['name'],
1248
+ 'cans' => '',
1249
+ 'description' => '',
1250
+ 'groupname' => wpforo_phrase('Guest', false),
1251
+ 'profile_url' => '',
1252
+ 'stat' => array( 'points' => 0, 'rating' => 0, 'rating_procent' => 0, 'color' => '', 'badge' => '', 'posts' => $args['posts'], 'topics' => 0, 'questions' => 0, 'answers' => 0, 'question_comments' => 0, 'likes' => 0, 'liked' => 0, 'title' => '' ),
1253
+ );
1254
+
1255
+ if( $cache && $args['email'] ){
1256
+ return self::$cache['guest'][$args['email']] = $member;
1257
+ }else{
1258
+ return $member;
1259
+ }
1260
+
1261
+ }
1262
+
1263
+
1264
+
1265
  }
1266
 
1267
  ?>
wpf-includes/class-posts.php CHANGED
@@ -17,9 +17,15 @@ class wpForoPost{
17
 
18
  public function add( $args = array() ){
19
 
 
 
 
20
  if( empty($args) && empty($_REQUEST['post']) ){ $this->wpforo->notice->add('Reply request error', 'error'); return FALSE; }
21
  if( empty($args) && !empty($_REQUEST['post']) ){ $args = $_REQUEST['post']; $args['body'] = $_REQUEST['postbody']; }
22
  if( !isset($args['body']) || !$args['body'] ){ $this->wpforo->notice->add('Post is empty', 'error'); return FALSE; }
 
 
 
23
 
24
  extract($args, EXTR_OVERWRITE);
25
 
@@ -32,7 +38,7 @@ class wpForoPost{
32
  return FALSE;
33
  }
34
 
35
- if( !$this->wpforo->perm->forum_can('cr', $topic['forumid']) ){
36
  $this->wpforo->notice->add('You haven\'t permission to create post into this forum', 'error');
37
  return FALSE;
38
  }
@@ -61,6 +67,8 @@ class wpForoPost{
61
  if(isset($userid)) $userid = intval($userid);
62
  if(isset($body)) $body = wpforo_kses(trim($body), 'post');
63
  if(isset($status)) $status = intval($status);
 
 
64
 
65
  do_action( 'wpforo_before_add_post', $post );
66
 
@@ -77,8 +85,10 @@ class wpForoPost{
77
  'created' => $created,
78
  'modified' => $created,
79
  'status' => (isset($status) ? $status : 0),
 
 
80
  ),
81
- array('%d','%d','%d','%d','%s','%s','%s','%s', '%d')
82
  )
83
  ){
84
  $postid = $this->wpforo->db->insert_id;
@@ -102,6 +112,7 @@ class wpForoPost{
102
 
103
  do_action( 'wpforo_after_add_post', $post, $topic );
104
 
 
105
  $this->wpforo->member->reset($userid);
106
  $this->wpforo->notice->add('You successfully replied', 'success');
107
  return $postid;
@@ -113,6 +124,9 @@ class wpForoPost{
113
 
114
  public function edit( $args = array() ){
115
 
 
 
 
116
  if( empty($args) && (!isset($_REQUEST['post']) || empty($_REQUEST['post'])) ) return FALSE;
117
  if( empty($args) && !empty($_REQUEST['post']) ){ $args = $_REQUEST['post']; $args['body'] = $_REQUEST['postbody']; }
118
 
@@ -127,16 +141,22 @@ class wpForoPost{
127
 
128
  $args['userid'] = $post['userid'];
129
  $args['status'] = $post['status'];
 
 
130
 
131
  $args = apply_filters('wpforo_edit_post_data_filter', $args);
132
  if(empty($args)) return FALSE;
133
 
134
  extract($args, EXTR_OVERWRITE);
135
 
136
- $diff = current_time( 'timestamp', 1 ) - strtotime($post['created']);
137
- if( !($this->wpforo->perm->forum_can('er', $post['forumid']) || ($this->wpforo->current_userid == $post['userid'] && $this->wpforo->perm->forum_can('eor', $post['forumid']) && $diff < $this->wpforo->post_options['eor_durr'])) ){
138
- $this->wpforo->notice->add('You haven\'t permission to edit post from this forum', 'error');
139
- return FALSE;
 
 
 
 
140
  }
141
 
142
  $title = (isset($title) ? wpforo_text( trim($title), 250, false ) : '');
@@ -151,22 +171,33 @@ class wpForoPost{
151
  if(isset($userid)) $userid = intval($userid);
152
  if(isset($body)) $body = wpforo_kses(trim($body), 'post');
153
  if(isset($status)) $status = intval($status);
 
 
 
 
 
 
 
 
154
 
155
  if( FALSE !== $this->wpforo->db->update(
156
  $this->wpforo->db->prefix."wpforo_posts",
157
  array(
158
- 'title' => ( isset($title) ? stripslashes($title) : stripslashes($post['title']) ),
159
- 'body' => ( (isset($body) && $body) ? stripslashes($body) : stripslashes($post['body']) ),
160
  'modified' => current_time( 'mysql', 1 ),
161
- 'status' => ( isset($status) ? $status : intval($post['status']) ),
 
 
162
  ),
163
  array('postid' => $postid),
164
- array('%s','%s','%s','%d'),
165
  array('%d')
166
  )
167
  ){
168
- do_action( 'wpforo_after_edit_post', array( 'postid' => $postid, 'topicid' => $topicid, 'title' => $title, 'body' => $body, 'status' => $status ) );
169
 
 
170
  $this->wpforo->notice->add('This post successfully edited', 'success');
171
  return $postid;
172
  }
@@ -186,7 +217,7 @@ class wpForoPost{
186
  * @return bool
187
  */
188
 
189
- function delete($postid){
190
  $postid = intval($postid);
191
 
192
  if( !$post = $this->get_post($postid) ) return true;
@@ -241,6 +272,7 @@ class wpForoPost{
241
  do_action('wpforo_after_delete_post', $post);
242
 
243
  if( $post['is_first_post'] ) return $this->wpforo->topic->delete($post['topicid']);
 
244
  return TRUE;
245
  }
246
 
@@ -314,7 +346,8 @@ class wpForoPost{
314
  'order' => 'ASC', // ASC DESC
315
  'offset' => NULL, // this use when you give row_count
316
  'row_count' => NULL, // 4 or 1 ...
317
- 'status' => NULL, // 0 or 1 ...
 
318
 
319
  'check_private' => FALSE
320
  );
@@ -323,10 +356,6 @@ class wpForoPost{
323
 
324
  if(is_array($args) && !empty($args)){
325
 
326
- if( $cache ){
327
- $object_key = md5( serialize($args) . $this->wpforo->current_user_groupid ); $object_cache = $this->wpforo->cache->get($object_key); if(!empty($object_cache)){$items_count = $object_cache['items_count']; return $object_cache['items'];}
328
- }
329
-
330
  extract($args, EXTR_OVERWRITE);
331
 
332
  if( $row_count === 0 ) return array();
@@ -344,6 +373,7 @@ class wpForoPost{
344
  if($parentid != -1) $wheres[] = $table_as_prefix . "`parentid` = " . intval($parentid);
345
  if(!is_null($userid)) $wheres[] = $table_as_prefix . "`userid` = " . intval($userid);
346
  if(!is_null($status)) $wheres[] = $table_as_prefix . "`status` = " . intval($status);
 
347
 
348
  if( isset($forumid) && $forumid ){
349
  if( $this->wpforo->perm->forum_can('au', $forumid) ){
@@ -387,6 +417,8 @@ class wpForoPost{
387
  }
388
  }
389
 
 
 
390
  $posts = $this->wpforo->db->get_results($sql, ARRAY_A);
391
  $posts = apply_filters('wpforo_get_posts', $posts);
392
 
@@ -416,6 +448,29 @@ class wpForoPost{
416
  }
417
  }
418
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
419
 
420
  function search( $args = array(), &$items_count = 0 ){
421
  if(!is_array($args)) $args = array('needle' => $args);
@@ -651,7 +706,7 @@ class wpForoPost{
651
  *
652
  * @return string $url
653
  */
654
- function get_post_url( $arg ){
655
 
656
  $position = array();
657
 
@@ -659,19 +714,21 @@ class wpForoPost{
659
  $postid = intval($arg);
660
  $post = $this->get_post($postid);
661
  }
662
- else{
663
  $post = $arg;
664
  $postid = $post['postid'];
665
  }
666
- if( is_array($post) && !empty($post) ){
 
667
  $url = $this->get_forumslug_byid($postid) . '/' . $this->get_topicslug_byid($postid);
668
  if( $post['topicid'] ){
669
  if( !$position ) $position = $this->wpforo->db->get_var("SELECT COUNT(`postid`) FROM `".$this->wpforo->db->prefix."wpforo_posts` WHERE `topicid` = ".intval($post['topicid'])." AND `postid` <= " . ($post['parentid'] ? intval($post['parentid']) : intval($postid) ) . " ORDER BY `postid`");
670
- if( $position <= $this->wpforo->post_options['posts_per_page'] ) return wpforo_home_url($url) . "#post-" . intval($postid);
671
  $paged = ceil( $position/$this->wpforo->post_options['posts_per_page'] );
672
- return wpforo_home_url( $url . "/paged/".$paged ) ."#post-" . intval($postid);
673
  }
674
  }
 
675
  return wpforo_home_url();
676
  }
677
 
17
 
18
  public function add( $args = array() ){
19
 
20
+ //This variable will be based on according CAN of guest usergroup once Guest Posing is ready
21
+ $guestposting = false;
22
+
23
  if( empty($args) && empty($_REQUEST['post']) ){ $this->wpforo->notice->add('Reply request error', 'error'); return FALSE; }
24
  if( empty($args) && !empty($_REQUEST['post']) ){ $args = $_REQUEST['post']; $args['body'] = $_REQUEST['postbody']; }
25
  if( !isset($args['body']) || !$args['body'] ){ $this->wpforo->notice->add('Post is empty', 'error'); return FALSE; }
26
+ $args['name'] = (isset($args['name']) ? $args['name'] : '' );
27
+ $args['email'] = (isset($args['email']) ? $args['email'] : '' );
28
+ if( isset($args['userid']) && $args['userid'] == 0 && $args['name'] && $args['email'] ) $guestposting = true;
29
 
30
  extract($args, EXTR_OVERWRITE);
31
 
38
  return FALSE;
39
  }
40
 
41
+ if( !$guestposting && !$this->wpforo->perm->forum_can('cr', $topic['forumid']) ){
42
  $this->wpforo->notice->add('You haven\'t permission to create post into this forum', 'error');
43
  return FALSE;
44
  }
67
  if(isset($userid)) $userid = intval($userid);
68
  if(isset($body)) $body = wpforo_kses(trim($body), 'post');
69
  if(isset($status)) $status = intval($status);
70
+ if(isset($name)) $name = strip_tags(trim($name));
71
+ if(isset($email)) $email = strip_tags(trim($email));
72
 
73
  do_action( 'wpforo_before_add_post', $post );
74
 
85
  'created' => $created,
86
  'modified' => $created,
87
  'status' => (isset($status) ? $status : 0),
88
+ 'name' => $name,
89
+ 'email' => $email
90
  ),
91
+ array('%d','%d','%d','%d','%s','%s','%s','%s','%d','%s','%s')
92
  )
93
  ){
94
  $postid = $this->wpforo->db->insert_id;
112
 
113
  do_action( 'wpforo_after_add_post', $post, $topic );
114
 
115
+ wpforo_clean_cache($postid, 'post');
116
  $this->wpforo->member->reset($userid);
117
  $this->wpforo->notice->add('You successfully replied', 'success');
118
  return $postid;
124
 
125
  public function edit( $args = array() ){
126
 
127
+ //This variable will be based on according CAN of guest usergroup once Guest Posing is ready
128
+ $guestposting = false;
129
+
130
  if( empty($args) && (!isset($_REQUEST['post']) || empty($_REQUEST['post'])) ) return FALSE;
131
  if( empty($args) && !empty($_REQUEST['post']) ){ $args = $_REQUEST['post']; $args['body'] = $_REQUEST['postbody']; }
132
 
141
 
142
  $args['userid'] = $post['userid'];
143
  $args['status'] = $post['status'];
144
+
145
+ if( isset($args['userid']) && $args['userid'] == 0 && isset($args['name']) && isset($args['email']) ) $guestposting = true;
146
 
147
  $args = apply_filters('wpforo_edit_post_data_filter', $args);
148
  if(empty($args)) return FALSE;
149
 
150
  extract($args, EXTR_OVERWRITE);
151
 
152
+ if( !$guestposting ){
153
+ $diff = current_time( 'timestamp', 1 ) - strtotime($post['created']);
154
+ if( !($this->wpforo->perm->forum_can('er', $post['forumid']) ||
155
+ ($this->wpforo->current_userid == $post['userid'] && $this->wpforo->perm->forum_can('eor', $post['forumid']) &&
156
+ $diff < $this->wpforo->post_options['eor_durr'])) ){
157
+ $this->wpforo->notice->add('You haven\'t permission to edit post from this forum', 'error');
158
+ return FALSE;
159
+ }
160
  }
161
 
162
  $title = (isset($title) ? wpforo_text( trim($title), 250, false ) : '');
171
  if(isset($userid)) $userid = intval($userid);
172
  if(isset($body)) $body = wpforo_kses(trim($body), 'post');
173
  if(isset($status)) $status = intval($status);
174
+ if(isset($name)) $name = strip_tags(trim($name));
175
+ if(isset($email)) $email = strip_tags(trim($email));
176
+
177
+ $title = ( isset($title) ? stripslashes($title) : stripslashes($post['title']) );
178
+ $body = ( (isset($body) && $body) ? stripslashes($body) : stripslashes($post['body']) );
179
+ $status = ( isset($status) ? $status : intval($post['status']) );
180
+ $name = ( isset($name) ? stripslashes($name) : stripslashes($post['name']) );
181
+ $email = ( isset($email) ? stripslashes($email) : stripslashes($post['email']) );
182
 
183
  if( FALSE !== $this->wpforo->db->update(
184
  $this->wpforo->db->prefix."wpforo_posts",
185
  array(
186
+ 'title' => $title,
187
+ 'body' => $body,
188
  'modified' => current_time( 'mysql', 1 ),
189
+ 'status' => $status,
190
+ 'name' => $name,
191
+ 'email' => $email,
192
  ),
193
  array('postid' => $postid),
194
+ array('%s','%s','%s','%d','%s','%s'),
195
  array('%d')
196
  )
197
  ){
198
+ do_action( 'wpforo_after_edit_post', array( 'postid' => $postid, 'topicid' => $topicid, 'title' => $title, 'body' => $body, 'status' => $status, 'name' => $name, 'email' => $email) );
199
 
200
+ wpforo_clean_cache($postid, 'post');
201
  $this->wpforo->notice->add('This post successfully edited', 'success');
202
  return $postid;
203
  }
217
  * @return bool
218
  */
219
 
220
+ function delete($postid, $delete_cache = true){
221
  $postid = intval($postid);
222
 
223
  if( !$post = $this->get_post($postid) ) return true;
272
  do_action('wpforo_after_delete_post', $post);
273
 
274
  if( $post['is_first_post'] ) return $this->wpforo->topic->delete($post['topicid']);
275
+ if( $delete_cache ) wpforo_clean_cache(0, 'post');
276
  return TRUE;
277
  }
278
 
346
  'order' => 'ASC', // ASC DESC
347
  'offset' => NULL, // this use when you give row_count
348
  'row_count' => NULL, // 4 or 1 ...
349
+ 'status' => NULL, // 0 or 1 ...
350
+ 'email' => NULL, // example@example.com ...
351
 
352
  'check_private' => FALSE
353
  );
356
 
357
  if(is_array($args) && !empty($args)){
358
 
 
 
 
 
359
  extract($args, EXTR_OVERWRITE);
360
 
361
  if( $row_count === 0 ) return array();
373
  if($parentid != -1) $wheres[] = $table_as_prefix . "`parentid` = " . intval($parentid);
374
  if(!is_null($userid)) $wheres[] = $table_as_prefix . "`userid` = " . intval($userid);
375
  if(!is_null($status)) $wheres[] = $table_as_prefix . "`status` = " . intval($status);
376
+ if(!is_null($email)) $wheres[] = $table_as_prefix . "`email` = '" . esc_sql($email) . "' ";
377
 
378
  if( isset($forumid) && $forumid ){
379
  if( $this->wpforo->perm->forum_can('au', $forumid) ){
417
  }
418
  }
419
 
420
+ if( $cache ){ $object_key = md5( $sql . $this->wpforo->current_user_groupid ); $object_cache = $this->wpforo->cache->get($object_key); if(!empty($object_cache)){ $items_count = $object_cache['items_count']; return $object_cache['items']; }}
421
+
422
  $posts = $this->wpforo->db->get_results($sql, ARRAY_A);
423
  $posts = apply_filters('wpforo_get_posts', $posts);
424
 
448
  }
449
  }
450
 
451
+ function get_posts_filtered( $args = array() ){
452
+ $posts = array();
453
+ $posts = $this->get_posts( $args );
454
+ if( !empty($posts) ){
455
+ foreach($posts as $key => $post){
456
+ if( isset($post['forumid']) && !$this->wpforo->perm->forum_can('vf', $post['forumid']) ){
457
+ unset($posts[$key]);
458
+ }
459
+ if( isset($posts[$key]) && isset($post['forumid']) && isset($post['private']) && $post['private'] && !wpforo_is_owner($post['userid']) ){
460
+ if( !$this->wpforo->perm->forum_can('vp', $post['forumid']) ){
461
+ unset($posts[$key]);
462
+ }
463
+ }
464
+ if( isset($posts[$key]) && isset($post['forumid']) && isset($post['status']) && $post['status'] && !wpforo_is_owner($post['userid']) ){
465
+ if( !$this->wpforo->perm->forum_can('au', $post['forumid']) ){
466
+ unset($posts[$key]);
467
+ }
468
+ }
469
+ }
470
+ }
471
+ return $posts;
472
+ }
473
+
474
 
475
  function search( $args = array(), &$items_count = 0 ){
476
  if(!is_array($args)) $args = array('needle' => $args);
706
  *
707
  * @return string $url
708
  */
709
+ function get_post_url( $arg, $absolute = true ){
710
 
711
  $position = array();
712
 
714
  $postid = intval($arg);
715
  $post = $this->get_post($postid);
716
  }
717
+ elseif( !empty($arg) && isset($arg['postid']) ){
718
  $post = $arg;
719
  $postid = $post['postid'];
720
  }
721
+
722
+ if( is_array($post) && !empty($post) && $postid ){
723
  $url = $this->get_forumslug_byid($postid) . '/' . $this->get_topicslug_byid($postid);
724
  if( $post['topicid'] ){
725
  if( !$position ) $position = $this->wpforo->db->get_var("SELECT COUNT(`postid`) FROM `".$this->wpforo->db->prefix."wpforo_posts` WHERE `topicid` = ".intval($post['topicid'])." AND `postid` <= " . ($post['parentid'] ? intval($post['parentid']) : intval($postid) ) . " ORDER BY `postid`");
726
+ if( $position <= $this->wpforo->post_options['posts_per_page'] ) return wpforo_home_url($url, false, $absolute ) . "#post-" . intval($postid);
727
  $paged = ceil( $position/$this->wpforo->post_options['posts_per_page'] );
728
+ return wpforo_home_url( $url . "/paged/" . $paged, false, $absolute ) ."#post-" . intval($postid);
729
  }
730
  }
731
+
732
  return wpforo_home_url();
733
  }
734
 
wpf-includes/class-template.php CHANGED
@@ -261,8 +261,8 @@ class wpForoTemplate{
261
 
262
  $post = wpforo_post($postid);
263
 
264
- $l_count = $post['likes_count'];
265
- $l_usernames = $post['likers_usernames'];
266
  $return = '';
267
 
268
  if( $l_count ){
@@ -396,7 +396,10 @@ class wpForoTemplate{
396
  break;
397
  case 'edit':
398
  if($is_closed) break;
399
- if( !$this->wpforo->member->current_user_is_new() ){
 
 
 
400
  $diff = current_time( 'timestamp', 1 ) - strtotime($post['created']);
401
  if( $this->wpforo->perm->forum_can( ($is_topic ? 'et' : 'er'), $forumid ) || ($this->wpforo->current_userid == $post['userid'] && $this->wpforo->perm->forum_can( ($is_topic ? 'eot' : 'eor' ), $forumid ) && $diff < $this->wpforo->post_options[($is_topic ? 'eot' : 'eor' ).'_durr'] ) ) {
402
  $a = ( $is_topic ) ? 'wpfedittopicpid' : '';
@@ -406,7 +409,10 @@ class wpForoTemplate{
406
  }
407
  break;
408
  case 'delete':
409
- if( !$this->wpforo->member->current_user_is_new() ){
 
 
 
410
  $diff = current_time( 'timestamp', 1 ) - strtotime($post['created']);
411
  if( $this->wpforo->perm->forum_can( ($is_topic ? 'dt' : 'dr' ), $forumid ) || ($this->wpforo->current_userid == $post['userid'] && $this->wpforo->perm->forum_can( ($is_topic ? 'dot' : 'dor' ), $forumid ) && $diff < $this->wpforo->post_options[($is_topic ? 'dot' : 'dor' ).'_durr']) ){
412
  $a = ( $is_topic ) ? 'wpftopicdelete' : 'wpfreplydelete';
261
 
262
  $post = wpforo_post($postid);
263
 
264
+ $l_count = wpforo_post($postid, 'likes_count');
265
+ $l_usernames = wpforo_post($postid, 'likers_usernames');
266
  $return = '';
267
 
268
  if( $l_count ){
396
  break;
397
  case 'edit':
398
  if($is_closed) break;
399
+ if( $this->wpforo->member->current_user_is_new() && $post['status'] ){
400
+ //New registered user's unapproved topic/post | No Edit button.
401
+ }
402
+ else{
403
  $diff = current_time( 'timestamp', 1 ) - strtotime($post['created']);
404
  if( $this->wpforo->perm->forum_can( ($is_topic ? 'et' : 'er'), $forumid ) || ($this->wpforo->current_userid == $post['userid'] && $this->wpforo->perm->forum_can( ($is_topic ? 'eot' : 'eor' ), $forumid ) && $diff < $this->wpforo->post_options[($is_topic ? 'eot' : 'eor' ).'_durr'] ) ) {
405
  $a = ( $is_topic ) ? 'wpfedittopicpid' : '';
409
  }
410
  break;
411
  case 'delete':
412
+ if( $this->wpforo->member->current_user_is_new() && $post['status'] ){
413
+ //New registered user's unapproved topic/post | No Delete button.
414
+ }
415
+ else{
416
  $diff = current_time( 'timestamp', 1 ) - strtotime($post['created']);
417
  if( $this->wpforo->perm->forum_can( ($is_topic ? 'dt' : 'dr' ), $forumid ) || ($this->wpforo->current_userid == $post['userid'] && $this->wpforo->perm->forum_can( ($is_topic ? 'dot' : 'dor' ), $forumid ) && $diff < $this->wpforo->post_options[($is_topic ? 'dot' : 'dor' ).'_durr']) ){
418
  $a = ( $is_topic ) ? 'wpftopicdelete' : 'wpfreplydelete';
wpf-includes/class-topics.php CHANGED
@@ -58,6 +58,8 @@ class wpForoTopic{
58
  $args['slug'] = $this->unique_slug($args['slug']);
59
  $args['created'] = (isset($args['created']) ? sanitize_text_field($args['created']) : current_time( 'mysql', 1 ) );
60
  $args['userid'] = (isset($args['userid']) ? intval($args['userid']) : $this->wpforo->current_userid );
 
 
61
 
62
  $args = apply_filters('wpforo_add_topic_data_filter', $args);
63
 
@@ -75,6 +77,8 @@ class wpForoTopic{
75
  if(isset($private)) $private = intval($private);
76
  if(isset($meta_key)) $meta_key = sanitize_text_field($meta_key);
77
  if(isset($meta_desc)) $meta_desc = sanitize_text_field($meta_desc);
 
 
78
  if(isset($body)) $body = wpforo_kses(trim($body), 'post');
79
  $meta_key = (isset($meta_key) ? $meta_key : '');
80
  $meta_desc = (isset($meta_desc) ? $meta_desc : '');
@@ -100,9 +104,11 @@ class wpForoTopic{
100
  'posts' => 1,
101
  'meta_key' => $meta_key,
102
  'meta_desc' => $meta_desc,
103
- 'has_attach'=> $has_attach
 
 
104
  ),
105
- array('%s','%s','%d','%d','%d','%d','%d','%s','%s','%d','%d','%d','%s','%s','%d')
106
  )
107
  ){
108
  $topicid = $this->wpforo->db->insert_id;
@@ -119,8 +125,10 @@ class wpForoTopic{
119
  'modified' => $created,
120
  'is_first_post' => 1,
121
  'status' => (isset($status) ? $status : 0),
 
 
122
  ),
123
- array('%d','%d','%d','%s','%s','%s','%s','%d','%d')
124
  )
125
  ){
126
  $first_postid = $this->wpforo->db->insert_id;
@@ -144,6 +152,7 @@ class wpForoTopic{
144
 
145
  do_action( 'wpforo_after_add_topic', $args );
146
 
 
147
  $this->wpforo->member->reset($userid);
148
  $this->wpforo->notice->add('Your topic successfully added', 'success');
149
  return $topicid;
@@ -189,6 +198,8 @@ class wpForoTopic{
189
  if(isset($meta_key)) $meta_key = sanitize_text_field($meta_key);
190
  if(isset($meta_desc)) $meta_desc = sanitize_text_field($meta_desc);
191
  if(isset($has_attach)) $has_attach = intval($has_attach);
 
 
192
  if(isset($body)) $body = wpforo_kses(trim($body), 'post');
193
 
194
 
@@ -210,17 +221,28 @@ class wpForoTopic{
210
  return FALSE;
211
  }
212
 
 
 
 
 
 
 
 
 
 
213
  $t_update = $this->wpforo->db->update(
214
  $this->wpforo->db->prefix."wpforo_topics",
215
  array(
216
- 'title' => ( isset($title) ? stripslashes($title) : stripslashes($topic['title']) ),
217
- 'type' => ( isset($type) ? $type : intval($topic['type']) ),
218
- 'status' => ( isset($status) ? $status : intval($topic['status']) ),
219
- 'private' => ( isset($private) ? $private : intval($topic['private']) ),
220
- 'has_attach'=> ( isset($body) ? (strpos($body, '[attach]') !== FALSE ? 1 : 0) : $topic['has_attach'] )
 
 
221
  ),
222
  array( 'topicid' => intval($topicid) ),
223
- array( '%s','%d','%d','%d','%d' ),
224
  array( '%d' )
225
  );
226
 
@@ -235,23 +257,28 @@ class wpForoTopic{
235
  return FALSE;
236
  }
237
 
 
 
238
  $p_update = $this->wpforo->db->update(
239
  $this->wpforo->db->prefix."wpforo_posts",
240
  array(
241
- 'title' => ( isset($title) ? stripslashes($title) : stripslashes($post['title']) ),
242
- 'body' => ( (isset($body) && $body) ? stripslashes($body) : stripslashes($post['body']) ),
243
  'modified' => current_time( 'mysql', 1 ),
244
- 'status' => ( isset($status) ? $status : intval($topic['status']) ),
 
 
245
  ),
246
  array( 'postid' => intval($topic['first_postid']) ),
247
- array( '%s', '%s', '%s', '%d' ),
248
  array( '%d' )
249
  );
250
 
251
  if($t_update !== FALSE && $p_update !== FALSE){
252
 
253
- do_action( 'wpforo_after_edit_topic', array( 'postid' => $topic['first_postid'], 'topicid' => $topicid, 'title' => $title, 'body' => $body, 'status' => $status ) );
254
 
 
255
  $this->wpforo->notice->add('Topic successfully updated', 'success');
256
  return $topicid;
257
  }
@@ -304,7 +331,7 @@ class wpForoTopic{
304
  *
305
  * @return bool
306
  */
307
- function delete($topicid = 0){
308
  $topicid = intval($topicid);
309
  if(!$topicid && isset( $_REQUEST['id'] ) ) $topicid = intval($_REQUEST['id']);
310
 
@@ -336,9 +363,9 @@ class wpForoTopic{
336
  )){
337
  foreach ($postids as $postid) {
338
  if( $postid == $topic['first_postid'] ){
339
- return $this->wpforo->post->delete($postid);
340
  }else{
341
- $this->wpforo->post->delete($postid);
342
  }
343
  }
344
  }
@@ -359,12 +386,14 @@ class wpForoTopic{
359
  SET $questions
360
  WHERE `userid` = " . intval($topic['userid'])
361
  );
 
 
 
 
362
  $this->wpforo->member->reset($topic['userid']);
363
  $this->wpforo->forum->rebuild_last_infos($forumid);
 
364
  $this->wpforo->notice->add('This topic successfully deleted', 'success');
365
-
366
- do_action( 'wpforo_after_delete_topic', $topic );
367
-
368
  return TRUE;
369
  }
370
  }
@@ -495,10 +524,6 @@ class wpForoTopic{
495
  $args = wpforo_parse_args( $args, $default );
496
  if(is_array($args) && !empty($args)){
497
 
498
- if( $cache ){
499
- $object_key = md5( serialize($args) . $this->wpforo->current_user_groupid ); $object_cache = $this->wpforo->cache->get( $object_key ); if( !empty($object_cache) ){$items_count = $object_cache['items_count']; return $object_cache['items']; }
500
- }
501
-
502
  extract($args, EXTR_OVERWRITE);
503
 
504
  if( $row_count === 0 ) return array();
@@ -564,6 +589,8 @@ class wpForoTopic{
564
  }
565
  }
566
 
 
 
567
  $topics = $this->wpforo->db->get_results($sql, ARRAY_A);
568
  $topics = apply_filters('wpforo_get_topics', $topics);
569
 
@@ -592,6 +619,30 @@ class wpForoTopic{
592
  return $topics;
593
  }
594
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
595
  /**
596
  *
597
  * Search in your chosen column and return array with needles
@@ -720,6 +771,7 @@ class wpForoTopic{
720
 
721
  $this->wpforo->forum->rebuild_last_infos($topic['forumid']);
722
 
 
723
  $this->wpforo->notice->add('Topic successfully moved', 'success');
724
  return $topicid;
725
  }
58
  $args['slug'] = $this->unique_slug($args['slug']);
59
  $args['created'] = (isset($args['created']) ? sanitize_text_field($args['created']) : current_time( 'mysql', 1 ) );
60
  $args['userid'] = (isset($args['userid']) ? intval($args['userid']) : $this->wpforo->current_userid );
61
+ $args['name'] = (isset($args['name']) ? $args['name'] : '' );
62
+ $args['email'] = (isset($args['email']) ? $args['email'] : '' );
63
 
64
  $args = apply_filters('wpforo_add_topic_data_filter', $args);
65
 
77
  if(isset($private)) $private = intval($private);
78
  if(isset($meta_key)) $meta_key = sanitize_text_field($meta_key);
79
  if(isset($meta_desc)) $meta_desc = sanitize_text_field($meta_desc);
80
+ if(isset($name)) $name = strip_tags(trim($name));
81
+ if(isset($email)) $email = strip_tags(trim($email));
82
  if(isset($body)) $body = wpforo_kses(trim($body), 'post');
83
  $meta_key = (isset($meta_key) ? $meta_key : '');
84
  $meta_desc = (isset($meta_desc) ? $meta_desc : '');
104
  'posts' => 1,
105
  'meta_key' => $meta_key,
106
  'meta_desc' => $meta_desc,
107
+ 'has_attach'=> $has_attach,
108
+ 'name' => $name,
109
+ 'email' => $email
110
  ),
111
+ array('%s','%s','%d','%d','%d','%d','%d','%s','%s','%d','%d','%d','%s','%s','%d','%s','%s')
112
  )
113
  ){
114
  $topicid = $this->wpforo->db->insert_id;
125
  'modified' => $created,
126
  'is_first_post' => 1,
127
  'status' => (isset($status) ? $status : 0),
128
+ 'name' => $name,
129
+ 'email' => $email
130
  ),
131
+ array('%d','%d','%d','%s','%s','%s','%s','%d','%d','%s','%s')
132
  )
133
  ){
134
  $first_postid = $this->wpforo->db->insert_id;
152
 
153
  do_action( 'wpforo_after_add_topic', $args );
154
 
155
+ wpforo_clean_cache($topicid, 'topic');
156
  $this->wpforo->member->reset($userid);
157
  $this->wpforo->notice->add('Your topic successfully added', 'success');
158
  return $topicid;
198
  if(isset($meta_key)) $meta_key = sanitize_text_field($meta_key);
199
  if(isset($meta_desc)) $meta_desc = sanitize_text_field($meta_desc);
200
  if(isset($has_attach)) $has_attach = intval($has_attach);
201
+ if(isset($name)) $name = strip_tags(trim($name));
202
+ if(isset($email)) $email = strip_tags(trim($email));
203
  if(isset($body)) $body = wpforo_kses(trim($body), 'post');
204
 
205
 
221
  return FALSE;
222
  }
223
 
224
+
225
+ $title = ( isset($title) ? stripslashes($title) : stripslashes($topic['title']) );
226
+ $type = ( isset($type) ? $type : intval($topic['type']) );
227
+ $status = ( isset($status) ? $status : intval($topic['status']) );
228
+ $private = ( isset($private) ? $private : intval($topic['private']) );
229
+ $has_attach = ( isset($body) ? (strpos($body, '[attach]') !== FALSE ? 1 : 0) : $topic['has_attach'] );
230
+ $name = ( isset($name) ? stripslashes($name) : stripslashes($topic['name']) );
231
+ $email = ( isset($email) ? stripslashes($email) : stripslashes($topic['email']) );
232
+
233
  $t_update = $this->wpforo->db->update(
234
  $this->wpforo->db->prefix."wpforo_topics",
235
  array(
236
+ 'title' => $title,
237
+ 'type' => $type,
238
+ 'status' => $status,
239
+ 'private' => $private,
240
+ 'has_attach'=> $has_attach,
241
+ 'name' => $name,
242
+ 'email' => $email
243
  ),
244
  array( 'topicid' => intval($topicid) ),
245
+ array( '%s','%d','%d','%d','%d','%s','%s' ),
246
  array( '%d' )
247
  );
248
 
257
  return FALSE;
258
  }
259
 
260
+ $body = ( (isset($body) && $body) ? stripslashes($body) : stripslashes($post['body']) );
261
+
262
  $p_update = $this->wpforo->db->update(
263
  $this->wpforo->db->prefix."wpforo_posts",
264
  array(
265
+ 'title' => $title,
266
+ 'body' => $body,
267
  'modified' => current_time( 'mysql', 1 ),
268
+ 'status' => $status,
269
+ 'name' => $name,
270
+ 'email' => $email,
271
  ),
272
  array( 'postid' => intval($topic['first_postid']) ),
273
+ array( '%s','%s','%s','%d','%s','%s' ),
274
  array( '%d' )
275
  );
276
 
277
  if($t_update !== FALSE && $p_update !== FALSE){
278
 
279
+ do_action( 'wpforo_after_edit_topic', array( 'postid' => $topic['first_postid'], 'topicid' => $topicid, 'title' => $title, 'body' => $body, 'status' => $status, 'name' => $name, 'email' => $email ) );
280
 
281
+ wpforo_clean_cache($topicid, 'topic');
282
  $this->wpforo->notice->add('Topic successfully updated', 'success');
283
  return $topicid;
284
  }
331
  *
332
  * @return bool
333
  */
334
+ function delete($topicid = 0, $delete_cache = true ){
335
  $topicid = intval($topicid);
336
  if(!$topicid && isset( $_REQUEST['id'] ) ) $topicid = intval($_REQUEST['id']);
337
 
363
  )){
364
  foreach ($postids as $postid) {
365
  if( $postid == $topic['first_postid'] ){
366
+ return $this->wpforo->post->delete($postid, false);
367
  }else{
368
+ $this->wpforo->post->delete($postid, false);
369
  }
370
  }
371
  }
386
  SET $questions
387
  WHERE `userid` = " . intval($topic['userid'])
388
  );
389
+
390
+ do_action( 'wpforo_after_delete_topic', $topic );
391
+
392
+ if( $delete_cache ) wpforo_clean_cache(0, 'topic');
393
  $this->wpforo->member->reset($topic['userid']);
394
  $this->wpforo->forum->rebuild_last_infos($forumid);
395
+
396
  $this->wpforo->notice->add('This topic successfully deleted', 'success');
 
 
 
397
  return TRUE;
398
  }
399
  }
524
  $args = wpforo_parse_args( $args, $default );
525
  if(is_array($args) && !empty($args)){
526
 
 
 
 
 
527
  extract($args, EXTR_OVERWRITE);
528
 
529
  if( $row_count === 0 ) return array();
589
  }
590
  }
591
 
592
+ if( $cache ){ $object_key = md5( $sql . $this->wpforo->current_user_groupid ); $object_cache = $this->wpforo->cache->get( $object_key ); if( !empty($object_cache) ){ $items_count = $object_cache['items_count']; return $object_cache['items']; }}
593
+
594
  $topics = $this->wpforo->db->get_results($sql, ARRAY_A);
595
  $topics = apply_filters('wpforo_get_topics', $topics);
596
 
619
  return $topics;
620
  }
621
  }
622
+
623
+ function get_topics_filtered( $args = array() ){
624
+ $topics = array();
625
+ $topics = $this->get_topics( $args );
626
+ if( !empty($topics) ){
627
+ foreach($topics as $key => $topic){
628
+ if( !$this->wpforo->perm->forum_can('vf', $topic['forumid']) ){
629
+ unset($topics[$key]);
630
+ }
631
+ if( isset($topics[$key]) && isset($topic['private']) && $topic['private'] && !wpforo_is_owner($topic['userid']) ){
632
+ if( !$this->wpforo->perm->forum_can('vp', $topic['forumid']) ){
633
+ unset($topics[$key]);
634
+ }
635
+ }
636
+ if( isset($topics[$key]) && isset($topic['status']) && $topic['status'] && !wpforo_is_owner($topic['userid']) ){
637
+ if( !$this->wpforo->perm->forum_can('au', $topic['forumid']) ){
638
+ unset($topics[$key]);
639
+ }
640
+ }
641
+ }
642
+ }
643
+ return $topics;
644
+ }
645
+
646
  /**
647
  *
648
  * Search in your chosen column and return array with needles
771
 
772
  $this->wpforo->forum->rebuild_last_infos($topic['forumid']);
773
 
774
+ wpforo_clean_cache( $topicid, 'topic');
775
  $this->wpforo->notice->add('Topic successfully moved', 'success');
776
  return $topicid;
777
  }
wpf-includes/functions-installation.php CHANGED
@@ -156,7 +156,7 @@ function wpforo_activation(){
156
  'lost_password_url' => '',
157
  'rating_title_ug' => array ( 1 => '0', 5 => '1', 4 => '1', 2 => '0', 3 => '1' ),
158
  'rating_badge_ug' => array ( 1 => '1', 5 => '1', 4 => '1', 2 => '1', 3 => '1' ),
159
- 'title_usergroup' => array ( 1 => '1', 5 => '1', 4 => '0', 2 => '1', 3 => '0' ),
160
  );
161
  $exlude = array('rating_title_ug', 'rating_badge_ug');
162
  wpforo_update_options( 'wpforo_member_options', $wpforo_member, $exlude);
@@ -673,19 +673,28 @@ function wpforo_activation(){
673
  @$wpdb->query( $sql );
674
  $sql = "ALTER TABLE `".$wpdb->prefix."wpforo_topics` ADD INDEX `forumid_status` ( `forumid`, `status`);";
675
  @$wpdb->query( $sql );
676
- }
677
- $args = array( 'table' => $wpdb->prefix . 'wpforo_posts', 'col' => 'status', 'check' => 'col_exists' );
678
- if( !wpforo_db_check( $args ) ){
679
  $sql = "ALTER TABLE `".$wpdb->prefix."wpforo_posts` ADD `status` TINYINT(1) NOT NULL DEFAULT '0', ADD INDEX `status` (`status`);";
680
  @$wpdb->query( $sql );
681
  $sql = "ALTER TABLE `".$wpdb->prefix."wpforo_posts` ADD INDEX `topicid_status` ( `topicid`, `status`);";
682
  @$wpdb->query( $sql );
683
  }
684
-
 
 
 
 
 
 
 
 
 
 
 
685
  #################################################################
686
  // UPDATE VERSION - END /////////////////////////////////////////
687
  update_option('wpforo_version', WPFORO_VERSION);
688
  $wpforo->notice->clear();
 
689
  }
690
 
691
 
156
  'lost_password_url' => '',
157
  'rating_title_ug' => array ( 1 => '0', 5 => '1', 4 => '1', 2 => '0', 3 => '1' ),
158
  'rating_badge_ug' => array ( 1 => '1', 5 => '1', 4 => '1', 2 => '1', 3 => '1' ),
159
+ 'title_usergroup' => array ( 1 => '1', 5 => '1', 4 => '1', 2 => '1', 3 => '0' ),
160
  );
161
  $exlude = array('rating_title_ug', 'rating_badge_ug');
162
  wpforo_update_options( 'wpforo_member_options', $wpforo_member, $exlude);
673
  @$wpdb->query( $sql );
674
  $sql = "ALTER TABLE `".$wpdb->prefix."wpforo_topics` ADD INDEX `forumid_status` ( `forumid`, `status`);";
675
  @$wpdb->query( $sql );
 
 
 
676
  $sql = "ALTER TABLE `".$wpdb->prefix."wpforo_posts` ADD `status` TINYINT(1) NOT NULL DEFAULT '0', ADD INDEX `status` (`status`);";
677
  @$wpdb->query( $sql );
678
  $sql = "ALTER TABLE `".$wpdb->prefix."wpforo_posts` ADD INDEX `topicid_status` ( `topicid`, `status`);";
679
  @$wpdb->query( $sql );
680
  }
681
+ // ADD `name` and `email` field in TOPIC TABLE ///////////////////////////
682
+ $args = array( 'table' => $wpdb->prefix . 'wpforo_topics', 'col' => 'name', 'check' => 'col_exists' );
683
+ if( !wpforo_db_check( $args ) ){
684
+ $sql = "ALTER TABLE `" . $wpdb->prefix . "wpforo_topics` ADD `name` VARCHAR(50) NOT NULL AFTER `status`, ADD `email` VARCHAR(50) NOT NULL AFTER `name`";
685
+ @$wpdb->query( $sql );
686
+ $sql = "ALTER TABLE `" . $wpdb->prefix . "wpforo_posts` ADD `name` VARCHAR(50) NOT NULL AFTER `status`, ADD `email` VARCHAR(50) NOT NULL AFTER `name`";
687
+ @$wpdb->query( $sql );
688
+ $sql = "ALTER TABLE `" . $wpdb->prefix . "wpforo_topics` ADD KEY `email` (`email`)";
689
+ @$wpdb->query( $sql );
690
+ $sql = "ALTER TABLE `" . $wpdb->prefix . "wpforo_posts` ADD KEY `email` (`email`)";
691
+ @$wpdb->query( $sql );
692
+ }
693
  #################################################################
694
  // UPDATE VERSION - END /////////////////////////////////////////
695
  update_option('wpforo_version', WPFORO_VERSION);
696
  $wpforo->notice->clear();
697
+ wpforo_clean_cache();
698
  }
699
 
700
 
wpf-includes/functions-template.php CHANGED
@@ -407,11 +407,11 @@ class wpForo_Widget_recent_topics extends WP_Widget {
407
  'order' => 'DESC', // ASC DESC
408
  'row_count' => $instance['count'] // 4 or 1 ...
409
  );
410
- $topics = $wpforo->topic->get_topics($topic_args);
411
  echo '<div class="wpforo-widget-content"><ul>';
412
  foreach( $topics as $topic ){
413
  $topic_url = wpforo_topic($topic['topicid'], 'url');
414
- $member = $wpforo->member->get_member( $topic['userid'] );
415
  ?>
416
  <li>
417
  <div class="wpforo-list-item">
@@ -422,7 +422,7 @@ class wpForo_Widget_recent_topics extends WP_Widget {
422
  <?php endif; ?>
423
  <div class="wpforo-list-item-right" <?php if( !$instance['display_avatar'] ): ?> style="width:100%"<?php endif; ?>>
424
  <p class="posttitle"><a href="<?php echo esc_url($topic_url) ?>"><?php echo esc_html($topic['title']) ?></a></p>
425
- <p class="postuser"><?php wpforo_phrase('by') ?> <a href="<?php echo esc_url($wpforo->member->profile_url($member)) ?>"><?php echo esc_html($member['display_name']) ?></a>, <span style="white-space:nowrap;"><?php esc_html(wpforo_date($topic['created'])) ?></span></p>
426
  </div>
427
  <div class="wpf-clear"></div>
428
  </div>
@@ -483,11 +483,11 @@ class wpForo_Widget_recent_replies extends WP_Widget {
483
  'row_count' => $instance['count'],
484
  'check_private' => true
485
  );
486
- $recent_posts = $wpforo->post->get_posts($posts_args);
487
  echo '<div class="wpforo-widget-content"><ul>';
488
  foreach( $recent_posts as $post ){
489
  $post_url = wpforo_post( $post['postid'], 'url' );
490
- $member = $wpforo->member->get_member( $post['userid'] );
491
  ?>
492
  <li>
493
  <div class="wpforo-list-item">
@@ -499,7 +499,7 @@ class wpForo_Widget_recent_replies extends WP_Widget {
499
  <div class="wpforo-list-item-right" <?php if( !$instance['display_avatar'] ): ?> style="width:100%"<?php endif; ?>>
500
  <p class="posttitle"><a href="<?php echo esc_url($post_url) ?>"><?php echo esc_html($post['title']) ?></a></p>
501
  <p class="posttext"><?php echo esc_html(wpforo_text($post['body'], 55)); ?></p>
502
- <p class="postuser"><?php wpforo_phrase('by') ?> <a href="<?php echo esc_url($wpforo->member->profile_url($member)) ?>"><?php echo esc_html($member['display_name']) ?></a>, <?php esc_html(wpforo_date($post['created'])) ?></p>
503
  </div>
504
  <div class="wpf-clear"></div>
505
  </div>
@@ -668,17 +668,21 @@ function wpforo_member_title( $member = array(), $echo = true, $usergroup = true
668
  $rating_title_ug_enabled = ( isset($wpforo->member_options['rating_title_ug'][$member['groupid']]) && $wpforo->member_options['rating_title_ug'][$member['groupid']] ) ? true : false ;
669
  $usergroup_title_ug_enabled = ( isset($wpforo->member_options['title_usergroup'][$member['groupid']]) && $wpforo->member_options['title_usergroup'][$member['groupid']] ) ? true : false ;
670
 
671
- if( wpforo_feature('rating_title', $wpforo) && $rating_title_ug_enabled ){
672
- $title[] = esc_html($member['stat']['title']);
673
  }
674
  if( empty($title) ){
675
- $title[] = wpforo_phrase($member['title']);
676
  }
677
  if( $usergroup_title_ug_enabled ){
678
- $title[] = esc_html($member['groupname']);
 
 
 
 
679
  }
680
  if( !empty($title) ){
681
- $title_html = '<span>' . implode('</span><span>', $title) . '</span>';
682
  $title_html = apply_filters('wpforo_member_title', $title_html, $member);
683
  if( $echo ) {
684
  echo $title_html;
@@ -692,7 +696,7 @@ function wpforo_member_title( $member = array(), $echo = true, $usergroup = true
692
  function wpforo_member_badge( $member = array(), $sep = '', $type = 'full' ){
693
  global $wpforo;
694
  $rating_badge_ug_enabled = ( isset($wpforo->member_options['rating_badge_ug'][$member['groupid']]) && $wpforo->member_options['rating_badge_ug'][$member['groupid']] ) ? true : false ;
695
- if( wpforo_feature('rating', $wpforo) && $rating_badge_ug_enabled ): ?>
696
  <div class="author-rating-<?php echo esc_attr($type) ?>" style="color:<?php echo esc_attr($member['stat']['color']) ?>" title="<?php wpforo_phrase('Member Rating Badge') ?>">
697
  <?php echo $wpforo->member->rating_badge($member['stat']['rating'], $type); ?>
698
  </div><?php if($sep): ?><span class="author-rating-sep"><?php echo esc_html($sep); ?></span><?php endif; ?>
@@ -720,11 +724,12 @@ function wpforo_page_class( $classes ) {
720
  function wpforo_post( $postid, $var = 'item', $echo = false ){
721
 
722
  global $wpforo;
723
- $post = array();
724
  if( !$postid ) return $post;
725
  $cache = $wpforo->cache->on('object_cashe');
726
- if( $cache ) $post = $wpforo->cache->get_item( $postid, 'post' );
727
-
 
728
  if( empty($post) ){
729
  if( !$cache && $var == 'url' ){
730
  $post['url'] = $wpforo->post->get_post_url($postid);
@@ -743,17 +748,19 @@ function wpforo_post( $postid, $var = 'item', $echo = false ){
743
  }
744
  else{
745
  $post = $wpforo->post->get_post($postid);
746
- $post['url'] = $wpforo->post->get_post_url($post);
747
- if( $cache ){
748
- $post['is_answered'] = $wpforo->post->is_answered($postid);
749
- $post['votes_sum'] = $wpforo->post->get_post_votes_sum($postid);
750
- $post['likes_count'] = $wpforo->post->get_post_likes_count($postid);
751
- $post['likers_usernames'] = $wpforo->post->get_likers_usernames($postid);
 
 
 
 
 
 
752
  }
753
- if(!empty($post)){
754
- $cache_item = array( $postid => $post );
755
- $wpforo->cache->create('item', $cache_item, 'post');
756
- }
757
  }
758
  }
759
 
@@ -772,7 +779,7 @@ function wpforo_post( $postid, $var = 'item', $echo = false ){
772
  function wpforo_topic( $topicid, $var = 'item', $echo = false ){
773
 
774
  global $wpforo;
775
- $topic = array();
776
  if( !$topicid ) return $topic;
777
  $cache = $wpforo->cache->on('object_cashe');
778
  if( $cache ) $topic = $wpforo->cache->get_item( $topicid, 'topic' );
@@ -786,12 +793,14 @@ function wpforo_topic( $topicid, $var = 'item', $echo = false ){
786
  }
787
  else{
788
  $topic = $wpforo->topic->get_topic($topicid);
789
- $topic['url'] = $wpforo->topic->get_topic_url($topic);
790
- $topic['is_answer'] = $wpforo->topic->is_solved( $topic['topicid'] );
791
- if(!empty($topic)){
792
- $cache_item = array( $topicid => $topic );
793
- $wpforo->cache->create('item', $cache_item, 'topic');
794
- }
 
 
795
  }
796
  }
797
 
@@ -812,7 +821,7 @@ function wpforo_forum( $forumid, $var = 'item', $echo = false ){
812
 
813
  global $wpforo;
814
  $data = array();
815
- $forum = array();
816
  $cache = $wpforo->cache->on('object_cashe');
817
  if( !$forumid ) return $forum;
818
  if( $cache ) $forum = $wpforo->cache->get_item( $forumid, 'forum' );
@@ -831,14 +840,16 @@ function wpforo_forum( $forumid, $var = 'item', $echo = false ){
831
  }
832
  else{
833
  $forum = $wpforo->forum->get_forum($forumid);
834
- if( $cache ){
835
- $wpforo->forum->get_childs($forum['forumid'], $data);
836
- $forum['childs'] = $data;
837
- $forum['counts'] = $wpforo->forum->get_counts( $data );
838
- }
839
- if(!empty($forum)){
840
- $cache_item = array( $forumid => $forum );
841
- $wpforo->cache->create('item', $cache_item, 'forum');
 
 
842
  }
843
  }
844
  }
@@ -855,4 +866,39 @@ function wpforo_forum( $forumid, $var = 'item', $echo = false ){
855
  }
856
  }
857
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
858
  ?>
407
  'order' => 'DESC', // ASC DESC
408
  'row_count' => $instance['count'] // 4 or 1 ...
409
  );
410
+ $topics = $wpforo->topic->get_topics_filtered($topic_args);
411
  echo '<div class="wpforo-widget-content"><ul>';
412
  foreach( $topics as $topic ){
413
  $topic_url = wpforo_topic($topic['topicid'], 'url');
414
+ $member = wpforo_member($topic);
415
  ?>
416
  <li>
417
  <div class="wpforo-list-item">
422
  <?php endif; ?>
423
  <div class="wpforo-list-item-right" <?php if( !$instance['display_avatar'] ): ?> style="width:100%"<?php endif; ?>>
424
  <p class="posttitle"><a href="<?php echo esc_url($topic_url) ?>"><?php echo esc_html($topic['title']) ?></a></p>
425
+ <p class="postuser"><?php wpforo_phrase('by') ?> <?php wpforo_member_link($member) ?>, <span style="white-space:nowrap;"><?php esc_html(wpforo_date($topic['created'])) ?></span></p>
426
  </div>
427
  <div class="wpf-clear"></div>
428
  </div>
483
  'row_count' => $instance['count'],
484
  'check_private' => true
485
  );
486
+ $recent_posts = $wpforo->post->get_posts_filtered($posts_args);
487
  echo '<div class="wpforo-widget-content"><ul>';
488
  foreach( $recent_posts as $post ){
489
  $post_url = wpforo_post( $post['postid'], 'url' );
490
+ $member = wpforo_member( $post );
491
  ?>
492
  <li>
493
  <div class="wpforo-list-item">
499
  <div class="wpforo-list-item-right" <?php if( !$instance['display_avatar'] ): ?> style="width:100%"<?php endif; ?>>
500
  <p class="posttitle"><a href="<?php echo esc_url($post_url) ?>"><?php echo esc_html($post['title']) ?></a></p>
501
  <p class="posttext"><?php echo esc_html(wpforo_text($post['body'], 55)); ?></p>
502
+ <p class="postuser"><?php wpforo_phrase('by') ?> <?php wpforo_member_link($member) ?>, <?php esc_html(wpforo_date($post['created'])) ?></p>
503
  </div>
504
  <div class="wpf-clear"></div>
505
  </div>
668
  $rating_title_ug_enabled = ( isset($wpforo->member_options['rating_title_ug'][$member['groupid']]) && $wpforo->member_options['rating_title_ug'][$member['groupid']] ) ? true : false ;
669
  $usergroup_title_ug_enabled = ( isset($wpforo->member_options['title_usergroup'][$member['groupid']]) && $wpforo->member_options['title_usergroup'][$member['groupid']] ) ? true : false ;
670
 
671
+ if( wpforo_feature('rating_title', $wpforo) && $rating_title_ug_enabled && isset($member['stat']['title']) ){
672
+ $title[] = '<span class="wpf-member-title wpfrt" title="' . wpforo_phrase('Rating Title', false) . '">' . esc_html($member['stat']['title']) . '</span>';
673
  }
674
  if( empty($title) ){
675
+ $title[] = '<span class="wpf-member-title wpfct" title="' . wpforo_phrase('User Title', false) . '">' . wpforo_phrase($member['title'], false) . '</span>';
676
  }
677
  if( $usergroup_title_ug_enabled ){
678
+ $class = '';
679
+ if( $member['groupid'] == 1 ) $class = ' wpfbg-6 wpfcl-3';
680
+ if( $member['groupid'] == 2 ) $class = ' wpfbg-5 wpfcl-3';
681
+ if( $member['groupid'] == 4 ) $class = ' wpfbg-2 wpfcl-3';
682
+ $title[] = '<span class="wpf-member-title wpfut wpfug-' . intval($member['groupid']) . $class . '" title="' . wpforo_phrase('Usergroup', false) . '">' . esc_html($member['groupname']) . '</span>';
683
  }
684
  if( !empty($title) ){
685
+ $title_html = implode(' ', $title);
686
  $title_html = apply_filters('wpforo_member_title', $title_html, $member);
687
  if( $echo ) {
688
  echo $title_html;
696
  function wpforo_member_badge( $member = array(), $sep = '', $type = 'full' ){
697
  global $wpforo;
698
  $rating_badge_ug_enabled = ( isset($wpforo->member_options['rating_badge_ug'][$member['groupid']]) && $wpforo->member_options['rating_badge_ug'][$member['groupid']] ) ? true : false ;
699
+ if( wpforo_feature('rating', $wpforo) && $rating_badge_ug_enabled && isset($member['stat']['rating']) ): ?>
700
  <div class="author-rating-<?php echo esc_attr($type) ?>" style="color:<?php echo esc_attr($member['stat']['color']) ?>" title="<?php wpforo_phrase('Member Rating Badge') ?>">
701
  <?php echo $wpforo->member->rating_badge($member['stat']['rating'], $type); ?>
702
  </div><?php if($sep): ?><span class="author-rating-sep"><?php echo esc_html($sep); ?></span><?php endif; ?>
724
  function wpforo_post( $postid, $var = 'item', $echo = false ){
725
 
726
  global $wpforo;
727
+ $post = ( $var == 'item' ) ? array() : '';
728
  if( !$postid ) return $post;
729
  $cache = $wpforo->cache->on('object_cashe');
730
+ if( $cache ){
731
+ $post = $wpforo->cache->get_item( $postid, 'post' );
732
+ }
733
  if( empty($post) ){
734
  if( !$cache && $var == 'url' ){
735
  $post['url'] = $wpforo->post->get_post_url($postid);
748
  }
749
  else{
750
  $post = $wpforo->post->get_post($postid);
751
+ if( !empty($post) ){
752
+ $post['url'] = $wpforo->post->get_post_url($post);
753
+ if( $cache ){
754
+ $post['is_answered'] = $wpforo->post->is_answered($postid);
755
+ $post['votes_sum'] = $wpforo->post->get_post_votes_sum($postid);
756
+ $post['likes_count'] = $wpforo->post->get_post_likes_count($postid);
757
+ $post['likers_usernames'] = $wpforo->post->get_likers_usernames($postid);
758
+ }
759
+ if(!empty($post)){
760
+ $cache_item = array( $postid => $post );
761
+ $wpforo->cache->create('item', $cache_item, 'post');
762
+ }
763
  }
 
 
 
 
764
  }
765
  }
766
 
779
  function wpforo_topic( $topicid, $var = 'item', $echo = false ){
780
 
781
  global $wpforo;
782
+ $topic = ( $var == 'item' ) ? array() : '';
783
  if( !$topicid ) return $topic;
784
  $cache = $wpforo->cache->on('object_cashe');
785
  if( $cache ) $topic = $wpforo->cache->get_item( $topicid, 'topic' );
793
  }
794
  else{
795
  $topic = $wpforo->topic->get_topic($topicid);
796
+ if( !empty($topic) ){
797
+ $topic['url'] = $wpforo->topic->get_topic_url($topic);
798
+ $topic['is_answer'] = $wpforo->topic->is_solved( $topic['topicid'] );
799
+ if(!empty($topic)){
800
+ $cache_item = array( $topicid => $topic );
801
+ $wpforo->cache->create('item', $cache_item, 'topic');
802
+ }
803
+ }
804
  }
805
  }
806
 
821
 
822
  global $wpforo;
823
  $data = array();
824
+ $forum = ( $var == 'item' ) ? array() : '';
825
  $cache = $wpforo->cache->on('object_cashe');
826
  if( !$forumid ) return $forum;
827
  if( $cache ) $forum = $wpforo->cache->get_item( $forumid, 'forum' );
840
  }
841
  else{
842
  $forum = $wpforo->forum->get_forum($forumid);
843
+ if( !empty($forum) ){
844
+ if( $cache ){
845
+ $wpforo->forum->get_childs($forum['forumid'], $data);
846
+ $forum['childs'] = $data;
847
+ $forum['counts'] = $wpforo->forum->get_counts( $data );
848
+ }
849
+ if(!empty($forum)){
850
+ $cache_item = array( $forumid => $forum );
851
+ $wpforo->cache->create('item', $cache_item, 'forum');
852
+ }
853
  }
854
  }
855
  }
866
  }
867
  }
868
 
869
+ function wpforo_member( $object, $var = 'item', $echo = false ){
870
+
871
+ global $wpforo;
872
+ $member = array();
873
+ if( empty( $object ) ) return $member;
874
+
875
+ if( is_array( $object ) && isset($object['userid']) && $object['userid'] == 0 ){
876
+ $member = $wpforo->member->get_guest( $object );
877
+ }
878
+ else{
879
+ $userid = ( is_array( $object ) && isset($object['userid']) ) ? intval($object['userid']) : intval($object);
880
+ $member = $wpforo->member->get_member( $userid );
881
+ }
882
+
883
+ if( $var != 'item' && $var ){
884
+ $member = ( isset($member[$var]) ) ? $member[$var] : '';
885
+ }
886
+
887
+ if( $echo ){
888
+ echo $member;
889
+ }
890
+ else{
891
+ return $member;
892
+ }
893
+ }
894
+
895
+ function wpforo_member_link( $member, $prefix = '', $length = 30, $class = '', $echo = true ){
896
+ $display_name = ( isset($member['display_name']) && $member['display_name'] ) ? $member['display_name'] : wpforo_phrase('Anonymous', false);
897
+ if( isset($member['profile_url']) && $member['profile_url'] ){
898
+ ?><a href="<?php echo esc_url($member['profile_url']) ?>"><?php if( strpos($prefix, '%s') !== FALSE ): ?><?php echo sprintf( wpforo_phrase($prefix, FALSE), esc_html(wpforo_text($display_name, $length, FALSE)) ); ?><?php else: ?><?php if( $prefix ){ echo wpforo_phrase( $prefix, false) . ' '; } ?><?php if( $length ){ echo esc_html(wpforo_text($display_name, $length, false)); } else { echo esc_html($display_name); } ?><?php endif; ?></a><?php
899
+ }
900
+ else{
901
+ ?><?php if( strpos($prefix, '%s') !== FALSE ): ?><?php echo sprintf( wpforo_phrase($prefix, FALSE), esc_html(wpforo_text($display_name, $length, FALSE)) ); ?><?php else: ?><?php if( $prefix ){ echo wpforo_phrase( $prefix, false) . ' '; } ?><?php if( $length ){ echo esc_html(wpforo_text($display_name, $length, false)); } else { echo esc_html($display_name); } ?><?php endif; ?><?php
902
+ }
903
+ }
904
  ?>
wpf-includes/functions.php CHANGED
@@ -23,7 +23,7 @@ function wpforo_verify_form( $mode = 'full' ){
23
  }
24
  }
25
 
26
- function wpforo_home_url($str = '', $echo = false){
27
  global $wpforo;
28
 
29
  if( strpos($str, 'http') === 0 ){
@@ -33,19 +33,23 @@ function wpforo_home_url($str = '', $echo = false){
33
  $str = preg_replace('#^'.preg_quote( rtrim($base_url, '/\\') ).'/?#isu', '', $str, 1);
34
  }
35
  $str = trim(WPFORO_BASE_PERMASTRUCT, '/\\') . '/' . trim($str, '/\\');
36
-
37
- $url = $wpforo->user_trailingslashit( home_url($str) );
38
 
39
- //-START- check is url maybe wordpress home
 
 
40
  $maybe_home_url = trim( preg_replace('#/?index\.php/?(\?.*)?$#isu', '', $url), '/\\' );
41
  $home_url = trim( home_url(), '/\\' );
42
  if( $maybe_home_url == $home_url ){
43
  $url = preg_replace('#index\.php/?#isu', '', $url, 1);
44
  $url = $wpforo->user_trailingslashit($url);
45
  }
46
- //-END- check is url maybe wordpress home
47
-
48
- if(!$echo) return $url;
 
 
 
 
49
  echo $url;
50
  }
51
 
@@ -230,12 +234,14 @@ if(!function_exists('is_serialized')){
230
 
231
 
232
  function wpforo_get_request_uri($with_port = FALSE, $get_referer_when_ajax = TRUE){
233
- if( $get_referer_when_ajax && wpforo_is_ajax() ) return $_SERVER['HTTP_REFERER'];
234
- $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
 
 
235
  $sp = strtolower($_SERVER["SERVER_PROTOCOL"]);
236
  $protocol = substr($sp, 0, strpos($sp, "/")) . $s;
237
  $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
238
- return $protocol . "://" . $_SERVER['SERVER_NAME'] . ($with_port ? $port : '') . $_SERVER['REQUEST_URI'];
239
  }
240
 
241
 
@@ -656,7 +662,11 @@ function wpforo_create_form_table($varname, $primary_key, $fields = array(), $se
656
  <?php if($field == 'forumid') : ?>
657
  <?php $data = $wpforo->forum->get_forum($item[$field]); echo esc_html($data['title']); ?>
658
  <?php elseif($field == 'userid') : ?>
659
- <?php $data = $wpforo->member->get_member($item[$field]); echo esc_html(wpforo_make_dname($data['display_name'], $data['user_nicename'])); ?>
 
 
 
 
660
  <?php elseif($field == 'groupid') : ?>
661
  <?php $data = $wpforo->usergroup->get_usergroup($item[$field]); echo esc_html($data['name']); ?>
662
  <?php elseif($field == 'rank') : ?>
23
  }
24
  }
25
 
26
+ function wpforo_home_url($str = '', $echo = false, $absolute = true){
27
  global $wpforo;
28
 
29
  if( strpos($str, 'http') === 0 ){
33
  $str = preg_replace('#^'.preg_quote( rtrim($base_url, '/\\') ).'/?#isu', '', $str, 1);
34
  }
35
  $str = trim(WPFORO_BASE_PERMASTRUCT, '/\\') . '/' . trim($str, '/\\');
 
 
36
 
37
+ if( $absolute ){
38
+ $url = $wpforo->user_trailingslashit( home_url($str) );
39
+ //-START- check is url maybe wordpress home
40
  $maybe_home_url = trim( preg_replace('#/?index\.php/?(\?.*)?$#isu', '', $url), '/\\' );
41
  $home_url = trim( home_url(), '/\\' );
42
  if( $maybe_home_url == $home_url ){
43
  $url = preg_replace('#index\.php/?#isu', '', $url, 1);
44
  $url = $wpforo->user_trailingslashit($url);
45
  }
46
+ //-END- check is url maybe wordpress home
47
+ }
48
+ else{
49
+ echo $url = $wpforo->user_trailingslashit( $str );
50
+ }
51
+
52
+ if(!$echo) return $url;
53
  echo $url;
54
  }
55
 
234
 
235
 
236
  function wpforo_get_request_uri($with_port = FALSE, $get_referer_when_ajax = TRUE){
237
+ if( $get_referer_when_ajax && wpforo_is_ajax() ){
238
+ if( isset($_SERVER['HTTP_REFERER']) ){ return $_SERVER['HTTP_REFERER']; }
239
+ }
240
+ $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
241
  $sp = strtolower($_SERVER["SERVER_PROTOCOL"]);
242
  $protocol = substr($sp, 0, strpos($sp, "/")) . $s;
243
  $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
244
+ return $protocol . "://" . $_SERVER['HTTP_HOST'] . ($with_port ? $port : '') . $_SERVER['REQUEST_URI'];
245
  }
246
 
247
 
662
  <?php if($field == 'forumid') : ?>
663
  <?php $data = $wpforo->forum->get_forum($item[$field]); echo esc_html($data['title']); ?>
664
  <?php elseif($field == 'userid') : ?>
665
+ <?php if(isset($item['name'])): ?>
666
+ <?php $data = wpforo_member($item); echo esc_html(wpforo_make_dname($data['display_name'], $data['user_nicename'])); ?>
667
+ <?php else: ?>
668
+ <?php $data = $wpforo->member->get_member($item[$field]); echo esc_html(wpforo_make_dname($data['display_name'], $data['user_nicename'])); ?>
669
+ <?php endif; ?>
670
  <?php elseif($field == 'groupid') : ?>
671
  <?php $data = $wpforo->usergroup->get_usergroup($item[$field]); echo esc_html($data['name']); ?>
672
  <?php elseif($field == 'rank') : ?>
wpf-includes/install-sql.php CHANGED
@@ -52,9 +52,15 @@
52
  `closed` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
53
  `has_attach` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
54
  `private` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
 
 
 
55
  PRIMARY KEY (`topicid`),
56
  UNIQUE KEY `UNIQUE SLUG` (`slug`(191)),
57
  FULLTEXT KEY `title` (`title`),
 
 
 
58
  KEY `own_private` (`userid`,`private`)
59
  ) ENGINE=$engine $charset_collate;",
60
  "CREATE TABLE IF NOT EXISTS `{$wpforo->db->prefix}wpforo_posts`(
@@ -71,10 +77,15 @@
71
  `votes` INT NOT NULL DEFAULT 0,
72
  `is_answer` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
73
  `is_first_post` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
 
 
 
74
  PRIMARY KEY (`postid`),
75
  FULLTEXT KEY `title`(`title`(191)),
76
  FULLTEXT KEY `body` (`body`),
77
- FULLTEXT KEY `title_plus_body` (`title`,`body`)
 
 
78
  ) ENGINE=$engine $charset_collate;",
79
  "CREATE TABLE IF NOT EXISTS `{$wpforo->db->prefix}wpforo_profiles` (
80
  `userid` INT UNSIGNED NOT NULL,
@@ -145,7 +156,7 @@
145
  `vid` INT UNSIGNED NOT NULL AUTO_INCREMENT,
146
  `userid` INT UNSIGNED NOT NULL,
147
  `topicid` INT UNSIGNED NOT NULL,
148
- `created` TIMESTAMP NOT NULL,
149
  PRIMARY KEY (`vid`),
150
  KEY `user_topic` (`userid`,`topicid`)
151
  ) ENGINE=$engine $charset_collate;",
@@ -169,15 +180,30 @@
169
  "CREATE TABLE IF NOT EXISTS `{$wpforo->db->prefix}wpforo_subscribes` (
170
  `subid` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
171
  `itemid` BIGINT UNSIGNED NOT NULL,
172
- `type` varchar(5) NOT NULL,
173
  `confirmkey` varchar(32) NOT NULL,
174
  `userid` BIGINT UNSIGNED NOT NULL,
175
- `active` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
176
  PRIMARY KEY (`subid`),
177
  UNIQUE KEY `itemid` (`itemid`,`type`,`userid`),
178
  UNIQUE KEY `confirmkey` (`confirmkey`),
179
  KEY `itemid_2` (`itemid`),
180
  KEY `userid` (`userid`)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181
  ) ENGINE=$engine $charset_collate;"
182
  );
183
 
52
  `closed` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
53
  `has_attach` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
54
  `private` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
55
+ `status` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
56
+ `name` VARCHAR(50) NOT NULL DEFAULT '',
57
+ `email` VARCHAR(50) NOT NULL DEFAULT '',
58
  PRIMARY KEY (`topicid`),
59
  UNIQUE KEY `UNIQUE SLUG` (`slug`(191)),
60
  FULLTEXT KEY `title` (`title`),
61
+ KEY `status` (`status`),
62
+ KEY `email` (`email`),
63
+ KEY `is_private` (`private`),
64
  KEY `own_private` (`userid`,`private`)
65
  ) ENGINE=$engine $charset_collate;",
66
  "CREATE TABLE IF NOT EXISTS `{$wpforo->db->prefix}wpforo_posts`(
77
  `votes` INT NOT NULL DEFAULT 0,
78
  `is_answer` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
79
  `is_first_post` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
80
+ `status` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
81
+ `name` VARCHAR(50) NOT NULL DEFAULT '',
82
+ `email` VARCHAR(50) NOT NULL DEFAULT '',
83
  PRIMARY KEY (`postid`),
84
  FULLTEXT KEY `title`(`title`(191)),
85
  FULLTEXT KEY `body` (`body`),
86
+ FULLTEXT KEY `title_plus_body` (`title`,`body`),
87
+ KEY `status` (`status`),
88
+ KEY `email` (`email`)
89
  ) ENGINE=$engine $charset_collate;",
90
  "CREATE TABLE IF NOT EXISTS `{$wpforo->db->prefix}wpforo_profiles` (
91
  `userid` INT UNSIGNED NOT NULL,
156
  `vid` INT UNSIGNED NOT NULL AUTO_INCREMENT,
157
  `userid` INT UNSIGNED NOT NULL,
158
  `topicid` INT UNSIGNED NOT NULL,
159
+ `created` INT UNSIGNED NOT NULL,
160
  PRIMARY KEY (`vid`),
161
  KEY `user_topic` (`userid`,`topicid`)
162
  ) ENGINE=$engine $charset_collate;",
180
  "CREATE TABLE IF NOT EXISTS `{$wpforo->db->prefix}wpforo_subscribes` (
181
  `subid` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
182
  `itemid` BIGINT UNSIGNED NOT NULL,
183
+ `type` VARCHAR(5) NOT NULL,
184
  `confirmkey` varchar(32) NOT NULL,
185
  `userid` BIGINT UNSIGNED NOT NULL,
186
+ `active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
187
  PRIMARY KEY (`subid`),
188
  UNIQUE KEY `itemid` (`itemid`,`type`,`userid`),
189
  UNIQUE KEY `confirmkey` (`confirmkey`),
190
  KEY `itemid_2` (`itemid`),
191
  KEY `userid` (`userid`)
192
+ ) ENGINE=$engine $charset_collate;",
193
+ "CREATE TABLE IF NOT EXISTS `{$wpforo->db->prefix}wpforo_visits` (
194
+ `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
195
+ `userid` BIGINT UNSIGNED NOT NULL,
196
+ `name` VARCHAR(60) NOT NULL,
197
+ `ip` VARCHAR(60) NOT NULL,
198
+ `time` INT UNSIGNED NOT NULL,
199
+ `forumid` INT UNSIGNED NOT NULL,
200
+ `topicid` BIGINT UNSIGNED NOT NULL,
201
+ PRIMARY KEY (`id`),
202
+ KEY `userid` (`userid`),
203
+ KEY `forumid` (`forumid`),
204
+ KEY `topicid` (`topicid`),
205
+ KEY `time` (`time`),
206
+ KEY `ip` (`ip`)
207
  ) ENGINE=$engine $charset_collate;"
208
  );
209
 
wpf-includes/wpf-actions.php CHANGED
@@ -97,14 +97,12 @@ function wpforo_actions(){
97
  if( $_REQUEST['topic']['action'] == 'add' ){
98
  wpforo_verify_form();
99
  if( $topicid = $wpforo->topic->add() ){
100
- wpforo_clean_cache( $topicid, 'topic' );
101
  wp_redirect( $wpforo->topic->get_topic_url($topicid) );
102
  exit();
103
  }
104
  }elseif( $_REQUEST['topic']['action'] == 'edit' ){
105
  wpforo_verify_form();
106
  if( $topicid = $wpforo->topic->edit() ){
107
- wpforo_clean_cache( $topicid, 'topic' );
108
  wp_redirect( $wpforo->topic->get_topic_url($topicid) );
109
  exit();
110
  }
@@ -118,14 +116,12 @@ function wpforo_actions(){
118
  if($_REQUEST['post']['action'] == 'add'){
119
  wpforo_verify_form();
120
  if( $postid = $wpforo->post->add() ){
121
- wpforo_clean_cache( $postid, 'post' );
122
  wp_redirect( $wpforo->post->get_post_url( $postid ) );
123
  exit();
124
  }
125
  }elseif($_REQUEST['post']['action'] == 'edit'){
126
  wpforo_verify_form();
127
  if( $postid = $wpforo->post->edit() ){
128
- wpforo_clean_cache( $postid, 'post' );
129
  wp_redirect( $wpforo->post->get_post_url( $postid ) );
130
  exit();
131
  }
@@ -137,7 +133,6 @@ function wpforo_actions(){
137
  $move_topicid = intval($_POST['movetopicid']);
138
  $move_forumid = intval($_POST['topic']['forumid']);
139
  $wpforo->topic->move( $move_topicid, $move_forumid );
140
- wpforo_clean_cache( $move_topicid, 'topic');
141
  wp_redirect( wpforo_get_request_uri() );
142
  exit();
143
  }
@@ -406,13 +401,10 @@ function wpforo_actions(){
406
  check_admin_referer( 'wpforo-forum-addedit' );
407
  if( $_GET['action'] == 'add' ){
408
  if( $forumid = $wpforo->forum->add() ){
409
- wpforo_clean_cache($forumid, 'forum');
410
  wp_redirect( admin_url( 'admin.php?page=wpforo-forums' ) );
411
  exit();
412
  }
413
  }elseif( $_GET['action'] == 'edit' && isset($_GET['id']) ){
414
- $forumid = intval($_GET['id']);
415
- wpforo_clean_cache($forumid, 'forum');
416
  $forumid = $wpforo->forum->edit();
417
  }
418
  if( isset($forumid) && $forumid ){
@@ -430,7 +422,6 @@ function wpforo_actions(){
430
  }elseif( intval($_REQUEST['forum']['delete']) == 0 ){
431
  $wpforo->forum->merge();
432
  }
433
- wpforo_clean_cache(0, 'forum');
434
  wp_redirect( admin_url( 'admin.php?page=wpforo-forums' ) );
435
  exit();
436
  }
@@ -478,7 +469,6 @@ function wpforo_actions(){
478
  !check_admin_referer( 'wpforo_admin_table_action_delete' );
479
  }
480
  foreach ($pids as $pid) $wpforo->post->delete($pid);
481
- wpforo_clean_cache(0, 'post');
482
  wp_redirect(admin_url('admin.php?page=wpforo-moderations'));
483
  exit();
484
  } elseif ($u_action == 'approve') {
@@ -723,7 +713,7 @@ function wpforo_actions(){
723
  $topic['topicurl'] = $wpforo->topic->get_topic_url($topicid);
724
  $posts = $wpforo->post->get_posts( array( 'topicid' => $topicid, 'row_count' => 10, 'orderby' => 'created', 'order' => 'DESC', 'check_private' => true ) );
725
  foreach($posts as $key => $post){
726
- $member = $wpforo->member->get_member($post['userid']);
727
  $posts[$key]['description'] = wpforo_text( trim(strip_tags($post['body'])), 190, false );
728
  $posts[$key]['content'] = trim($post['body']);
729
  $posts[$key]['posturl'] = $wpforo->post->get_post_url( $post['postid'] );
@@ -735,7 +725,7 @@ function wpforo_actions(){
735
  $topics = $wpforo->topic->get_topics( array( 'forumid' => $forumid, 'row_count' => 10, 'orderby' => 'created', 'order' => 'DESC' ) );
736
  foreach($topics as $key => $topic){
737
  $post = $wpforo->post->get_post($topic['first_postid']);
738
- $member = $wpforo->member->get_member($topic['userid']);
739
  $topics[$key]['description'] = wpforo_text( trim(strip_tags($post['body'])), 190, false );
740
  $topics[$key]['content'] = trim($post['body']);
741
  $topics[$key]['topicurl'] = $wpforo->topic->get_topic_url($topic['topicid']);
@@ -827,7 +817,4 @@ function wpforo_actions(){
827
 
828
  do_action( 'wpforo_actions_end' );
829
 
830
- }
831
-
832
-
833
- ?>
97
  if( $_REQUEST['topic']['action'] == 'add' ){
98
  wpforo_verify_form();
99
  if( $topicid = $wpforo->topic->add() ){
 
100
  wp_redirect( $wpforo->topic->get_topic_url($topicid) );
101
  exit();
102
  }
103
  }elseif( $_REQUEST['topic']['action'] == 'edit' ){
104
  wpforo_verify_form();
105
  if( $topicid = $wpforo->topic->edit() ){
 
106
  wp_redirect( $wpforo->topic->get_topic_url($topicid) );
107
  exit();
108
  }
116
  if($_REQUEST['post']['action'] == 'add'){
117
  wpforo_verify_form();
118
  if( $postid = $wpforo->post->add() ){
 
119
  wp_redirect( $wpforo->post->get_post_url( $postid ) );
120
  exit();
121
  }
122
  }elseif($_REQUEST['post']['action'] == 'edit'){
123
  wpforo_verify_form();
124
  if( $postid = $wpforo->post->edit() ){
 
125
  wp_redirect( $wpforo->post->get_post_url( $postid ) );
126
  exit();
127
  }
133
  $move_topicid = intval($_POST['movetopicid']);
134
  $move_forumid = intval($_POST['topic']['forumid']);
135
  $wpforo->topic->move( $move_topicid, $move_forumid );
 
136
  wp_redirect( wpforo_get_request_uri() );
137
  exit();
138
  }
401
  check_admin_referer( 'wpforo-forum-addedit' );
402
  if( $_GET['action'] == 'add' ){
403
  if( $forumid = $wpforo->forum->add() ){
 
404
  wp_redirect( admin_url( 'admin.php?page=wpforo-forums' ) );
405
  exit();
406
  }
407
  }elseif( $_GET['action'] == 'edit' && isset($_GET['id']) ){
 
 
408
  $forumid = $wpforo->forum->edit();
409
  }
410
  if( isset($forumid) && $forumid ){
422
  }elseif( intval($_REQUEST['forum']['delete']) == 0 ){
423
  $wpforo->forum->merge();
424
  }
 
425
  wp_redirect( admin_url( 'admin.php?page=wpforo-forums' ) );
426
  exit();
427
  }
469
  !check_admin_referer( 'wpforo_admin_table_action_delete' );
470
  }
471
  foreach ($pids as $pid) $wpforo->post->delete($pid);
 
472
  wp_redirect(admin_url('admin.php?page=wpforo-moderations'));
473
  exit();
474
  } elseif ($u_action == 'approve') {
713
  $topic['topicurl'] = $wpforo->topic->get_topic_url($topicid);
714
  $posts = $wpforo->post->get_posts( array( 'topicid' => $topicid, 'row_count' => 10, 'orderby' => 'created', 'order' => 'DESC', 'check_private' => true ) );
715
  foreach($posts as $key => $post){
716
+ $member = wpforo_member( $post );
717
  $posts[$key]['description'] = wpforo_text( trim(strip_tags($post['body'])), 190, false );
718
  $posts[$key]['content'] = trim($post['body']);
719
  $posts[$key]['posturl'] = $wpforo->post->get_post_url( $post['postid'] );
725
  $topics = $wpforo->topic->get_topics( array( 'forumid' => $forumid, 'row_count' => 10, 'orderby' => 'created', 'order' => 'DESC' ) );
726
  foreach($topics as $key => $topic){
727
  $post = $wpforo->post->get_post($topic['first_postid']);
728
+ $member = wpforo_member($topic);
729
  $topics[$key]['description'] = wpforo_text( trim(strip_tags($post['body'])), 190, false );
730
  $topics[$key]['content'] = trim($post['body']);
731
  $topics[$key]['topicurl'] = $wpforo->topic->get_topic_url($topic['topicid']);
817
 
818
  do_action( 'wpforo_actions_end' );
819
 
820
+ }
 
 
 
wpf-includes/wpf-hooks.php CHANGED
@@ -32,7 +32,7 @@ function wpforo_notice_show(){
32
  add_action( 'wpforo_top_hook', 'wpforo_notice_show', 10, 0 );
33
 
34
  function wpforo_user_admin_bar(){
35
- if( !is_super_admin() ) show_admin_bar(wpforo_feature('user-admin-bar'));
36
  }
37
  add_action('init', 'wpforo_user_admin_bar');
38
 
@@ -163,7 +163,6 @@ function wpforo_load( $atts ){
163
  $output = ob_get_clean();
164
  $wpforo->cache->html($output);
165
  return $output;
166
-
167
  }
168
  else{
169
  wpforo_init_template();
@@ -183,14 +182,10 @@ function wpforo_set_header_status(){
183
  if( is_wpforo_page() ){
184
  global $wp_query, $wpforo;
185
 
186
- if( $wpforo->current_object['is_404'] ){
187
- status_header( 404 );
188
- $wp_query->is_404 = TRUE;
189
- }else{
190
- status_header( 200 );
191
- $wp_query->is_404 = FALSE;
192
- }
193
- }
194
  }
195
 
196
  function wpforo_do_rewrite(){
@@ -556,7 +551,7 @@ function wpf_quote(){
556
  global $wpforo;
557
 
558
  $post = $wpforo->db->get_row('SELECT `userid`, `body` FROM '.$wpforo->db->prefix.'wpforo_posts WHERE postid =' . intval($_POST['postid']), ARRAY_A);
559
- $poster = $wpforo->member->get_member(intval($post['userid']));
560
  echo '<blockquote><div class="wpforo-post-quote-author"><strong>' . wpforo_phrase('Posted by', FALSE) . ': ' . ( $poster['display_name'] ? esc_textarea($poster['display_name']) : esc_textarea($poster['user_login']) ) . '</strong></div>' . wpautop($post['body']) . '</blockquote><br />';
561
  exit();
562
  }
@@ -1321,7 +1316,7 @@ function wpforo_forum_subscribers_mail_sender( $topic ){
1321
  }
1322
  }
1323
 
1324
- $owner = $wpforo->member->get_member( $topic['userid'] );
1325
 
1326
  if($owner['user_email'] == $member['user_email']) continue;
1327
 
@@ -1392,7 +1387,7 @@ function wpforo_topic_subscribers_mail_sender( $post ){
1392
  $unsubscribe_link = '#';
1393
  }
1394
 
1395
- $owner = $wpforo->member->get_member( $post['userid'] );
1396
  if($owner['user_email'] == $member['user_email']) continue;
1397
 
1398
  if( isset($topic['forumid']) && $topic['forumid'] && isset($subscriber['userid']) ){
32
  add_action( 'wpforo_top_hook', 'wpforo_notice_show', 10, 0 );
33
 
34
  function wpforo_user_admin_bar(){
35
+ if( !is_super_admin() && is_user_logged_in() ) show_admin_bar( wpforo_feature('user-admin-bar') );
36
  }
37
  add_action('init', 'wpforo_user_admin_bar');
38
 
163
  $output = ob_get_clean();
164
  $wpforo->cache->html($output);
165
  return $output;
 
166
  }
167
  else{
168
  wpforo_init_template();
182
  if( is_wpforo_page() ){
183
  global $wp_query, $wpforo;
184
 
185
+ $status = ( $wpforo->current_object['is_404'] ? 404 : 200 );
186
+ status_header( $status );
187
+ $wp_query->is_404 = FALSE;
188
+ }
 
 
 
 
189
  }
190
 
191
  function wpforo_do_rewrite(){
551
  global $wpforo;
552
 
553
  $post = $wpforo->db->get_row('SELECT `userid`, `body` FROM '.$wpforo->db->prefix.'wpforo_posts WHERE postid =' . intval($_POST['postid']), ARRAY_A);
554
+ $poster = wpforo_member( $post );
555
  echo '<blockquote><div class="wpforo-post-quote-author"><strong>' . wpforo_phrase('Posted by', FALSE) . ': ' . ( $poster['display_name'] ? esc_textarea($poster['display_name']) : esc_textarea($poster['user_login']) ) . '</strong></div>' . wpautop($post['body']) . '</blockquote><br />';
556
  exit();
557
  }
1316
  }
1317
  }
1318
 
1319
+ $owner = wpforo_member( $topic );
1320
 
1321
  if($owner['user_email'] == $member['user_email']) continue;
1322
 
1387
  $unsubscribe_link = '#';
1388
  }
1389
 
1390
+ $owner = wpforo_member( $post );
1391
  if($owner['user_email'] == $member['user_email']) continue;
1392
 
1393
  if( isset($topic['forumid']) && $topic['forumid'] && isset($subscriber['userid']) ){
wpf-includes/wpf-phrases.php CHANGED
@@ -670,4 +670,10 @@ $wpforo_phrases = array(
670
  'Post is empty' => __('Post is empty', 'wpforo'),
671
  'removed link' => __('removed link', 'wpforo'),
672
  'Submit' => __('Submit', 'wpforo'),
 
 
 
 
 
 
673
  );
670
  'Post is empty' => __('Post is empty', 'wpforo'),
671
  'removed link' => __('removed link', 'wpforo'),
672
  'Submit' => __('Submit', 'wpforo'),
673
+
674
+ // 1.3.0 //
675
+ 'Usergroup' => __('Usergroup', 'wpforo'),
676
+ 'Rating Title' => __('Rating Title', 'wpforo'),
677
+ 'User Title' => __('User Title', 'wpforo'),
678
+ 'Anonymous' => __('Anonymous', 'wpforo'),
679
  );
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: 2017-05-23 23:07+0400\n"
9
  "PO-Revision-Date: 2016-06-28 21:09+0400\n"
10
  "Last-Translator: \n"
11
  "Language-Team: \n"
@@ -67,46 +67,46 @@ msgstr ""
67
 
68
  #: wpf-admin/admin.php:26 wpf-admin/admin.php:28 wpf-admin/dashboard.php:138
69
  #: wpf-admin/options-tabs/styles.php:16 wpf-admin/options.php:15
70
- #: wpf-includes/wpf-hooks.php:1639 wpf-includes/wpf-phrases.php:123
71
  msgid "Forums"
72
  msgstr ""
73
 
74
  #: wpf-admin/admin.php:29 wpf-includes/wpf-hooks.php:22
75
- #: wpf-includes/wpf-hooks.php:1655
76
  msgid "Settings"
77
  msgstr ""
78
 
79
- #: wpf-admin/admin.php:30 wpf-includes/wpf-hooks.php:1664
80
  msgid "Tools"
81
  msgstr ""
82
 
83
- #: wpf-admin/admin.php:31 wpf-includes/wpf-hooks.php:1673
84
  msgid "Moderation"
85
  msgstr ""
86
 
87
  #: wpf-admin/admin.php:32 wpf-admin/dashboard.php:150 wpf-admin/member.php:10
88
- #: wpf-admin/options.php:18 wpf-includes/wpf-hooks.php:1682
89
  #: wpf-includes/wpf-phrases.php:178
90
  msgid "Members"
91
  msgstr ""
92
 
93
  #: wpf-admin/admin.php:33 wpf-admin/usergroup.php:8
94
- #: wpf-includes/wpf-hooks.php:1691
95
  msgid "Usergroups"
96
  msgstr ""
97
 
98
- #: wpf-admin/admin.php:34 wpf-includes/wpf-hooks.php:1707
99
  #: wpf-includes/wpf-phrases.php:600
100
  msgid "Phrases"
101
  msgstr ""
102
 
103
- #: wpf-admin/admin.php:35 wpf-includes/wpf-hooks.php:1723
104
  #: wpf-includes/wpf-phrases.php:601
105
  msgid "Themes"
106
  msgstr ""
107
 
108
  #: wpf-admin/admin.php:36 wpf-admin/options.php:23
109
- #: wpf-includes/wpf-hooks.php:1732 wpf-includes/wpf-phrases.php:25
110
  msgid "Addons"
111
  msgstr ""
112
 
@@ -172,11 +172,11 @@ msgid "Board Statistic"
172
  msgstr ""
173
 
174
  #: wpf-admin/dashboard.php:142 wpf-admin/options-tabs/styles.php:22
175
- #: wpf-includes/class-forums.php:600 wpf-includes/wpf-phrases.php:339
176
  msgid "Topics"
177
  msgstr ""
178
 
179
- #: wpf-admin/dashboard.php:146 wpf-includes/class-forums.php:600
180
  #: wpf-includes/wpf-phrases.php:233
181
  msgid "Posts"
182
  msgstr ""
@@ -240,7 +240,7 @@ msgstr ""
240
  msgid "Delete User Cache"
241
  msgstr ""
242
 
243
- #: wpf-admin/forum.php:13 wpf-includes/functions.php:767
244
  #: wpf-includes/wpf-phrases.php:302
245
  msgid "Show on screen"
246
  msgstr ""
@@ -270,7 +270,7 @@ msgstr ""
270
  msgid "Number of Columns"
271
  msgstr ""
272
 
273
- #: wpf-admin/forum.php:32 wpf-includes/functions.php:781
274
  #: wpf-includes/wpf-phrases.php:275
275
  msgid "Screen Options"
276
  msgstr ""
@@ -355,14 +355,14 @@ msgid "Are you sure you want to delete this forum?"
355
  msgstr ""
356
 
357
  #: wpf-admin/forum.php:153 wpf-admin/themes.php:73
358
- #: wpf-admin/tools-tabs/antispam.php:138 wpf-admin/usergroup.php:37
359
- #: wpf-admin/usergroup.php:133 wpf-includes/wpf-hooks.php:1058
360
  #: wpf-includes/wpf-phrases.php:66
361
  msgid "Delete"
362
  msgstr ""
363
 
364
  #: wpf-admin/forum.php:154 wpf-admin/usergroup.php:39
365
- #: wpf-includes/class-forums.php:606 wpf-includes/wpf-phrases.php:356
366
  msgid "View"
367
  msgstr ""
368
 
@@ -458,8 +458,8 @@ msgstr ""
458
  msgid "Admin"
459
  msgstr ""
460
 
461
- #: wpf-admin/options-tabs/accesses.php:32 wpf-includes/class-forums.php:602
462
- #: wpf-includes/functions.php:599 wpf-includes/wpf-phrases.php:382
463
  msgid "edit"
464
  msgstr ""
465
 
@@ -469,8 +469,8 @@ msgid ""
469
  "to this access will lost all forum permissions."
470
  msgstr ""
471
 
472
- #: wpf-admin/options-tabs/accesses.php:34 wpf-includes/class-forums.php:604
473
- #: wpf-includes/functions.php:617 wpf-includes/functions.php:627
474
  #: wpf-includes/wpf-phrases.php:381
475
  msgid "delete"
476
  msgstr ""
@@ -585,8 +585,8 @@ msgstr ""
585
 
586
  #: wpf-admin/options-tabs/emails.php:99 wpf-admin/options-tabs/features.php:71
587
  #: wpf-admin/options-tabs/forums.php:16 wpf-admin/options-tabs/general.php:82
588
- #: wpf-admin/options-tabs/members.php:129 wpf-admin/options-tabs/posts.php:67
589
- #: wpf-admin/options-tabs/styles.php:93 wpf-admin/tools-tabs/antispam.php:179
590
  #: wpf-admin/tools-tabs/cleanup.php:49 wpf-includes/wpf-phrases.php:345
591
  msgid "Update Options"
592
  msgstr ""
@@ -1264,57 +1264,57 @@ msgstr ""
1264
  msgid "Directory"
1265
  msgstr ""
1266
 
1267
- #: wpf-admin/tools-tabs/antispam.php:138
1268
  msgid "Delete this file"
1269
  msgstr ""
1270
 
1271
- #: wpf-admin/tools-tabs/antispam.php:138
1272
  msgid "Are you sure you want to permanently delete this file?"
1273
  msgstr ""
1274
 
1275
- #: wpf-admin/tools-tabs/antispam.php:149
1276
  msgid "Click to delete Blue marked files"
1277
  msgstr ""
1278
 
1279
- #: wpf-admin/tools-tabs/antispam.php:150
1280
  msgid ""
1281
  "Are you sure you want to delete all BLUE marked files listed here. Please "
1282
  "download Wordpress /wp-content/uploads/wpforo/ folder to your local computer "
1283
  "before deleting files, this is not undoable."
1284
  msgstr ""
1285
 
1286
- #: wpf-admin/tools-tabs/antispam.php:151 wpf-admin/tools-tabs/antispam.php:157
1287
- #: wpf-admin/tools-tabs/antispam.php:163 wpf-admin/tools-tabs/antispam.php:169
1288
  msgid "Delete All"
1289
  msgstr ""
1290
 
1291
- #: wpf-admin/tools-tabs/antispam.php:154
1292
  msgid "Click to delete Orange marked files"
1293
  msgstr ""
1294
 
1295
- #: wpf-admin/tools-tabs/antispam.php:156
1296
  msgid ""
1297
  "Are you sure you want to delete all ORANGE marked files listed here. Please "
1298
  "download Wordpress /wp-content/uploads/wpforo/ folder to your local computer "
1299
  "before deleting files, this is not undoable."
1300
  msgstr ""
1301
 
1302
- #: wpf-admin/tools-tabs/antispam.php:160
1303
  msgid "Click to delete Red marked files"
1304
  msgstr ""
1305
 
1306
- #: wpf-admin/tools-tabs/antispam.php:162
1307
  msgid ""
1308
  "Are you sure you want to delete all RED marked files listed here. Please "
1309
  "download Wordpress /wp-content/uploads/wpforo/ folder to your local computer "
1310
  "before deleting files, this is not undoable."
1311
  msgstr ""
1312
 
1313
- #: wpf-admin/tools-tabs/antispam.php:166
1314
  msgid "Click to delete Dark Red marked files"
1315
  msgstr ""
1316
 
1317
- #: wpf-admin/tools-tabs/antispam.php:168
1318
  msgid ""
1319
  "Are you sure you want to delete all DARK RED marked files listed here. "
1320
  "Please download Wordpress /wp-content/uploads/wpforo/ folder to your local "
@@ -1415,11 +1415,11 @@ msgstr ""
1415
  msgid "Users will be join this usergroup"
1416
  msgstr ""
1417
 
1418
- #: wpf-includes/class-forums.php:601
1419
  msgid "Add a new SubForum"
1420
  msgstr ""
1421
 
1422
- #: wpf-includes/class-forums.php:601
1423
  msgid "Add a new Forum in this Category"
1424
  msgstr ""
1425
 
@@ -1457,19 +1457,19 @@ msgid ""
1457
  "another one."
1458
  msgstr ""
1459
 
1460
- #: wpf-includes/class-members.php:1128
1461
  msgid "What should be done with wpForo content owned by this user?"
1462
  msgstr ""
1463
 
1464
- #: wpf-includes/class-members.php:1130
1465
  msgid "What should be done with wpForo content owned by these users?"
1466
  msgstr ""
1467
 
1468
- #: wpf-includes/class-members.php:1134
1469
  msgid "Delete all wpForo content."
1470
  msgstr ""
1471
 
1472
- #: wpf-includes/class-members.php:1136
1473
  msgid "Attribute all content to:"
1474
  msgstr ""
1475
 
@@ -1526,7 +1526,7 @@ msgstr ""
1526
  msgid "Open link in a new tab"
1527
  msgstr ""
1528
 
1529
- #: wpf-includes/class-template.php:1085 wpf-includes/wpf-phrases.php:328
1530
  msgid "Theme file not readable"
1531
  msgstr ""
1532
 
@@ -1542,31 +1542,31 @@ msgstr ""
1542
  msgid "You are not permitted to view this attachment"
1543
  msgstr ""
1544
 
1545
- #: wpf-includes/functions-installation.php:807
1546
  msgid "Start Profile Synchronization"
1547
  msgstr ""
1548
 
1549
- #: wpf-includes/functions-installation.php:807
1550
  msgid "Continue Synchronization"
1551
  msgstr ""
1552
 
1553
- #: wpf-includes/functions-installation.php:810
1554
  msgid ""
1555
  "This process may take a few seconds or dozens of minutes, please be patient "
1556
  "and don't close this page."
1557
  msgstr ""
1558
 
1559
- #: wpf-includes/functions-installation.php:811
1560
  msgid ""
1561
  "You can permanently disable this message in Dashboard > Forums > Features "
1562
  "admin page."
1563
  msgstr ""
1564
 
1565
- #: wpf-includes/functions-installation.php:813
1566
  msgid "wpForo Forum Installation | "
1567
  msgstr ""
1568
 
1569
- #: wpf-includes/functions-installation.php:814
1570
  msgid ""
1571
  "Forum users' profile data are not synchronized yet, this step is required! "
1572
  "Please click the button below to complete installation."
@@ -1610,138 +1610,138 @@ msgstr ""
1610
  msgid "Display with Avatars"
1611
  msgstr ""
1612
 
1613
- #: wpf-includes/functions.php:364
1614
  msgid "Unapproved"
1615
  msgstr ""
1616
 
1617
- #: wpf-includes/functions.php:365
1618
  msgid "Published"
1619
  msgstr ""
1620
 
1621
- #: wpf-includes/functions.php:374 wpf-includes/wpf-phrases.php:594
1622
  msgid "Active"
1623
  msgstr ""
1624
 
1625
- #: wpf-includes/functions.php:375
1626
  msgid "Banned"
1627
  msgstr ""
1628
 
1629
- #: wpf-includes/functions.php:388 wpf-includes/functions.php:686
1630
  #: wpf-includes/wpf-phrases.php:50
1631
  msgid "Bulk Actions"
1632
  msgstr ""
1633
 
1634
- #: wpf-includes/functions.php:393 wpf-includes/functions.php:772
1635
  #: wpf-includes/wpf-phrases.php:36
1636
  msgid "Apply"
1637
  msgstr ""
1638
 
1639
- #: wpf-includes/functions.php:402 wpf-includes/wpf-phrases.php:301
1640
  msgid "Show all forums"
1641
  msgstr ""
1642
 
1643
- #: wpf-includes/functions.php:415 wpf-includes/wpf-phrases.php:351
1644
  msgid "filter by group"
1645
  msgstr ""
1646
 
1647
- #: wpf-includes/functions.php:427
1648
  msgid "filter by status"
1649
  msgstr ""
1650
 
1651
- #: wpf-includes/functions.php:443
1652
  msgid "filter by package"
1653
  msgstr ""
1654
 
1655
- #: wpf-includes/functions.php:472
1656
  msgid "filter by user"
1657
  msgstr ""
1658
 
1659
- #: wpf-includes/functions.php:492 wpf-includes/functions.php:694
1660
  #: wpf-includes/wpf-phrases.php:386
1661
  msgid "item"
1662
  msgstr ""
1663
 
1664
- #: wpf-includes/functions.php:525 wpf-includes/functions.php:541
1665
  #: wpf-includes/wpf-phrases.php:285
1666
  msgid "Select All"
1667
  msgstr ""
1668
 
1669
- #: wpf-includes/functions.php:530 wpf-includes/functions.php:546
1670
  msgid "Type"
1671
  msgstr ""
1672
 
1673
- #: wpf-includes/functions.php:603 wpf-includes/wpf-phrases.php:384
1674
  msgid "edit user"
1675
  msgstr ""
1676
 
1677
- #: wpf-includes/functions.php:607 wpf-includes/wpf-phrases.php:383
1678
  msgid "edit profile"
1679
  msgstr ""
1680
 
1681
- #: wpf-includes/functions.php:612
1682
  msgid "unban user"
1683
  msgstr ""
1684
 
1685
- #: wpf-includes/functions.php:612
1686
  msgid "ban user"
1687
  msgstr ""
1688
 
1689
- #: wpf-includes/functions.php:612
1690
  msgid "Are you sure, you want to unban this user?"
1691
  msgstr ""
1692
 
1693
- #: wpf-includes/functions.php:612
1694
  msgid "Are you sure, you want to ban this user?"
1695
  msgstr ""
1696
 
1697
- #: wpf-includes/functions.php:617 wpf-includes/functions.php:627
1698
  #: wpf-includes/wpf-phrases.php:67
1699
  msgid "Delete this item"
1700
  msgstr ""
1701
 
1702
- #: wpf-includes/functions.php:617 wpf-includes/functions.php:627
1703
  #: wpf-includes/wpf-phrases.php:41
1704
  msgid "Are you sure you whant to DELETE this item?"
1705
  msgstr ""
1706
 
1707
- #: wpf-includes/functions.php:622
1708
  msgid "unapprove this item"
1709
  msgstr ""
1710
 
1711
- #: wpf-includes/functions.php:622
1712
  msgid "Approve this item"
1713
  msgstr ""
1714
 
1715
- #: wpf-includes/functions.php:622
1716
  msgid "unapprove"
1717
  msgstr ""
1718
 
1719
- #: wpf-includes/functions.php:622
1720
  msgid "approve"
1721
  msgstr ""
1722
 
1723
- #: wpf-includes/functions.php:644 wpf-includes/functions.php:645
1724
  #: wpf-includes/wpf-phrases.php:405
1725
  msgid "view"
1726
  msgstr ""
1727
 
1728
- #: wpf-includes/functions.php:665
1729
  msgid "Topic"
1730
  msgstr ""
1731
 
1732
- #: wpf-includes/functions.php:665
1733
  msgid "Post"
1734
  msgstr ""
1735
 
1736
- #: wpf-includes/functions.php:678 wpf-includes/wpf-phrases.php:201
1737
  msgid "No items found"
1738
  msgstr ""
1739
 
1740
- #: wpf-includes/functions.php:771 wpf-includes/wpf-phrases.php:141
1741
  msgid "Items"
1742
  msgstr ""
1743
 
1744
- #: wpf-includes/functions.php:1065
1745
  #, php-format
1746
  msgid "Could not write file %s"
1747
  msgstr ""
@@ -1760,69 +1760,69 @@ msgstr ""
1760
  msgid "Uninstall"
1761
  msgstr ""
1762
 
1763
- #: wpf-includes/wpf-hooks.php:1057 wpf-includes/wpf-phrases.php:188
1764
  msgid "Move"
1765
  msgstr ""
1766
 
1767
- #: wpf-includes/wpf-hooks.php:1092
1768
  msgid "Clear"
1769
  msgstr ""
1770
 
1771
- #: wpf-includes/wpf-hooks.php:1092
1772
  msgid "Default"
1773
  msgstr ""
1774
 
1775
- #: wpf-includes/wpf-hooks.php:1092
1776
  msgid "Select Color"
1777
  msgstr ""
1778
 
1779
- #: wpf-includes/wpf-hooks.php:1115
1780
  msgid ""
1781
  "IMPORTANT: wpForo can't work with default permalink, please change permalink "
1782
  "structure"
1783
  msgstr ""
1784
 
1785
- #: wpf-includes/wpf-hooks.php:1136 wpf-includes/wpf-phrases.php:413
1786
  msgid "wpForo Usergroup"
1787
  msgstr ""
1788
 
1789
- #: wpf-includes/wpf-hooks.php:1144 wpf-includes/wpf-phrases.php:412
1790
  msgid "wpForo User Timezone"
1791
  msgstr ""
1792
 
1793
- #: wpf-includes/wpf-hooks.php:1333 wpf-includes/wpf-hooks.php:1422
1794
  msgid "Please Moderate: "
1795
  msgstr ""
1796
 
1797
- #: wpf-includes/wpf-hooks.php:1334
1798
  msgid ""
1799
  "This topic is currently unapproved. You can approve topics in Dashboard "
1800
  "&raquo; Forums &raquo; Moderation admin page."
1801
  msgstr ""
1802
 
1803
- #: wpf-includes/wpf-hooks.php:1423
1804
  msgid ""
1805
  "This post is currently unapproved. You can approve posts in Dashboard "
1806
  "&raquo; Forums &raquo; Moderation admin page."
1807
  msgstr ""
1808
 
1809
- #: wpf-includes/wpf-hooks.php:1600 wpf-includes/wpf-hooks.php:1646
1810
  msgid "New Forum"
1811
  msgstr ""
1812
 
1813
- #: wpf-includes/wpf-hooks.php:1608
1814
  msgid "New User Group"
1815
  msgstr ""
1816
 
1817
- #: wpf-includes/wpf-hooks.php:1616 wpf-includes/wpf-hooks.php:1714
1818
  msgid "New Phrase"
1819
  msgstr ""
1820
 
1821
- #: wpf-includes/wpf-hooks.php:1631
1822
  msgid "Community"
1823
  msgstr ""
1824
 
1825
- #: wpf-includes/wpf-hooks.php:1698
1826
  msgid "New UserGroup"
1827
  msgstr ""
1828
 
@@ -3641,6 +3641,22 @@ msgstr ""
3641
  msgid "Submit"
3642
  msgstr ""
3643
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3644
  #: wpforo.php:401
3645
  msgid ""
3646
  "Provides a safe way to communicate directly with other members. Messages are "
@@ -3666,7 +3682,7 @@ msgid ""
3666
  msgstr ""
3667
 
3668
  #. Plugin Name of the plugin/theme
3669
- msgid "Forum - wpForo"
3670
  msgstr ""
3671
 
3672
  #. 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: 2017-06-09 17:34+0400\n"
9
  "PO-Revision-Date: 2016-06-28 21:09+0400\n"
10
  "Last-Translator: \n"
11
  "Language-Team: \n"
67
 
68
  #: wpf-admin/admin.php:26 wpf-admin/admin.php:28 wpf-admin/dashboard.php:138
69
  #: wpf-admin/options-tabs/styles.php:16 wpf-admin/options.php:15
70
+ #: wpf-includes/wpf-hooks.php:1638 wpf-includes/wpf-phrases.php:123
71
  msgid "Forums"
72
  msgstr ""
73
 
74
  #: wpf-admin/admin.php:29 wpf-includes/wpf-hooks.php:22
75
+ #: wpf-includes/wpf-hooks.php:1654
76
  msgid "Settings"
77
  msgstr ""
78
 
79
+ #: wpf-admin/admin.php:30 wpf-includes/wpf-hooks.php:1663
80
  msgid "Tools"
81
  msgstr ""
82
 
83
+ #: wpf-admin/admin.php:31 wpf-includes/wpf-hooks.php:1672
84
  msgid "Moderation"
85
  msgstr ""
86
 
87
  #: wpf-admin/admin.php:32 wpf-admin/dashboard.php:150 wpf-admin/member.php:10
88
+ #: wpf-admin/options.php:18 wpf-includes/wpf-hooks.php:1681
89
  #: wpf-includes/wpf-phrases.php:178
90
  msgid "Members"
91
  msgstr ""
92
 
93
  #: wpf-admin/admin.php:33 wpf-admin/usergroup.php:8
94
+ #: wpf-includes/wpf-hooks.php:1690
95
  msgid "Usergroups"
96
  msgstr ""
97
 
98
+ #: wpf-admin/admin.php:34 wpf-includes/wpf-hooks.php:1706
99
  #: wpf-includes/wpf-phrases.php:600
100
  msgid "Phrases"
101
  msgstr ""
102
 
103
+ #: wpf-admin/admin.php:35 wpf-includes/wpf-hooks.php:1722
104
  #: wpf-includes/wpf-phrases.php:601
105
  msgid "Themes"
106
  msgstr ""
107
 
108
  #: wpf-admin/admin.php:36 wpf-admin/options.php:23
109
+ #: wpf-includes/wpf-hooks.php:1731 wpf-includes/wpf-phrases.php:25
110
  msgid "Addons"
111
  msgstr ""
112
 
172
  msgstr ""
173
 
174
  #: wpf-admin/dashboard.php:142 wpf-admin/options-tabs/styles.php:22
175
+ #: wpf-includes/class-forums.php:606 wpf-includes/wpf-phrases.php:339
176
  msgid "Topics"
177
  msgstr ""
178
 
179
+ #: wpf-admin/dashboard.php:146 wpf-includes/class-forums.php:606
180
  #: wpf-includes/wpf-phrases.php:233
181
  msgid "Posts"
182
  msgstr ""
240
  msgid "Delete User Cache"
241
  msgstr ""
242
 
243
+ #: wpf-admin/forum.php:13 wpf-includes/functions.php:769
244
  #: wpf-includes/wpf-phrases.php:302
245
  msgid "Show on screen"
246
  msgstr ""
270
  msgid "Number of Columns"
271
  msgstr ""
272
 
273
+ #: wpf-admin/forum.php:32 wpf-includes/functions.php:783
274
  #: wpf-includes/wpf-phrases.php:275
275
  msgid "Screen Options"
276
  msgstr ""
355
  msgstr ""
356
 
357
  #: wpf-admin/forum.php:153 wpf-admin/themes.php:73
358
+ #: wpf-admin/tools-tabs/antispam.php:139 wpf-admin/usergroup.php:37
359
+ #: wpf-admin/usergroup.php:133 wpf-includes/wpf-hooks.php:1057
360
  #: wpf-includes/wpf-phrases.php:66
361
  msgid "Delete"
362
  msgstr ""
363
 
364
  #: wpf-admin/forum.php:154 wpf-admin/usergroup.php:39
365
+ #: wpf-includes/class-forums.php:612 wpf-includes/wpf-phrases.php:356
366
  msgid "View"
367
  msgstr ""
368
 
458
  msgid "Admin"
459
  msgstr ""
460
 
461
+ #: wpf-admin/options-tabs/accesses.php:32 wpf-includes/class-forums.php:608
462
+ #: wpf-includes/functions.php:601 wpf-includes/wpf-phrases.php:382
463
  msgid "edit"
464
  msgstr ""
465
 
469
  "to this access will lost all forum permissions."
470
  msgstr ""
471
 
472
+ #: wpf-admin/options-tabs/accesses.php:34 wpf-includes/class-forums.php:610
473
+ #: wpf-includes/functions.php:619 wpf-includes/functions.php:629
474
  #: wpf-includes/wpf-phrases.php:381
475
  msgid "delete"
476
  msgstr ""
585
 
586
  #: wpf-admin/options-tabs/emails.php:99 wpf-admin/options-tabs/features.php:71
587
  #: wpf-admin/options-tabs/forums.php:16 wpf-admin/options-tabs/general.php:82
588
+ #: wpf-admin/options-tabs/members.php:128 wpf-admin/options-tabs/posts.php:67
589
+ #: wpf-admin/options-tabs/styles.php:93 wpf-admin/tools-tabs/antispam.php:180
590
  #: wpf-admin/tools-tabs/cleanup.php:49 wpf-includes/wpf-phrases.php:345
591
  msgid "Update Options"
592
  msgstr ""
1264
  msgid "Directory"
1265
  msgstr ""
1266
 
1267
+ #: wpf-admin/tools-tabs/antispam.php:139
1268
  msgid "Delete this file"
1269
  msgstr ""
1270
 
1271
+ #: wpf-admin/tools-tabs/antispam.php:139
1272
  msgid "Are you sure you want to permanently delete this file?"
1273
  msgstr ""
1274
 
1275
+ #: wpf-admin/tools-tabs/antispam.php:150
1276
  msgid "Click to delete Blue marked files"
1277
  msgstr ""
1278
 
1279
+ #: wpf-admin/tools-tabs/antispam.php:151
1280
  msgid ""
1281
  "Are you sure you want to delete all BLUE marked files listed here. Please "
1282
  "download Wordpress /wp-content/uploads/wpforo/ folder to your local computer "
1283
  "before deleting files, this is not undoable."
1284
  msgstr ""
1285
 
1286
+ #: wpf-admin/tools-tabs/antispam.php:152 wpf-admin/tools-tabs/antispam.php:158
1287
+ #: wpf-admin/tools-tabs/antispam.php:164 wpf-admin/tools-tabs/antispam.php:170
1288
  msgid "Delete All"
1289
  msgstr ""
1290
 
1291
+ #: wpf-admin/tools-tabs/antispam.php:155
1292
  msgid "Click to delete Orange marked files"
1293
  msgstr ""
1294
 
1295
+ #: wpf-admin/tools-tabs/antispam.php:157
1296
  msgid ""
1297
  "Are you sure you want to delete all ORANGE marked files listed here. Please "
1298
  "download Wordpress /wp-content/uploads/wpforo/ folder to your local computer "
1299
  "before deleting files, this is not undoable."
1300
  msgstr ""
1301
 
1302
+ #: wpf-admin/tools-tabs/antispam.php:161
1303
  msgid "Click to delete Red marked files"
1304
  msgstr ""
1305
 
1306
+ #: wpf-admin/tools-tabs/antispam.php:163
1307
  msgid ""
1308
  "Are you sure you want to delete all RED marked files listed here. Please "
1309
  "download Wordpress /wp-content/uploads/wpforo/ folder to your local computer "
1310
  "before deleting files, this is not undoable."
1311
  msgstr ""
1312
 
1313
+ #: wpf-admin/tools-tabs/antispam.php:167
1314
  msgid "Click to delete Dark Red marked files"
1315
  msgstr ""
1316
 
1317
+ #: wpf-admin/tools-tabs/antispam.php:169
1318
  msgid ""
1319
  "Are you sure you want to delete all DARK RED marked files listed here. "
1320
  "Please download Wordpress /wp-content/uploads/wpforo/ folder to your local "
1415
  msgid "Users will be join this usergroup"
1416
  msgstr ""
1417
 
1418
+ #: wpf-includes/class-forums.php:607
1419
  msgid "Add a new SubForum"
1420
  msgstr ""
1421
 
1422
+ #: wpf-includes/class-forums.php:607
1423
  msgid "Add a new Forum in this Category"
1424
  msgstr ""
1425
 
1457
  "another one."
1458
  msgstr ""
1459
 
1460
+ #: wpf-includes/class-members.php:1129
1461
  msgid "What should be done with wpForo content owned by this user?"
1462
  msgstr ""
1463
 
1464
+ #: wpf-includes/class-members.php:1131
1465
  msgid "What should be done with wpForo content owned by these users?"
1466
  msgstr ""
1467
 
1468
+ #: wpf-includes/class-members.php:1135
1469
  msgid "Delete all wpForo content."
1470
  msgstr ""
1471
 
1472
+ #: wpf-includes/class-members.php:1137
1473
  msgid "Attribute all content to:"
1474
  msgstr ""
1475
 
1526
  msgid "Open link in a new tab"
1527
  msgstr ""
1528
 
1529
+ #: wpf-includes/class-template.php:1091 wpf-includes/wpf-phrases.php:328
1530
  msgid "Theme file not readable"
1531
  msgstr ""
1532
 
1542
  msgid "You are not permitted to view this attachment"
1543
  msgstr ""
1544
 
1545
+ #: wpf-includes/functions-installation.php:815
1546
  msgid "Start Profile Synchronization"
1547
  msgstr ""
1548
 
1549
+ #: wpf-includes/functions-installation.php:815
1550
  msgid "Continue Synchronization"
1551
  msgstr ""
1552
 
1553
+ #: wpf-includes/functions-installation.php:818
1554
  msgid ""
1555
  "This process may take a few seconds or dozens of minutes, please be patient "
1556
  "and don't close this page."
1557
  msgstr ""
1558
 
1559
+ #: wpf-includes/functions-installation.php:819
1560
  msgid ""
1561
  "You can permanently disable this message in Dashboard > Forums > Features "
1562
  "admin page."
1563
  msgstr ""
1564
 
1565
+ #: wpf-includes/functions-installation.php:821
1566
  msgid "wpForo Forum Installation | "
1567
  msgstr ""
1568
 
1569
+ #: wpf-includes/functions-installation.php:822
1570
  msgid ""
1571
  "Forum users' profile data are not synchronized yet, this step is required! "
1572
  "Please click the button below to complete installation."
1610
  msgid "Display with Avatars"
1611
  msgstr ""
1612
 
1613
+ #: wpf-includes/functions.php:366
1614
  msgid "Unapproved"
1615
  msgstr ""
1616
 
1617
+ #: wpf-includes/functions.php:367
1618
  msgid "Published"
1619
  msgstr ""
1620
 
1621
+ #: wpf-includes/functions.php:376 wpf-includes/wpf-phrases.php:594
1622
  msgid "Active"
1623
  msgstr ""
1624
 
1625
+ #: wpf-includes/functions.php:377
1626
  msgid "Banned"
1627
  msgstr ""
1628
 
1629
+ #: wpf-includes/functions.php:390 wpf-includes/functions.php:688
1630
  #: wpf-includes/wpf-phrases.php:50
1631
  msgid "Bulk Actions"
1632
  msgstr ""
1633
 
1634
+ #: wpf-includes/functions.php:395 wpf-includes/functions.php:774
1635
  #: wpf-includes/wpf-phrases.php:36
1636
  msgid "Apply"
1637
  msgstr ""
1638
 
1639
+ #: wpf-includes/functions.php:404 wpf-includes/wpf-phrases.php:301
1640
  msgid "Show all forums"
1641
  msgstr ""
1642
 
1643
+ #: wpf-includes/functions.php:417 wpf-includes/wpf-phrases.php:351
1644
  msgid "filter by group"
1645
  msgstr ""
1646
 
1647
+ #: wpf-includes/functions.php:429
1648
  msgid "filter by status"
1649
  msgstr ""
1650
 
1651
+ #: wpf-includes/functions.php:445
1652
  msgid "filter by package"
1653
  msgstr ""
1654
 
1655
+ #: wpf-includes/functions.php:474
1656
  msgid "filter by user"
1657
  msgstr ""
1658
 
1659
+ #: wpf-includes/functions.php:494 wpf-includes/functions.php:696
1660
  #: wpf-includes/wpf-phrases.php:386
1661
  msgid "item"
1662
  msgstr ""
1663
 
1664
+ #: wpf-includes/functions.php:527 wpf-includes/functions.php:543
1665
  #: wpf-includes/wpf-phrases.php:285
1666
  msgid "Select All"
1667
  msgstr ""
1668
 
1669
+ #: wpf-includes/functions.php:532 wpf-includes/functions.php:548
1670
  msgid "Type"
1671
  msgstr ""
1672
 
1673
+ #: wpf-includes/functions.php:605 wpf-includes/wpf-phrases.php:384
1674
  msgid "edit user"
1675
  msgstr ""
1676
 
1677
+ #: wpf-includes/functions.php:609 wpf-includes/wpf-phrases.php:383
1678
  msgid "edit profile"
1679
  msgstr ""
1680
 
1681
+ #: wpf-includes/functions.php:614
1682
  msgid "unban user"
1683
  msgstr ""
1684
 
1685
+ #: wpf-includes/functions.php:614
1686
  msgid "ban user"
1687
  msgstr ""
1688
 
1689
+ #: wpf-includes/functions.php:614
1690
  msgid "Are you sure, you want to unban this user?"
1691
  msgstr ""
1692
 
1693
+ #: wpf-includes/functions.php:614
1694
  msgid "Are you sure, you want to ban this user?"
1695
  msgstr ""
1696
 
1697
+ #: wpf-includes/functions.php:619 wpf-includes/functions.php:629
1698
  #: wpf-includes/wpf-phrases.php:67
1699
  msgid "Delete this item"
1700
  msgstr ""
1701
 
1702
+ #: wpf-includes/functions.php:619 wpf-includes/functions.php:629
1703
  #: wpf-includes/wpf-phrases.php:41
1704
  msgid "Are you sure you whant to DELETE this item?"
1705
  msgstr ""
1706
 
1707
+ #: wpf-includes/functions.php:624
1708
  msgid "unapprove this item"
1709
  msgstr ""
1710
 
1711
+ #: wpf-includes/functions.php:624
1712
  msgid "Approve this item"
1713
  msgstr ""
1714
 
1715
+ #: wpf-includes/functions.php:624
1716
  msgid "unapprove"
1717
  msgstr ""
1718
 
1719
+ #: wpf-includes/functions.php:624
1720
  msgid "approve"
1721
  msgstr ""
1722
 
1723
+ #: wpf-includes/functions.php:646 wpf-includes/functions.php:647
1724
  #: wpf-includes/wpf-phrases.php:405
1725
  msgid "view"
1726
  msgstr ""
1727
 
1728
+ #: wpf-includes/functions.php:667
1729
  msgid "Topic"
1730
  msgstr ""
1731
 
1732
+ #: wpf-includes/functions.php:667
1733
  msgid "Post"
1734
  msgstr ""
1735
 
1736
+ #: wpf-includes/functions.php:680 wpf-includes/wpf-phrases.php:201
1737
  msgid "No items found"
1738
  msgstr ""
1739
 
1740
+ #: wpf-includes/functions.php:773 wpf-includes/wpf-phrases.php:141
1741
  msgid "Items"
1742
  msgstr ""
1743
 
1744
+ #: wpf-includes/functions.php:1067
1745
  #, php-format
1746
  msgid "Could not write file %s"
1747
  msgstr ""
1760
  msgid "Uninstall"
1761
  msgstr ""
1762
 
1763
+ #: wpf-includes/wpf-hooks.php:1056 wpf-includes/wpf-phrases.php:188
1764
  msgid "Move"
1765
  msgstr ""
1766
 
1767
+ #: wpf-includes/wpf-hooks.php:1091
1768
  msgid "Clear"
1769
  msgstr ""
1770
 
1771
+ #: wpf-includes/wpf-hooks.php:1091
1772
  msgid "Default"
1773
  msgstr ""
1774
 
1775
+ #: wpf-includes/wpf-hooks.php:1091
1776
  msgid "Select Color"
1777
  msgstr ""
1778
 
1779
+ #: wpf-includes/wpf-hooks.php:1114
1780
  msgid ""
1781
  "IMPORTANT: wpForo can't work with default permalink, please change permalink "
1782
  "structure"
1783
  msgstr ""
1784
 
1785
+ #: wpf-includes/wpf-hooks.php:1135 wpf-includes/wpf-phrases.php:413
1786
  msgid "wpForo Usergroup"
1787
  msgstr ""
1788
 
1789
+ #: wpf-includes/wpf-hooks.php:1143 wpf-includes/wpf-phrases.php:412
1790
  msgid "wpForo User Timezone"
1791
  msgstr ""
1792
 
1793
+ #: wpf-includes/wpf-hooks.php:1332 wpf-includes/wpf-hooks.php:1421
1794
  msgid "Please Moderate: "
1795
  msgstr ""
1796
 
1797
+ #: wpf-includes/wpf-hooks.php:1333
1798
  msgid ""
1799
  "This topic is currently unapproved. You can approve topics in Dashboard "
1800
  "&raquo; Forums &raquo; Moderation admin page."
1801
  msgstr ""
1802
 
1803
+ #: wpf-includes/wpf-hooks.php:1422
1804
  msgid ""
1805
  "This post is currently unapproved. You can approve posts in Dashboard "
1806
  "&raquo; Forums &raquo; Moderation admin page."
1807
  msgstr ""
1808
 
1809
+ #: wpf-includes/wpf-hooks.php:1599 wpf-includes/wpf-hooks.php:1645
1810
  msgid "New Forum"
1811
  msgstr ""
1812
 
1813
+ #: wpf-includes/wpf-hooks.php:1607
1814
  msgid "New User Group"
1815
  msgstr ""
1816
 
1817
+ #: wpf-includes/wpf-hooks.php:1615 wpf-includes/wpf-hooks.php:1713
1818
  msgid "New Phrase"
1819
  msgstr ""
1820
 
1821
+ #: wpf-includes/wpf-hooks.php:1630
1822
  msgid "Community"
1823
  msgstr ""
1824
 
1825
+ #: wpf-includes/wpf-hooks.php:1697
1826
  msgid "New UserGroup"
1827
  msgstr ""
1828
 
3641
  msgid "Submit"
3642
  msgstr ""
3643
 
3644
+ #: wpf-includes/wpf-phrases.php:675
3645
+ msgid "Usergroup"
3646
+ msgstr ""
3647
+
3648
+ #: wpf-includes/wpf-phrases.php:676
3649
+ msgid "Rating Title"
3650
+ msgstr ""
3651
+
3652
+ #: wpf-includes/wpf-phrases.php:677
3653
+ msgid "User Title"
3654
+ msgstr ""
3655
+
3656
+ #: wpf-includes/wpf-phrases.php:678
3657
+ msgid "Anonymous"
3658
+ msgstr ""
3659
+
3660
  #: wpforo.php:401
3661
  msgid ""
3662
  "Provides a safe way to communicate directly with other members. Messages are "
3682
  msgstr ""
3683
 
3684
  #. Plugin Name of the plugin/theme
3685
+ msgid "Forums - wpForo"
3686
  msgstr ""
3687
 
3688
  #. Plugin URI of the plugin/theme
wpf-themes/classic/layouts/1/forum.php CHANGED
@@ -86,11 +86,11 @@
86
  <ul>
87
  <?php foreach($topics as $topic) : ?>
88
  <?php $last_post = wpforo_post($topic['last_post']) ?>
89
- <?php $member = $wpforo->member->get_member($last_post['userid']); ?>
90
  <li>
91
  <div class="wpforo-last-topic-title" title="<?php $icon_title = $wpforo->tpl->icon('topic', $topic, false, 'title'); if( $icon_title ) echo esc_html($icon_title) ?>"><i class="fa <?php $wpforo->tpl->icon('topic', $topic); ?> wpfcl-0"></i> &nbsp;
92
  <a href="<?php echo esc_url($last_post['url']) ?>"><?php echo esc_html(wpforo_text($topic['title'], 45, false)) ?></a></div>
93
- <div class="wpforo-last-topic-user" title="<?php echo esc_attr($member['display_name']) ?>"><a href="<?php echo esc_url($member['profile_url']) ?>"><?php wpforo_phrase('by'); ?> <?php echo esc_html(wpforo_text($member['display_name'], 9, false)) ?></a></div>
94
  <div class="wpforo-last-topic-date"><?php wpforo_date($topic['modified']); ?></div>
95
  <br class="wpf-clear" />
96
  </li>
86
  <ul>
87
  <?php foreach($topics as $topic) : ?>
88
  <?php $last_post = wpforo_post($topic['last_post']) ?>
89
+ <?php $member = wpforo_member($last_post); ?>
90
  <li>
91
  <div class="wpforo-last-topic-title" title="<?php $icon_title = $wpforo->tpl->icon('topic', $topic, false, 'title'); if( $icon_title ) echo esc_html($icon_title) ?>"><i class="fa <?php $wpforo->tpl->icon('topic', $topic); ?> wpfcl-0"></i> &nbsp;
92
  <a href="<?php echo esc_url($last_post['url']) ?>"><?php echo esc_html(wpforo_text($topic['title'], 45, false)) ?></a></div>
93
+ <div class="wpforo-last-topic-user" title="<?php echo esc_attr($member['display_name']) ?>"><?php wpforo_member_link($member, 'by', 9); ?></div>
94
  <div class="wpforo-last-topic-date"><?php wpforo_date($topic['modified']); ?></div>
95
  <br class="wpf-clear" />
96
  </li>
wpf-themes/classic/layouts/1/post.php CHANGED
@@ -13,7 +13,7 @@
13
 
14
  foreach($posts as $key => $post) : ?>
15
 
16
- <?php $member = $wpforo->member->get_member( $post['userid']); ?>
17
  <div id="post-<?php echo intval($post['postid']) ?>" class="post-wrap">
18
  <div class="wpforo-post wpfcl-1">
19
  <div class="wpf-left">
@@ -21,7 +21,7 @@
21
  <div class="author-avatar"><?php echo $wpforo->member->avatar( $member, 'alt="'.esc_attr($member['display_name']).'"', 80, true ) ?></div>
22
  <?php endif ?>
23
  <div class="author-data">
24
- <div class="author-name"><span><?php $wpforo->member->show_online_indicator($member['userid']) ?></span>&nbsp;<a href="<?php echo esc_url($member['profile_url']) ?>"><?php echo esc_html($member['display_name']) ?></a></div>
25
  <div class="author-title">
26
  <?php wpforo_member_title($member) ?>
27
  </div>
13
 
14
  foreach($posts as $key => $post) : ?>
15
 
16
+ <?php $member = wpforo_member($post); ?>
17
  <div id="post-<?php echo intval($post['postid']) ?>" class="post-wrap">
18
  <div class="wpforo-post wpfcl-1">
19
  <div class="wpf-left">
21
  <div class="author-avatar"><?php echo $wpforo->member->avatar( $member, 'alt="'.esc_attr($member['display_name']).'"', 80, true ) ?></div>
22
  <?php endif ?>
23
  <div class="author-data">
24
+ <div class="author-name"><span><?php $wpforo->member->show_online_indicator($member['userid']) ?></span>&nbsp;<?php wpforo_member_link($member); ?></div>
25
  <div class="author-title">
26
  <?php wpforo_member_title($member) ?>
27
  </div>
wpf-themes/classic/layouts/1/topic.php CHANGED
@@ -14,15 +14,15 @@
14
  <?php foreach($topics as $key => $topic) : ?>
15
 
16
  <?php
17
- $member = $wpforo->member->get_member($topic['userid']);
18
  if(isset($topic['last_post']) && $topic['last_post'] != 0){
19
  $last_post = wpforo_post($topic['last_post']);
20
- $last_poster = (!empty($last_post)) ? $wpforo->member->get_member($last_post['userid']) : array('ID' => 0, 'display_name' => wpforo_phrase('Guest'));
21
  }
22
  if(isset($topic['first_postid']) && $topic['first_postid'] != 0){
23
  $first_post = wpforo_post($topic['first_postid']);
24
  $intro_posts = $wpforo->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 = (!empty($first_post)) ? $wpforo->member->get_member($first_post['userid']) : array('display_name' => wpforo_phrase('Guest'));
26
  $posts = $wpforo->post->get_posts( array('topicid' => $topic['topicid'], 'exclude' => $topic['first_postid'], 'order' => 'DESC', 'row_count' => $intro_posts) );
27
  $posts = array_reverse($posts);
28
  }
@@ -58,16 +58,16 @@
58
  <ul>
59
  <li>
60
  <div class="wpforo-last-post-title"><i class="fa fa-comments fa-flip-horizontal fa-0x wpfcl-0"></i> &nbsp; <a href="<?php echo esc_url($first_post['url']) ?>"><?php echo esc_html( wpforo_text($first_post['body'], 50, false)) ?></a></div>
61
- <div class="wpforo-last-post-user"><a href="<?php echo esc_url($first_poster['profile_url']) ?>"><?php echo sprintf( wpforo_phrase('by %s', FALSE), esc_html( wpforo_text($first_poster['display_name'], 9, FALSE)) ) ?></a></div>
62
  <div class="wpforo-last-post-date"><?php wpforo_date($first_post['created']); ?></div>
63
  <br class="wpf-clear">
64
  </li>
65
  <?php if(!empty($posts) && is_array($posts)) : ?>
66
  <?php foreach($posts as $post) : ?>
67
- <?php $poster = $wpforo->member->get_member($post['userid']); ?>
68
  <li>
69
  <div class="wpforo-last-post-title"><i class="fa fa-reply fa-rotate-180 fa-0x wpfcl-0"></i> &nbsp; <a href="<?php echo esc_url( wpforo_post($post['postid'], 'url') ); ?>" title="<?php wpforo_phrase('REPLY:') ?> <?php echo esc_html( wpforo_text($post['body'], 100, false)) ?>"><?php echo (( $post_body = esc_html(wpforo_text($post['body'], 50, FALSE)) ) ? $post_body : esc_html($post['title'])) ?></a></div>
70
- <div class="wpforo-last-post-user"><a href="<?php echo esc_url($poster['profile_url']) ?>"><?php echo sprintf( wpforo_phrase('by %s', FALSE), esc_html(wpforo_text($poster['display_name'], 9, FALSE)) ) ?></a></div>
71
  <div class="wpforo-last-post-date"><?php wpforo_date($post['created']); ?></div>
72
  <br class="wpf-clear">
73
  </li>
14
  <?php foreach($topics as $key => $topic) : ?>
15
 
16
  <?php
17
+ $member = wpforo_member($topic);
18
  if(isset($topic['last_post']) && $topic['last_post'] != 0){
19
  $last_post = wpforo_post($topic['last_post']);
20
+ $last_poster = wpforo_member($last_post);
21
  }
22
  if(isset($topic['first_postid']) && $topic['first_postid'] != 0){
23
  $first_post = wpforo_post($topic['first_postid']);
24
  $intro_posts = $wpforo->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 = $wpforo->post->get_posts( array('topicid' => $topic['topicid'], 'exclude' => $topic['first_postid'], 'order' => 'DESC', 'row_count' => $intro_posts) );
27
  $posts = array_reverse($posts);
28
  }
58
  <ul>
59
  <li>
60
  <div class="wpforo-last-post-title"><i class="fa fa-comments fa-flip-horizontal fa-0x wpfcl-0"></i> &nbsp; <a href="<?php echo esc_url($first_post['url']) ?>"><?php echo esc_html( wpforo_text($first_post['body'], 50, false)) ?></a></div>
61
+ <div class="wpforo-last-post-user"><?php wpforo_member_link($first_poster, 'by %s', 9); ?></div>
62
  <div class="wpforo-last-post-date"><?php wpforo_date($first_post['created']); ?></div>
63
  <br class="wpf-clear">
64
  </li>
65
  <?php if(!empty($posts) && is_array($posts)) : ?>
66
  <?php foreach($posts as $post) : ?>
67
+ <?php $poster = wpforo_member($post); ?>
68
  <li>
69
  <div class="wpforo-last-post-title"><i class="fa fa-reply fa-rotate-180 fa-0x wpfcl-0"></i> &nbsp; <a href="<?php echo esc_url( wpforo_post($post['postid'], 'url') ); ?>" title="<?php wpforo_phrase('REPLY:') ?> <?php echo esc_html( wpforo_text($post['body'], 100, false)) ?>"><?php echo (( $post_body = esc_html(wpforo_text($post['body'], 50, FALSE)) ) ? $post_body : esc_html($post['title'])) ?></a></div>
70
+ <div class="wpforo-last-post-user"><?php wpforo_member_link($poster, 'by %s', 9); ?></div>
71
  <div class="wpforo-last-post-date"><?php wpforo_date($post['created']); ?></div>
72
  <br class="wpf-clear">
73
  </li>
wpf-themes/classic/layouts/2/forum.php CHANGED
@@ -66,16 +66,24 @@
66
 
67
  </div><!-- wpforo-forum-info -->
68
 
69
- <?php if($forum['last_userid'] != 0) : ?>
70
- <?php $member = $wpforo->member->get_member($forum['last_userid']) ?>
71
  <?php $last_post = wpforo_post($forum['last_postid']) ?>
72
  <?php $last_post_topic = wpforo_topic($last_post['topicid']) ?>
 
73
  <div class="wpforo-last-post">
74
  <p class="wpforo-last-post-title"><a href="<?php echo esc_url($last_post['url']) ?>"><?php wpforo_text($last_post_topic['title'], 30); ?></a></p>
75
- <p class="wpforo-last-post-info"><?php wpforo_phrase('by'); ?>&nbsp;<a href="<?php echo esc_url($member['profile_url']) ?>"><?php echo esc_html($member['display_name']) ?></a>, <?php wpforo_date($forum['last_post_date']) ?></p>
76
  </div>
77
  <?php if( wpforo_feature('avatars', $wpforo) ): ?>
78
- <div class="wpforo-last-post-avatar"><a href="<?php echo esc_url($member['profile_url']) ?>"><?php echo $wpforo->member->get_avatar($forum['last_userid'], 'alt="'.esc_attr($member['display_name']).'" title="'.esc_attr($member['display_name']).'"', 40) ?></a></div>
 
 
 
 
 
 
 
 
79
  <?php endif; ?>
80
  <br class="wpf-clear" />
81
  <?php else: ?>
66
 
67
  </div><!-- wpforo-forum-info -->
68
 
69
+ <?php if($forum['last_postid'] != 0) : ?>
 
70
  <?php $last_post = wpforo_post($forum['last_postid']) ?>
71
  <?php $last_post_topic = wpforo_topic($last_post['topicid']) ?>
72
+ <?php $member = wpforo_member($last_post) ?>
73
  <div class="wpforo-last-post">
74
  <p class="wpforo-last-post-title"><a href="<?php echo esc_url($last_post['url']) ?>"><?php wpforo_text($last_post_topic['title'], 30); ?></a></p>
75
+ <p class="wpforo-last-post-info"><?php wpforo_member_link($member, 'by'); ?>, <?php wpforo_date($forum['last_post_date']) ?></p>
76
  </div>
77
  <?php if( wpforo_feature('avatars', $wpforo) ): ?>
78
+ <div class="wpforo-last-post-avatar">
79
+ <?php if( isset($member['profile_url']) && $member['profile_url'] ): ?>
80
+ <a href="<?php echo esc_url($member['profile_url']) ?>">
81
+ <?php echo $wpforo->member->get_avatar($forum['last_userid'], 'alt="'.esc_attr($member['display_name']).'" title="'.esc_attr($member['display_name']).'"', 40) ?>
82
+ </a>
83
+ <?php else: ?>
84
+ <?php echo $wpforo->member->get_avatar($forum['last_userid'], 'alt="'.esc_attr($member['display_name']).'" title="'.esc_attr($member['display_name']).'"', 40) ?>
85
+ <?php endif; ?>
86
+ </div>
87
  <?php endif; ?>
88
  <br class="wpf-clear" />
89
  <?php else: ?>
wpf-themes/classic/layouts/2/post.php CHANGED
@@ -13,7 +13,7 @@
13
 
14
  <?php foreach($posts as $key => $post) : ?>
15
 
16
- <?php $member = $wpforo->member->get_member($post['userid']); ?>
17
  <div id="post-<?php echo intval($post['postid']) ?>" class="post-wrap">
18
  <div class="wpforo-post wpfcl-1">
19
  <div class="wpf-left">
@@ -21,7 +21,7 @@
21
  <div class="author-avatar"><?php echo $wpforo->member->avatar($member, 'alt="'.esc_attr($member['display_name']).'"', 110, true) ?></div>
22
  <?php endif; ?>
23
  <div class="author-data">
24
- <div class="author-name"><span><?php $wpforo->member->show_online_indicator($member['userid']) ?></span>&nbsp;<a href="<?php echo esc_url($member['profile_url']) ?>"><?php echo esc_html($member['display_name']) ?></a></div>
25
  <div class="wpf-member-profile-buttons">
26
  <?php $wpforo->tpl->member_buttons($member) ?>
27
  </div>
13
 
14
  <?php foreach($posts as $key => $post) : ?>
15
 
16
+ <?php $member = wpforo_member($post); ?>
17
  <div id="post-<?php echo intval($post['postid']) ?>" class="post-wrap">
18
  <div class="wpforo-post wpfcl-1">
19
  <div class="wpf-left">
21
  <div class="author-avatar"><?php echo $wpforo->member->avatar($member, 'alt="'.esc_attr($member['display_name']).'"', 110, true) ?></div>
22
  <?php endif; ?>
23
  <div class="author-data">
24
+ <div class="author-name"><span><?php $wpforo->member->show_online_indicator($member['userid']) ?></span>&nbsp;<?php wpforo_member_link($member); ?></div>
25
  <div class="wpf-member-profile-buttons">
26
  <?php $wpforo->tpl->member_buttons($member) ?>
27
  </div>
wpf-themes/classic/layouts/2/topic.php CHANGED
@@ -16,10 +16,10 @@
16
  <?php foreach($topics as $key => $topic) : ?>
17
 
18
  <?php
19
- $member = $wpforo->member->get_member($topic['userid']);
20
  if(isset($topic['last_post']) && $topic['last_post'] != 0){
21
  $last_post = wpforo_post($topic['last_post']);
22
- $last_poster = (!empty($last_post)) ? $wpforo->member->get_member($last_post['userid']) : array('ID' => 0, 'display_name' => wpforo_phrase('Guest'));
23
  }
24
  $classes = $wpforo->tpl->icon('topic', $topic, false);
25
  $class = explode( ' ', $classes); $class = ( isset($class[0]) ) ? 'wpf-' . str_replace('fa-', '', $class[0]) : '';
@@ -28,15 +28,15 @@
28
  <div class="topic-wrap <?php echo $class ?>">
29
  <div class="wpforo-topic">
30
  <?php if( wpforo_feature('avatars', $wpforo) ): ?>
31
- <div class="wpforo-topic-avatar"><?php echo $wpforo->member->avatar($member, 'alt="'.esc_attr($member['display_name']).'"', 36, true) ?></div>
32
  <?php endif; ?>
33
  <div class="wpforo-topic-info">
34
  <p class="wpforo-topic-title"><a href="<?php echo esc_url( wpforo_topic($topic['topicid'], 'url') ) ?>"><i class="fa fa-1x <?php echo $classes ?>" title="<?php $icon_title = $wpforo->tpl->icon('topic', $topic, false, 'title'); if( $icon_title ) echo esc_html($icon_title) ?>"></i> <?php echo esc_html($topic['title']) ?></a></p>
35
- <p class="wpforo-topic-start-info wpfcl-2"><a href="<?php echo esc_url($member['profile_url']) ?>"><?php echo esc_html($member['display_name']) ?></a>, <?php wpforo_date($topic['created']); ?></p>
36
  <div class="wpforo-topic-badges"><?php wpforo_hook('wpforo_topic_info_end', $topic); ?></div>
37
  </div>
38
  <?php if(isset($topic['last_post']) && $topic['last_post'] != 0) : ?>
39
- <div class="wpforo-topic-stat-lastpost"><span><?php wpforo_phrase('by') ?> <a href="<?php echo esc_url($last_poster['profile_url']) ?>"><?php echo esc_html($last_poster['display_name']) ?></a> <a href="<?php echo esc_url($last_post['url']) ?>" title="<?php wpforo_phrase('View the latest post') ?>"><i class="fa fa-chevron-right fa-sx wpfcl-a"></i></a></span><br> <?php wpforo_date($last_post['created']); ?></div>
40
  <?php else: ?>
41
  <div class="wpforo-topic-stat-lastpost"></span><?php wpforo_phrase('Replies not found') ?></div>
42
  <?php endif; ?>
16
  <?php foreach($topics as $key => $topic) : ?>
17
 
18
  <?php
19
+ $member = wpforo_member($topic);
20
  if(isset($topic['last_post']) && $topic['last_post'] != 0){
21
  $last_post = wpforo_post($topic['last_post']);
22
+ $last_poster = wpforo_member($last_post);
23
  }
24
  $classes = $wpforo->tpl->icon('topic', $topic, false);
25
  $class = explode( ' ', $classes); $class = ( isset($class[0]) ) ? 'wpf-' . str_replace('fa-', '', $class[0]) : '';
28
  <div class="topic-wrap <?php echo $class ?>">
29
  <div class="wpforo-topic">
30
  <?php if( wpforo_feature('avatars', $wpforo) ): ?>
31
+ <div class="wpforo-topic-avatar"><?php echo $wpforo->member->avatar($member, 'alt="'.esc_attr($member['display_name']).'"', 48, true) ?></div>
32
  <?php endif; ?>
33
  <div class="wpforo-topic-info">
34
  <p class="wpforo-topic-title"><a href="<?php echo esc_url( wpforo_topic($topic['topicid'], 'url') ) ?>"><i class="fa fa-1x <?php echo $classes ?>" title="<?php $icon_title = $wpforo->tpl->icon('topic', $topic, false, 'title'); if( $icon_title ) echo esc_html($icon_title) ?>"></i> <?php echo esc_html($topic['title']) ?></a></p>
35
+ <p class="wpforo-topic-start-info wpfcl-2"><?php wpforo_member_link($member); ?>, <?php wpforo_date($topic['created']); ?></p>
36
  <div class="wpforo-topic-badges"><?php wpforo_hook('wpforo_topic_info_end', $topic); ?></div>
37
  </div>
38
  <?php if(isset($topic['last_post']) && $topic['last_post'] != 0) : ?>
39
+ <div class="wpforo-topic-stat-lastpost"><span><?php wpforo_member_link($last_poster, 'by'); ?> <a href="<?php echo esc_url($last_post['url']) ?>" title="<?php wpforo_phrase('View the latest post') ?>"><i class="fa fa-chevron-right fa-sx wpfcl-a"></i></a></span><br> <?php wpforo_date($last_post['created']); ?></div>
40
  <?php else: ?>
41
  <div class="wpforo-topic-stat-lastpost"></span><?php wpforo_phrase('Replies not found') ?></div>
42
  <?php endif; ?>
wpf-themes/classic/layouts/3/forum.php CHANGED
@@ -91,7 +91,7 @@
91
  <div class="wpforo-last-topics-list">
92
  <ul>
93
  <?php foreach($topics as $topic) : ?>
94
- <?php $member = $wpforo->member->get_member($topic['userid']) ?>
95
  <li>
96
  <div class="wpforo-last-topic wpfcl-2">
97
  <div class="votes"><div class="count <?php echo $topic['votes'] == 0 ? "wpfcl-6" : "wpfbg-4 wpfcl-3" ?>"><?php echo intval($topic['votes']) ?></div><div class="wpforo-label <?php echo $topic['votes'] == 0 ? "wpfcl-6" : "wpfbg-4 wpfcl-3" ?>"><?php wpforo_phrase('Votes') ?></div></div>
@@ -100,7 +100,7 @@
100
  </div>
101
  <div class="wpforo-last-topic-title">
102
  <a href="<?php echo esc_url( wpforo_topic($topic['topicid'], 'url') ) ?>"><?php echo esc_html($topic['title']) ?></a><br />
103
- <span class="wpforo-last-topic-info wpfcl-2"><?php wpforo_phrase('by') ?> <a href="<?php echo esc_url($member['profile_url']) ?>"><?php echo esc_html($member['display_name']) ?></a>, <?php wpforo_date($topic['modified']); ?></span>
104
  </div>
105
  <div class="wpforo-last-topic-posts wpfcl-2"><div class="count"><?php echo intval($topic['posts']) ?></div><div class="wpforo-label"><?php wpforo_phrase('replies') ?></div></div>
106
  </li>
91
  <div class="wpforo-last-topics-list">
92
  <ul>
93
  <?php foreach($topics as $topic) : ?>
94
+ <?php $member = wpforo_member($topic); ?>
95
  <li>
96
  <div class="wpforo-last-topic wpfcl-2">
97
  <div class="votes"><div class="count <?php echo $topic['votes'] == 0 ? "wpfcl-6" : "wpfbg-4 wpfcl-3" ?>"><?php echo intval($topic['votes']) ?></div><div class="wpforo-label <?php echo $topic['votes'] == 0 ? "wpfcl-6" : "wpfbg-4 wpfcl-3" ?>"><?php wpforo_phrase('Votes') ?></div></div>
100
  </div>
101
  <div class="wpforo-last-topic-title">
102
  <a href="<?php echo esc_url( wpforo_topic($topic['topicid'], 'url') ) ?>"><?php echo esc_html($topic['title']) ?></a><br />
103
+ <span class="wpforo-last-topic-info wpfcl-2"><?php wpforo_member_link($member, 'by'); ?>, <?php wpforo_date($topic['modified']); ?></span>
104
  </div>
105
  <div class="wpforo-last-topic-posts wpfcl-2"><div class="count"><?php echo intval($topic['posts']) ?></div><div class="wpforo-label"><?php wpforo_phrase('replies') ?></div></div>
106
  </li>
wpf-themes/classic/layouts/3/post.php CHANGED
@@ -12,7 +12,7 @@
12
  <?php foreach($posts as $key => $post ) : $is_topic = ( $key ? FALSE : TRUE ); ?>
13
 
14
  <?php if($post['parentid'] == 0): ?>
15
- <?php $member = $wpforo->member->get_member($post['userid']); ?>
16
  <div id="post-<?php echo intval($post['postid']) ?>" class="post-wrap <?php if( !$post['is_first_post'] ) echo 'wpf-answer-wrap' ?>">
17
  <div class="wpforo-post wpfcl-1">
18
  <div class="wpf-left">
@@ -81,7 +81,7 @@
81
  <div class="wpforo-box-l3a-left"><?php echo $wpforo->member->avatar($member, 'alt="'.esc_attr($member['display_name']).'"', 96, true) ?></div>
82
  <?php else: $rsz = 'style="margin-left:10px;"'; endif; ?>
83
  <div class="wpforo-box-l3a-right" <?php echo $rsz; //This is a HTML content// ?>>
84
- <span class="author-name"><a href="<?php echo esc_url($member['profile_url']) ?>"><?php echo esc_html($member['display_name']) ?></a></span>&nbsp;<span><?php $wpforo->member->show_online_indicator($member['userid']) ?></span><br />
85
  <span class="author-title">
86
  <?php wpforo_member_title($member) ?>
87
  </span><br />
@@ -116,7 +116,7 @@
116
  $comments = $wpforo->post->get_posts( array( 'parentid' => $post['postid'] ) );
117
  if(is_array($comments) && !empty($comments)):
118
  foreach($comments as $comment) : ?>
119
- <?php $comment_member = $wpforo->member->get_member($comment['userid']); ?>
120
  <div id="post-<?php echo intval($comment['postid']) ?>" class="comment-wrap">
121
  <div class="wpforo-comment wpfcl-1">
122
  <div class="wpf-left">
@@ -126,8 +126,7 @@
126
  <div class="wpforo-comment-content">
127
  <?php echo wpforo_content_filter( wpforo_kses($comment['body'], 'post') ) ?>
128
  <div class="wpforo-comment-footer">
129
- <span class="wpfcl-0" style="white-space:nowrap"><?php wpforo_phrase('by') ?> <a href="<?php echo esc_url($comment_member['profile_url']) ?>">
130
- <?php echo esc_html($comment_member['display_name']) ?></a>
131
  <?php wpforo_date($comment['created']); ?></span>
132
  <?php do_action( 'wpforo_tpl_post_loop_after_content', $comment, $comment_member ) ?>
133
  <?php wpforo_post_edited($comment); ?>
12
  <?php foreach($posts as $key => $post ) : $is_topic = ( $key ? FALSE : TRUE ); ?>
13
 
14
  <?php if($post['parentid'] == 0): ?>
15
+ <?php $member = wpforo_member($post); ?>
16
  <div id="post-<?php echo intval($post['postid']) ?>" class="post-wrap <?php if( !$post['is_first_post'] ) echo 'wpf-answer-wrap' ?>">
17
  <div class="wpforo-post wpfcl-1">
18
  <div class="wpf-left">
81
  <div class="wpforo-box-l3a-left"><?php echo $wpforo->member->avatar($member, 'alt="'.esc_attr($member['display_name']).'"', 96, true) ?></div>
82
  <?php else: $rsz = 'style="margin-left:10px;"'; endif; ?>
83
  <div class="wpforo-box-l3a-right" <?php echo $rsz; //This is a HTML content// ?>>
84
+ <span class="author-name"><?php wpforo_member_link($member); ?></span>&nbsp;<span><?php $wpforo->member->show_online_indicator($member['userid']) ?></span><br />
85
  <span class="author-title">
86
  <?php wpforo_member_title($member) ?>
87
  </span><br />
116
  $comments = $wpforo->post->get_posts( array( 'parentid' => $post['postid'] ) );
117
  if(is_array($comments) && !empty($comments)):
118
  foreach($comments as $comment) : ?>
119
+ <?php $comment_member = wpforo_member($comment); ?>
120
  <div id="post-<?php echo intval($comment['postid']) ?>" class="comment-wrap">
121
  <div class="wpforo-comment wpfcl-1">
122
  <div class="wpf-left">
126
  <div class="wpforo-comment-content">
127
  <?php echo wpforo_content_filter( wpforo_kses($comment['body'], 'post') ) ?>
128
  <div class="wpforo-comment-footer">
129
+ <span class="wpfcl-0" style="white-space:nowrap"><?php wpforo_member_link($comment_member, 'by'); ?>
 
130
  <?php wpforo_date($comment['created']); ?></span>
131
  <?php do_action( 'wpforo_tpl_post_loop_after_content', $comment, $comment_member ) ?>
132
  <?php wpforo_post_edited($comment); ?>
wpf-themes/classic/layouts/3/topic.php CHANGED
@@ -13,10 +13,10 @@
13
  <?php foreach($topics as $key => $topic) : ?>
14
 
15
  <?php
16
- $member = $wpforo->member->get_member($topic['userid']);
17
  if(isset($topic['last_post']) && $topic['last_post']){
18
  $last_post = wpforo_post($topic['last_post']);
19
- $last_poster = (!empty($last_post)) ? $wpforo->member->get_member($last_post['userid']) : array('ID' => 0, 'display_name' => wpforo_phrase('Guest',false));
20
  }
21
  $topic_url = wpforo_topic($topic['topicid'], 'url');
22
  $classes = $wpforo->tpl->icon('topic', $topic, false);
@@ -29,7 +29,7 @@
29
  <?php endif; ?>
30
  <div class="wpforo-topic-info">
31
  <p class="wpforo-topic-title"><a href="<?php echo esc_url($topic_url) ?>"><i class="fa fa-1x <?php echo $classes ?>" title="<?php $icon_title = $wpforo->tpl->icon('topic', $topic, false, 'title'); if( $icon_title ) echo esc_html($icon_title) ?>"></i> <?php wpforo_text($topic['title'], 70); ?></a></p>
32
- <p class="wpforo-topic-start-info wpfcl-2"><a href="<?php echo esc_url($member['profile_url']) ?>"><?php echo esc_html($member['display_name']) ?></a>, <?php wpforo_date($topic['created']); ?></p>
33
  <div class="wpforo-topic-badges"><?php wpforo_hook('wpforo_topic_info_end', $topic); ?></div>
34
  </div>
35
  <div class="wpforo-topic-status wpfcl-2">
@@ -38,7 +38,7 @@
38
  <div class="views"><div class="count"><?php echo intval($topic['views']) ?></div><div class="wpforo-label"><?php wpforo_phrase('Views') ?></div></div>
39
  </div>
40
  <?php if(isset($topic['last_post']) && $topic['last_post']) : ?>
41
- <div class="wpforo-topic-stat-lastpost"><span style="white-space:nowrap"><?php wpforo_phrase('by') ?>&nbsp;<a href="<?php echo esc_url($last_poster['profile_url']) ?>"><?php wpforo_text($last_poster['display_name'], 9); ?></a> <a href="<?php echo esc_url($last_post['url']) ?>" title="<?php wpforo_phrase('View the latest post') ?>"><i class="fa fa-chevron-right fa-sx wpfcl-a"></i></a></span><br> <?php wpforo_date($last_post['created']); ?></div>
42
  <?php else: ?>
43
  <div class="wpforo-topic-stat-lastpost"><?php wpforo_phrase('Replies not found') ?></div>
44
  <?php endif; ?>
13
  <?php foreach($topics as $key => $topic) : ?>
14
 
15
  <?php
16
+ $member = wpforo_member($topic);
17
  if(isset($topic['last_post']) && $topic['last_post']){
18
  $last_post = wpforo_post($topic['last_post']);
19
+ $last_poster = wpforo_member($last_post);
20
  }
21
  $topic_url = wpforo_topic($topic['topicid'], 'url');
22
  $classes = $wpforo->tpl->icon('topic', $topic, false);
29
  <?php endif; ?>
30
  <div class="wpforo-topic-info">
31
  <p class="wpforo-topic-title"><a href="<?php echo esc_url($topic_url) ?>"><i class="fa fa-1x <?php echo $classes ?>" title="<?php $icon_title = $wpforo->tpl->icon('topic', $topic, false, 'title'); if( $icon_title ) echo esc_html($icon_title) ?>"></i> <?php wpforo_text($topic['title'], 70); ?></a></p>
32
+ <p class="wpforo-topic-start-info wpfcl-2"><?php wpforo_member_link($member); ?>, <?php wpforo_date($topic['created']); ?></p>
33
  <div class="wpforo-topic-badges"><?php wpforo_hook('wpforo_topic_info_end', $topic); ?></div>
34
  </div>
35
  <div class="wpforo-topic-status wpfcl-2">
38
  <div class="views"><div class="count"><?php echo intval($topic['views']) ?></div><div class="wpforo-label"><?php wpforo_phrase('Views') ?></div></div>
39
  </div>
40
  <?php if(isset($topic['last_post']) && $topic['last_post']) : ?>
41
+ <div class="wpforo-topic-stat-lastpost"><span style="white-space:nowrap"><?php wpforo_phrase('by') ?>&nbsp;<?php wpforo_member_link($last_poster, '', 9); ?> <a href="<?php echo esc_url($last_post['url']) ?>" title="<?php wpforo_phrase('View the latest post') ?>"><i class="fa fa-chevron-right fa-sx wpfcl-a"></i></a></span><br> <?php wpforo_date($last_post['created']); ?></div>
42
  <?php else: ?>
43
  <div class="wpforo-topic-stat-lastpost"><?php wpforo_phrase('Replies not found') ?></div>
44
  <?php endif; ?>
wpf-themes/classic/members.php CHANGED
@@ -5,7 +5,7 @@
5
  <h2 id="wpforo-title"><?php wpforo_phrase('Forum Members') ?></h2>
6
  <div class="wpforo-members-wrap">
7
  <?php if( $wpforo->perm->usergroup_can('vmem') ): ?>
8
- <div class="wpforo-members-search">
9
  <form action="<?php echo wpforo_home_url('members') ?>" method="get">
10
  <?php wpforo_make_hidden_fields_from_url( wpforo_home_url('members') ) ?>
11
  <input placeholder="<?php wpforo_phrase('Insert member name or email') ?>" required="TRUE" type="text" name="wpfms" class="wpf-member-search-field wpfw-40" value="<?php echo esc_attr($wpfms) ?>" />
5
  <h2 id="wpforo-title"><?php wpforo_phrase('Forum Members') ?></h2>
6
  <div class="wpforo-members-wrap">
7
  <?php if( $wpforo->perm->usergroup_can('vmem') ): ?>
8
+ <div class="wpforo-members-search">
9
  <form action="<?php echo wpforo_home_url('members') ?>" method="get">
10
  <?php wpforo_make_hidden_fields_from_url( wpforo_home_url('members') ) ?>
11
  <input placeholder="<?php wpforo_phrase('Insert member name or email') ?>" required="TRUE" type="text" name="wpfms" class="wpf-member-search-field wpfw-40" value="<?php echo esc_attr($wpfms) ?>" />
wpf-themes/classic/search.php CHANGED
@@ -105,7 +105,7 @@
105
  <td class="wpf-spost-title"><a href="<?php echo esc_url($wpforo->post->get_post_url($postid)) ?>" title="<?php wpforo_phrase('View entire post') ?>"><?php echo esc_html($title) ?> &nbsp;<i class="fa fa-chevron-right" style="font-weight:100; font-size:11px;"></i></a></td>
106
  <td class="wpf-spost-result wpfcl-5"><?php echo ( isset($matches) ? round($matches) : '' ) ?> <?php wpforo_phrase('relevance') ?></td>
107
  <td class="wpf-spost-date"><?php wpforo_date($created); ?></td>
108
- <td class="wpf-spost-user"><?php $user = $wpforo->member->get_member($userid); echo ( $user['display_name'] ? esc_html($user['display_name']) : esc_html(urldecode($user['user_nicename'])) ); ?></td>
109
  <td class="wpf-spost-forum"><?php $forum = $wpforo->forum->get_forum($forumid); echo esc_html($forum['title']); ?></td>
110
  </tr>
111
  <tr class="wpf-ptr">
105
  <td class="wpf-spost-title"><a href="<?php echo esc_url($wpforo->post->get_post_url($postid)) ?>" title="<?php wpforo_phrase('View entire post') ?>"><?php echo esc_html($title) ?> &nbsp;<i class="fa fa-chevron-right" style="font-weight:100; font-size:11px;"></i></a></td>
106
  <td class="wpf-spost-result wpfcl-5"><?php echo ( isset($matches) ? round($matches) : '' ) ?> <?php wpforo_phrase('relevance') ?></td>
107
  <td class="wpf-spost-date"><?php wpforo_date($created); ?></td>
108
+ <td class="wpf-spost-user"><?php $user = wpforo_member($post); echo ( $user['display_name'] ? esc_html($user['display_name']) : esc_html(urldecode($user['user_nicename'])) ); ?></td>
109
  <td class="wpf-spost-forum"><?php $forum = $wpforo->forum->get_forum($forumid); echo esc_html($forum['title']); ?></td>
110
  </tr>
111
  <tr class="wpf-ptr">
wpf-themes/classic/style-rtl.css CHANGED
@@ -165,6 +165,9 @@ RTL Style of Classic Theme
165
  #wpforo-wrap .wpforo-post .wpf-mod-message{display:inline-block; float:right; text-align:right;}
166
  #wpforo-wrap .wpforo-post .wpf-left .author-title span{display:block}
167
  #wpforo-wrap .wpforo-post-content .wpf-video, #wpforo-wrap .wpforo-post-content .wpf-video iframe{max-width: 98%;}
 
 
 
168
 
169
  /****************************************************/
170
  /********* wpForo Layout 1 (Extended Layout) ********/
@@ -412,6 +415,8 @@ RTL Style of Classic Theme
412
  #wpforo-wrap .wpfl-3 .wpf-positive{font-size:28px; cursor: pointer;}
413
  #wpforo-wrap .wpfl-3 .wpf-negative{font-size:28px; cursor: pointer;}
414
  #wpforo-wrap .wpfl-3 .wpf-vote-number{font-size:28px; line-height:30px;}
 
 
415
 
416
  /******************************************************/
417
  /********************* PROFILE ************************/
@@ -468,6 +473,8 @@ RTL Style of Classic Theme
468
  #wpforo-wrap .wpforo-profile-wrap .wpf-username{font-weight:bold; font-size:15px;}
469
  #wpforo-wrap .wpforo-profile-wrap input[type="file"].wpf-custom-avatar{ width:40%; vertical-align:baseline; margin-right:10px; }
470
  #wpforo-wrap .wpforo-profile-wrap img.wpf-custom-avatar-img{ vertical-align:bottom; max-height:40px; max-width:100px; border:1px solid #ccc; padding:2px; margin-top:5px; }
 
 
471
 
472
  /******************************************************/
473
  /******************** ACTIVITY ************************/
165
  #wpforo-wrap .wpforo-post .wpf-mod-message{display:inline-block; float:right; text-align:right;}
166
  #wpforo-wrap .wpforo-post .wpf-left .author-title span{display:block}
167
  #wpforo-wrap .wpforo-post-content .wpf-video, #wpforo-wrap .wpforo-post-content .wpf-video iframe{max-width: 98%;}
168
+ #wpforo-wrap .wpf-member-title{ display:block; cursor:default; }
169
+ #wpforo-wrap .wpf-member-title.wpfut{ display:inline-block!important; font-size:11px; line-height:15px; padding:2px 15px; margin:5px auto; border:1px solid #dddddd;}
170
+
171
 
172
  /****************************************************/
173
  /********* wpForo Layout 1 (Extended Layout) ********/
415
  #wpforo-wrap .wpfl-3 .wpf-positive{font-size:28px; cursor: pointer;}
416
  #wpforo-wrap .wpfl-3 .wpf-negative{font-size:28px; cursor: pointer;}
417
  #wpforo-wrap .wpfl-3 .wpf-vote-number{font-size:28px; line-height:30px;}
418
+ #wpforo-wrap .wpfl-3 .wpf-member-title {cursor: default;display: inline;}
419
+ #wpforo-wrap .wpfl-3 .wpf-member-title.wpfut {margin: 0 0 3px;}
420
 
421
  /******************************************************/
422
  /********************* PROFILE ************************/
473
  #wpforo-wrap .wpforo-profile-wrap .wpf-username{font-weight:bold; font-size:15px;}
474
  #wpforo-wrap .wpforo-profile-wrap input[type="file"].wpf-custom-avatar{ width:40%; vertical-align:baseline; margin-right:10px; }
475
  #wpforo-wrap .wpforo-profile-wrap img.wpf-custom-avatar-img{ vertical-align:bottom; max-height:40px; max-width:100px; border:1px solid #ccc; padding:2px; margin-top:5px; }
476
+ #wpforo-wrap .wpforo-profile-wrap .wpf-member-title{display: inline-block;}
477
+ #wpforo-wrap .wpforo-profile-wrap span.wpf-member-title.wpfut{ display:none!important; }
478
 
479
  /******************************************************/
480
  /******************** ACTIVITY ************************/
wpf-themes/classic/style.css CHANGED
@@ -171,6 +171,8 @@ Author: gVectors Team
171
  #wpforo-wrap .wpforo-post .wpf-mod-message{display:inline-block; float:left; text-align:left;}
172
  #wpforo-wrap .wpforo-post .wpf-left .author-title span{display:block}
173
  #wpforo-wrap .wpforo-post-content .wpf-video, #wpforo-wrap .wpforo-post-content .wpf-video iframe{max-width: 98%;}
 
 
174
 
175
  /****************************************************/
176
  /********* wpForo Layout 1 (Extended Layout) ********/
@@ -418,6 +420,8 @@ Author: gVectors Team
418
  #wpforo-wrap .wpfl-3 .wpf-positive{font-size:28px; cursor: pointer;}
419
  #wpforo-wrap .wpfl-3 .wpf-negative{font-size:28px; cursor: pointer;}
420
  #wpforo-wrap .wpfl-3 .wpf-vote-number{font-size:28px; line-height:30px;}
 
 
421
 
422
  /******************************************************/
423
  /********************* PROFILE ************************/
@@ -474,6 +478,8 @@ Author: gVectors Team
474
  #wpforo-wrap .wpforo-profile-wrap .wpf-username{font-weight:bold; font-size:15px;}
475
  #wpforo-wrap .wpforo-profile-wrap input[type="file"].wpf-custom-avatar{ width:40%; vertical-align:baseline; margin-left:10px; }
476
  #wpforo-wrap .wpforo-profile-wrap img.wpf-custom-avatar-img{ vertical-align:bottom; max-height:40px; max-width:100px; border:1px solid #ccc; padding:2px; margin-top:5px; }
 
 
477
 
478
  /******************************************************/
479
  /******************** ACTIVITY ************************/
171
  #wpforo-wrap .wpforo-post .wpf-mod-message{display:inline-block; float:left; text-align:left;}
172
  #wpforo-wrap .wpforo-post .wpf-left .author-title span{display:block}
173
  #wpforo-wrap .wpforo-post-content .wpf-video, #wpforo-wrap .wpforo-post-content .wpf-video iframe{max-width: 98%;}
174
+ #wpforo-wrap .wpf-member-title{ display:block; cursor:default; }
175
+ #wpforo-wrap .wpf-member-title.wpfut{ display:inline-block!important; font-size:11px; line-height:15px; padding:2px 15px; margin:5px auto; border:1px solid #dddddd;}
176
 
177
  /****************************************************/
178
  /********* wpForo Layout 1 (Extended Layout) ********/
420
  #wpforo-wrap .wpfl-3 .wpf-positive{font-size:28px; cursor: pointer;}
421
  #wpforo-wrap .wpfl-3 .wpf-negative{font-size:28px; cursor: pointer;}
422
  #wpforo-wrap .wpfl-3 .wpf-vote-number{font-size:28px; line-height:30px;}
423
+ #wpforo-wrap .wpfl-3 .wpf-member-title {cursor: default;display: inline;}
424
+ #wpforo-wrap .wpfl-3 .wpf-member-title.wpfut {margin: 0 0 3px;}
425
 
426
  /******************************************************/
427
  /********************* PROFILE ************************/
478
  #wpforo-wrap .wpforo-profile-wrap .wpf-username{font-weight:bold; font-size:15px;}
479
  #wpforo-wrap .wpforo-profile-wrap input[type="file"].wpf-custom-avatar{ width:40%; vertical-align:baseline; margin-left:10px; }
480
  #wpforo-wrap .wpforo-profile-wrap img.wpf-custom-avatar-img{ vertical-align:bottom; max-height:40px; max-width:100px; border:1px solid #ccc; padding:2px; margin-top:5px; }
481
+ #wpforo-wrap .wpforo-profile-wrap .wpf-member-title{display: inline-block;}
482
+ #wpforo-wrap .wpforo-profile-wrap .wpf-member-title.wpfut{ display:none!important; }
483
 
484
  /******************************************************/
485
  /******************** ACTIVITY ************************/
wpforo.php CHANGED
@@ -1,18 +1,18 @@
1
  <?php
2
  /*
3
  * Plugin Name: Forums - wpForo
4
- * Plugin URI: http://wpforo.com
5
  * Description: Forums wpForo is a new generation of forum plugins. It's full-fledged forum solution for your community. Comes with multiple modern forum layouts.
6
  * Author: gVectors Team (A. Chakhoyan, R. Hovhannisyan)
7
- * Author URI: http://gvectors.com/
8
- * Version: 1.3.0
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.3.0');
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' );
@@ -63,8 +63,8 @@ if( !class_exists( 'wpForo' ) ) {
63
 
64
  public function __construct(){
65
  $this->options();
66
- $this->setup();
67
- }
68
 
69
  public function init(){
70
  $this->cache->init();
@@ -398,10 +398,11 @@ if( !class_exists( 'wpForo' ) ) {
398
 
399
  //ADDONS/////////////////////////////////////////////////////
400
  $wpforo->addons = array(
401
- 'pm' => array('version' => '1.0.0', 'requires' => '1.1.2', 'class' => 'wpForoPMs', 'title' => 'Private Messages', 'thumb' => WPFORO_URL . '/wpf-assets/addons/' . 'pm' . '/header.png', 'desc' => __('Provides a safe way to communicate directly with other members. Messages are private and can only be viewed by conversation participants.', 'wpforo'), 'url' => 'http://gvectors.com/product/wpforo-private-messages/'),
402
- 'attachments' => array('version' => '1.0.0', 'requires' => '1.1.0', 'class' => 'wpForoAttachments', 'title' => 'Advanced Attachments', 'thumb' => WPFORO_URL . '/wpf-assets/addons/' . 'attachments' . '/header.png', 'desc' => __('Adds an advanced file attachment system to forum topics and posts. AJAX powered media uploading and displaying system with user specific library.', 'wpforo'), 'url' => 'http://gvectors.com/product/wpforo-advanced-attachments/'),
403
- 'embeds' => array('version' => '1.0.2', 'requires' => '1.1.0', 'class' => 'wpForoEmbeds', 'title' => 'Embeds', 'thumb' => WPFORO_URL . '/wpf-assets/addons/' . 'embeds' . '/header.png', 'desc' => __('Allows to embed hundreds of video, social network, audio and photo content providers in forum topics and posts.', 'wpforo'), 'url' => 'http://gvectors.com/product/wpforo-embeds/'),
404
- 'ad-manager' => array('version' => '1.0.0', 'requires' => '1.2.0', 'class' => 'wpForoAD', 'title' => 'Ads Manager', 'thumb' => WPFORO_URL . '/wpf-assets/addons/' . 'ad-manager' . '/header.png', 'desc' => __('Ads Manager is a powerful yet simple advertisement management system, that allows you to add adverting banners between forums, topics and posts.', 'wpforo'), 'url' => 'http://gvectors.com/product/wpforo-ad-manager/'),
 
405
  );
406
  $wp_version = get_bloginfo('version'); if (version_compare($wp_version, '4.2.0', '>=')) { add_action('wp_ajax_dismiss_wpforo_addon_note', array($wpforo->notice, 'dismissAddonNote')); add_action('admin_notices', array($wpforo->notice, 'addonNote'));}
407
  /////////////////////////////////////////////////////////////
1
  <?php
2
  /*
3
  * Plugin Name: Forums - wpForo
4
+ * Plugin URI: https://wpforo.com
5
  * Description: Forums wpForo is a new generation of forum plugins. It's 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.3.1
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.3.1');
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' );
63
 
64
  public function __construct(){
65
  $this->options();
66
+ $this->setup();
67
+ }
68
 
69
  public function init(){
70
  $this->cache->init();
398
 
399
  //ADDONS/////////////////////////////////////////////////////
400
  $wpforo->addons = array(
401
+ 'pm' => array('version' => '1.0.0', 'requires' => '1.1.2', 'class' => 'wpForoPMs', 'title' => 'Private Messages', 'thumb' => WPFORO_URL . '/wpf-assets/addons/' . 'pm' . '/header.png', 'desc' => __('Provides a safe way to communicate directly with other members. Messages are private and can only be viewed by conversation participants.', 'wpforo'), 'url' => 'https://gvectors.com/product/wpforo-private-messages/'),
402
+ 'cross' => array('version' => '1.0.0', 'requires' => '1.3.1', 'class' => 'wpForoCrossPosting', 'title' => '"Forum - Blog" Cross Posting', 'thumb' => WPFORO_URL . '/wpf-assets/addons/' . 'cross' . '/header.png', 'desc' => __('Blog to Forum and Forum to Blog content synchronization. Blog posts with Forum topics and Blog comments with Forum replies.', 'wpforo'), 'url' => 'https://gvectors.com/product/wpforo-cross-posting/'),
403
+ 'attachments' => array('version' => '1.0.0', 'requires' => '1.1.0', 'class' => 'wpForoAttachments', 'title' => 'Advanced Attachments', 'thumb' => WPFORO_URL . '/wpf-assets/addons/' . 'attachments' . '/header.png', 'desc' => __('Adds an advanced file attachment system to forum topics and posts. AJAX powered media uploading and displaying system with user specific library.', 'wpforo'), 'url' => 'https://gvectors.com/product/wpforo-advanced-attachments/'),
404
+ 'embeds' => array('version' => '1.0.2', 'requires' => '1.1.0', 'class' => 'wpForoEmbeds', 'title' => 'Embeds', 'thumb' => WPFORO_URL . '/wpf-assets/addons/' . 'embeds' . '/header.png', 'desc' => __('Allows to embed hundreds of video, social network, audio and photo content providers in forum topics and posts.', 'wpforo'), 'url' => 'https://gvectors.com/product/wpforo-embeds/'),
405
+ 'ad-manager' => array('version' => '1.0.0', 'requires' => '1.2.0', 'class' => 'wpForoAD', 'title' => 'Ads Manager', 'thumb' => WPFORO_URL . '/wpf-assets/addons/' . 'ad-manager' . '/header.png', 'desc' => __('Ads Manager is a powerful yet simple advertisement management system, that allows you to add adverting banners between forums, topics and posts.', 'wpforo'), 'url' => 'https://gvectors.com/product/wpforo-ad-manager/'),
406
  );
407
  $wp_version = get_bloginfo('version'); if (version_compare($wp_version, '4.2.0', '>=')) { add_action('wp_ajax_dismiss_wpforo_addon_note', array($wpforo->notice, 'dismissAddonNote')); add_action('admin_notices', array($wpforo->notice, 'addonNote'));}
408
  /////////////////////////////////////////////////////////////