PluginProbe
wpForo Forum / 1.4.0
wpForo Forum v1.4.0
3.1.5 3.1.4 3.1.2 3.1.1 3.1.0 3.0.9 3.0.8 3.0.7 trunk 1.0.0 1.0.1 1.0.2 1.1.0 1.1.1 1.1.2 1.2.0 1.3.0 1.3.1 1.4.0 1.4.1 1.4.10 1.4.11 1.4.12 1.4.13 1.4.2 All 137 releases
wpforo / wpf-includes / functions-installation.php

functions-installation.php in wpForo Forum 1.4.0, at wpf-includes/functions-installation.php

599 lines 29.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // Exit if accessed directly
3 if( !defined( 'ABSPATH' ) ) exit;
4
5 function do_wpforo_activation($network_wide){
6 if ( is_multisite() && $network_wide ) {
7 global $wpdb;
8
9 $old_blogid = $wpdb->blogid;
10 $blogids = $wpdb->get_col("SELECT blog_id FROM {$wpdb->blogs}");
11 foreach ($blogids as $blogid){
12 switch_to_blog($blogid);
13 wpforo_activation();
14 }
15 switch_to_blog($old_blogid);
16 }else{
17 wpforo_activation();
18 }
19 }
20
21 function do_wpforo_deactivation($network_wide){
22 if ( is_multisite() && $network_wide ) {
23 global $wpdb;
24
25 $old_blogid = $wpdb->blogid;
26 $blogids = $wpdb->get_col("SELECT blog_id FROM {$wpdb->blogs}");
27 foreach ($blogids as $blogid){
28 switch_to_blog($blogid);
29 wpforo_deactivation();
30 }
31 switch_to_blog($old_blogid);
32 }else{
33 wpforo_deactivation();
34 }
35 }
36
37 function wpforo_activation(){
38 global $wpforo, $wpdb;
39 if( ! wpforo_is_admin() ) return;
40 if( ! current_user_can( 'activate_plugins' ) ) return;
41
42 add_option('wpforo_default_groupid', $wpforo->usergroup->default->default_groupid);
43
44 require( WPFORO_DIR . '/wpf-includes/install-sql.php' );
45 foreach( $wpforo_sql as $sql ) if( FALSE === @$wpforo->db->query($sql) ) @$wpforo->db->query( preg_replace('#)[\r\n\t\s]*ENGINE.*$#isu', ')', $sql) );
46
47 $users = $wpforo->db->get_var("SELECT COUNT(*) FROM `" . $wpforo->db->base_prefix . "users`");
48 if( $users <= 100 ) $wpforo->member->synchronize_users();
49 $wpforo->member->init_current_user();
50
51 add_option( 'wpforo_count_per_page', 10 );
52
53 ###################################################################
54 // General Options ////////////////////////////////////////////////
55 wpforo_update_options( 'wpforo_general_options', $wpforo->default->general_options );
56
57 ###################################################################
58 // Forums /////////////////////////////////////////////////////////
59 wpforo_update_options( 'wpforo_forum_options', $wpforo->forum->default->options );
60
61 ##################################################################
62 // Topics & Posts ////////////////////////////////////////////////
63 wpforo_update_options( 'wpforo_post_options', $wpforo->post->default->options );
64
65 #################################################################
66 // Features /////////////////////////////////////////////////////
67 wpforo_update_options( 'wpforo_features', $wpforo->default->features );
68
69 #################################################################
70 // Theme & Style ////////////////////////////////////////////////
71 wpforo_update_options( 'wpforo_style_options', $wpforo->tpl->default->style );
72 wpforo_update_options( 'wpforo_theme_options', $wpforo->tpl->default->options );
73
74 #################################################################
75 // Members //////////////////////////////////////////////////////
76 $exlude = array('rating_title_ug', 'rating_badge_ug');
77 wpforo_update_options( 'wpforo_member_options', $wpforo->member->default->options, $exlude);
78
79 #################################################################
80 // Subscribe Options ////////////////////////////////////////////
81 wpforo_update_options( 'wpforo_subscribe_options', $wpforo->sbscrb->default->options );
82
83 #################################################################
84 // Tool Options - Antispam ///////////////////////////////////////
85 wpforo_update_options( 'wpforo_tools_antispam', $wpforo->default->tools_antispam);
86
87 #################################################################
88 // Tool Options - Cleanup ///////////////////////////////////////
89 wpforo_update_options( 'wpforo_tools_cleanup', $wpforo->default->tools_cleanup);
90
91 #################################################################
92 // Forum Navigation and Menu ////////////////////////////////////
93 $menu_name = wpforo_phrase('wpForo Navigation', false, 'orig');
94 $menu_location = 'wpforo-menu';
95 $menu_exists = wp_get_nav_menu_object( $menu_name );
96 if(!$menu_exists){
97 $id = array();
98 $menu_id = wp_create_nav_menu($menu_name);
99 $id['wpforo-home'] = wp_update_nav_menu_item($menu_id, 0, array(
100 'menu-item-title' => wpforo_phrase('Forums', false),
101 'menu-item-classes' => 'wpforo-home',
102 'menu-item-url' => '/%wpforo-home%/',
103 'menu-item-status' => 'publish',
104 'menu-item-parent-id' => 0,
105 'menu-item-position' => 0));
106
107 $id['wpforo-members'] = wp_update_nav_menu_item($menu_id, 0, array(
108 'menu-item-title' => wpforo_phrase('Members', false),
109 'menu-item-classes' => 'wpforo-members',
110 'menu-item-url' => '/%wpforo-members%/',
111 'menu-item-status' => 'publish',
112 'menu-item-parent-id' => 0,
113 'menu-item-position' => 0));
114
115 $id['wpforo-profile'] = wp_update_nav_menu_item($menu_id, 0, array(
116 'menu-item-title' => wpforo_phrase('My Profile', false),
117 'menu-item-classes' => 'wpforo-profile',
118 'menu-item-url' => '/%wpforo-profile-home%/',
119 'menu-item-status' => 'publish',
120 'menu-item-parent-id' => 0,
121 'menu-item-position' => 0));
122
123 if(isset($id['wpforo-profile']) && $id['wpforo-profile']){
124 $id['wpforo-profile-account'] = wp_update_nav_menu_item($menu_id, 0, array(
125 'menu-item-title' => wpforo_phrase('Account', false),
126 'menu-item-classes' => 'wpforo-profile-account',
127 'menu-item-url' => '/%wpforo-profile-account%/',
128 'menu-item-status' => 'publish',
129 'menu-item-parent-id' => $id['wpforo-profile'],
130 'menu-item-position' => 1)
131 );
132 $id['wpforo-profile-activity'] = wp_update_nav_menu_item($menu_id, 0, array(
133 'menu-item-title' => wpforo_phrase('Activity', false),
134 'menu-item-classes' => 'wpforo-profile-activity',
135 'menu-item-url' => '/%wpforo-profile-activity%/',
136 'menu-item-status' => 'publish',
137 'menu-item-parent-id' => $id['wpforo-profile'],
138 'menu-item-position' => 1)
139 );
140 $id['wpforo-profile-subscriptions'] = wp_update_nav_menu_item($menu_id, 0, array(
141 'menu-item-title' => wpforo_phrase('Subscriptions', false),
142 'menu-item-classes' => 'wpforo-profile-subscriptions',
143 'menu-item-url' => '/%wpforo-profile-subscriptions%/',
144 'menu-item-status' => 'publish',
145 'menu-item-parent-id' => $id['wpforo-profile'],
146 'menu-item-position' => 2)
147 );
148 }
149
150 $id['wpforo-register'] = wp_update_nav_menu_item($menu_id, 0, array(
151 'menu-item-title' => wpforo_phrase('Register', false),
152 'menu-item-classes' => 'wpforo-register',
153 'menu-item-url' => '/%wpforo-register%/',
154 'menu-item-status' => 'publish',
155 'menu-item-parent-id' => 0,
156 'menu-item-position' => 0));
157
158 $id['wpforo-login'] = wp_update_nav_menu_item($menu_id, 0, array(
159 'menu-item-title' => wpforo_phrase('Login', false),
160 'menu-item-classes' => 'wpforo-login',
161 'menu-item-url' => '/%wpforo-login%/',
162 'menu-item-status' => 'publish',
163 'menu-item-parent-id' => 0,
164 'menu-item-position' => 0));
165
166 $id['wpforo-logout'] = wp_update_nav_menu_item($menu_id, 0, array(
167 'menu-item-title' => wpforo_phrase('Logout', false),
168 'menu-item-classes' => 'wpforo-logout',
169 'menu-item-url' => '/%wpforo-logout%/',
170 'menu-item-status' => 'publish',
171 'menu-item-parent-id' => 0,
172 'menu-item-position' => 0));
173
174 if( !has_nav_menu( $menu_location ) ){
175 $locations = get_theme_mod('nav_menu_locations');
176 if(empty($locations)) $locations = array();
177 $locations[$menu_location] = $menu_id;
178 set_theme_mod( 'nav_menu_locations', $locations );
179 }
180 }
181
182 #################################################################
183 // Access Sets //////////////////////////////////////////////////
184 $cans_n = array('vf' => 0, 'ct' => 0, 'vt' => 0, 'et' => 0, 'dt' => 0,
185 'cr' => 0, 'vr' => 0, 'er' => 0, 'dr' => 0,
186 'eot' => 0, 'eor' => 0, 'dot' => 0, 'dor' => 0,
187 'l' => 0, 'r' => 0, 's' => 0, 'au' => 0, 'p' => 0, 'op' => 0, 'vp' => 0, 'sv' => 0, 'osv' => 0, 'v' => 0, 'a' => 0, 'va' => 0,
188 'at' => 0, 'oat' => 0, 'cot' => 0, 'mt' => 0);
189 $cans_r = array('vf' => 1, 'ct' => 0, 'vt' => 1, 'et' => 0, 'dt' => 0,
190 'cr' => 0, 'vr' => 1, 'er' => 0, 'dr' => 0,
191 'eot' => 0, 'eor' => 0, 'dot' => 0, 'dor' => 0,
192 'l' => 0, 'r' => 0, 's' => 0, 'au' => 0, 'p' => 0, 'op' => 0, 'vp' => 0, 'sv' => 0, 'osv' => 0, 'v' => 0, 'a' => 0, 'va' => 1,
193 'at' => 0, 'oat' => 0, 'cot' => 0, 'mt' => 0);
194 $cans_s = array('vf' => 1, 'ct' => 1, 'vt' => 1, 'et' => 0, 'dt' => 0,
195 'cr' => 1, 'vr' => 1, 'er' => 0, 'dr' => 0,
196 'eot' => 1, 'eor' => 1, 'dot' => 1, 'dor' => 1,
197 'l' => 1, 'r' => 1, 's' => 0, 'au' => 0, 'p' => 0, 'op' => 1, 'vp' => 0, 'sv' => 0, 'osv' => 1, 'v' => 1, 'a' => 1, 'va' => 1,
198 'at' => 0, 'oat' => 1, 'cot' => 0, 'mt' => 0);
199 $cans_m = array('vf' => 1, 'ct' => 1, 'vt' => 1, 'et' => 1, 'dt' => 1,
200 'cr' => 1, 'vr' => 1, 'er' => 1, 'dr' => 1,
201 'eot' => 1, 'eor' => 1, 'dot' => 1, 'dor' => 1,
202 'l' => 1, 'r' => 1, 's' => 1, 'au' => 1, 'p' => 1, 'op' => 1, 'vp' => 1, 'sv' => 1, 'osv' => 1, 'v' => 1, 'a' => 1, 'va' => 1,
203 'at' => 1, 'oat' => 1, 'cot' => 1, 'mt' => 1);
204 $cans_a = array('vf' => 1, 'ct' => 1, 'vt' => 1, 'et' => 1, 'dt' => 1,
205 'cr' => 1, 'vr' => 1, 'er' => 1, 'dr' => 1,
206 'eot' => 1, 'eor' => 1, 'dot' => 1, 'dor' => 1,
207 'l' => 1, 'r' => 1, 's' => 1, 'au' => 1, 'p' => 1, 'op' => 1, 'vp' => 1, 'sv' => 1, 'osv' => 1, 'v' => 1, 'a' => 1, 'va' => 1,
208 'at' => 1, 'oat' => 1, 'cot' => 1, 'mt' => 1);
209
210 $sql = "SELECT * FROM `".$wpforo->db->prefix."wpforo_accesses`";
211 $accesses = $wpforo->db->get_results($sql, ARRAY_A);
212 if( empty($accesses) ){
213
214 $cans_n = serialize($cans_n);
215 $cans_r = serialize($cans_r);
216 $cans_s = serialize($cans_s);
217 $cans_m = serialize($cans_m);
218 $cans_a = serialize($cans_a);
219
220 $sql = "INSERT IGNORE INTO `".$wpforo->db->prefix."wpforo_accesses`
221 (`access`, `title`, cans) VALUES
222 ('no_access', 'No access', '". $cans_n ."'),
223 ('read_only', 'Read only access', '". $cans_r ."'),
224 ('standard', 'Standard access', '". $cans_s ."'),
225 ('moderator', 'Moderator access', '".$cans_m."'),
226 ('full', 'Full access', '".$cans_a."')";
227
228 $wpforo->db->query( $sql );
229 }else{
230 foreach($accesses as $access){
231 $default = array();
232 $current = unserialize($access['cans']);
233 if( strtolower($access['access']) == 'no_access' ) $default = $cans_n;
234 elseif( strtolower($access['access']) == 'read_only' ) $default = $cans_r;
235 elseif( strtolower($access['access']) == 'standard' ) $default = $cans_s;
236 elseif( strtolower($access['access']) == 'moderator' ) $default = $cans_m;
237 elseif( strtolower($access['access']) == 'full' ) $default = $cans_a;
238 if( !empty($default) ){
239 $data_update = array_merge($default, $current);
240 if( !empty($data_update) ){
241 $data_update = serialize($data_update);
242 $wpforo->db->query("UPDATE `".$wpforo->db->prefix."wpforo_accesses` SET `cans` = '" . $wpforo->db->_real_escape($data_update) . "' WHERE `accessid` = " . intval($access['accessid']) );
243 }
244 }
245 }
246 }
247
248
249 #################################################################
250 // Usergroup ////////////////////////////////////////////////////
251 $cans_admin = array('cf' => '1', 'ef' => '1', 'df' => '1', 'vm' => '1', 'aum' => '1', 'em' => '1', 'vmg' => '1', 'aup' => '1', 'vmem' => '1', 'vprf' => '1',
252 'bm' => '1', 'dm' => '1', 'upa' => '1', 'ups' => '1', 'va' => '1',
253 'vmu' => '1', 'vmm' => '1', 'vmt' => '1', 'vmct' => '1',
254 'vmr' => '1', 'vmw' => '1', 'vmsn' => '1', 'vmrd' => '1',
255 'vmlad' => '1', 'vip' => '1', 'vml' => '1', 'vmo' => '1',
256 'vms' => '1', 'vmam' => '1', 'vmpn' => '1', 'vwpm' => '1');
257 $cans_moder = array('cf' => '0', 'ef' => '0', 'df' => '0', 'vm' => '0', 'aum' => '1', 'em' => '0', 'vmg' => '0', 'aup' => '1', 'vmem' => '1', 'vprf' => '1',
258 'bm' => '1', 'dm' => '1', 'upa' => '1', 'ups' => '1', 'va' => '1',
259 'vmu' => '0', 'vmm' => '1', 'vmt' => '1', 'vmct' => '1',
260 'vmr' => '1', 'vmw' => '1', 'vmsn' => '1', 'vmrd' => '1',
261 'vmlad' => '1', 'vip' => '1', 'vml' => '1', 'vmo' => '1',
262 'vms' => '1', 'vmam' => '1', 'vmpn' => '1', 'vwpm' => '1');
263 $cans_reg = array( 'cf' => '0', 'ef' => '0', 'df' => '0', 'vm' => '0', 'aum' => '0', 'em' => '0', 'vmg' => '0', 'aup' => '1', 'vmem' => '1', 'vprf' => '1',
264 'bm' => '0', 'dm' => '0', 'upa' => '1', 'ups' => '1', 'va' => '1',
265 'vmu' => '0', 'vmm' => '0', 'vmt' => '1', 'vmct' => '1',
266 'vmr' => '1', 'vmw' => '1', 'vmsn' => '1', 'vmrd' => '1',
267 'vmlad' => '1', 'vip' => '0', 'vml' => '1', 'vmo' => '1',
268 'vms' => '1', 'vmam' => '1', 'vmpn' => '0', 'vwpm' => '1');
269 $cans_guest = array('cf' => '0', 'ef' => '0', 'df' => '0', 'vm' => '0', 'aum' => '0', 'em' => '0', 'bm' => '0', 'dm' => '0', 'vmg' => '0', 'aup' => '0', 'vmem' => '1',
270 'vprf' => '1', 'upa' => '0', 'ups' => '0', 'va' => '1',
271 'vmu' => '0', 'vmm' => '0', 'vmt' => '1', 'vmct' => '1',
272 'vmr' => '1', 'vmw' => '0', 'vmsn' => '1', 'vmrd' => '1',
273 'vmlad' => '1', 'vip' => '0', 'vml' => '1', 'vmo' => '1',
274 'vms' => '1', 'vmam' => '1', 'vmpn' => '0', 'vwpm' => '0');
275 $cans_customer = array('cf' => '0', 'ef' => '0', 'df' => '0', 'vm' => '0', 'aum' => '0', 'em' => '0', 'vmg' => '0', 'aup' => '0', 'vmem' => '1', 'vprf' => '1', 'bm' => '0',
276 'dm' => '0', 'upa' => '1', 'ups' => '1', 'va' => '1',
277 'vmu' => '0', 'vmm' => '0', 'vmt' => '1', 'vmct' => '1',
278 'vmr' => '1', 'vmw' => '1', 'vmsn' => '1', 'vmrd' => '1',
279 'vmlad' => '1', 'vip' => '0', 'vml' => '1', 'vmo' => '1',
280 'vms' => '1', 'vmam' => '1', 'vmpn' => '0', 'vwpm' => '1');
281
282
283 $sql = "SELECT * FROM `".$wpforo->db->prefix."wpforo_usergroups`";
284 $usergroups = $wpforo->db->get_results($sql, ARRAY_A);
285 if( empty($usergroups) ){
286 $cans_admin = serialize( $cans_admin );
287 $cans_moder = serialize( $cans_moder );
288 $cans_reg = serialize( $cans_reg );
289 $cans_guest = serialize( $cans_guest );
290 $cans_customer = serialize( $cans_customer );
291 $sql = "INSERT IGNORE INTO `".$wpforo->db->prefix."wpforo_usergroups`
292 (`name`, `cans`) VALUES ('Admin', '$cans_admin'),('Moderator', '$cans_moder'),('Registered', '$cans_reg'),('Guest', '$cans_guest'),('Customer', '$cans_customer')";
293 $wpforo->db->query($sql);
294 }
295 else{
296 foreach($usergroups as $usergroup){
297 $default = array();
298 $data_update = array();
299 $current = unserialize($usergroup['cans']);
300 if( strtolower($usergroup['name']) == 'admin' ) $default = $cans_admin;
301 elseif( strtolower($usergroup['name']) == 'moderator' ) $default = $cans_moder;
302 elseif( strtolower($usergroup['name']) == 'registered' ) $default = $cans_reg;
303 elseif( strtolower($usergroup['name']) == 'guest' ) $default = $cans_guest;
304 elseif( strtolower($usergroup['name']) == 'customer' ) $default = $cans_customer;
305 if( !empty($default) ){
306 $data_update = array_merge($default, $current);
307 if( !empty($data_update) ){
308 $data_update = serialize($data_update);
309 $wpforo->db->query("UPDATE `".$wpforo->db->prefix."wpforo_usergroups` SET `cans` = '" . $wpforo->db->_real_escape($data_update) . "' WHERE `groupid` = " . intval($usergroup['groupid']) );
310 }
311 }
312 }
313 }
314 $sql = "SELECT COUNT(*) FROM `".$wpforo->db->prefix."wpforo_forums`";
315 $count = $wpforo->db->get_var($sql);
316 if(!$count){
317 if( $parentid = $wpforo->forum->add( array( 'title' => 'Main Category', 'description' => 'This is a simple category / section' ), FALSE ) ){
318 $wpforo->forum->add( array( 'title' => 'Main Forum', 'description' => 'This is a simple parent forum', 'parentid' => $parentid, 'icon' => 'fa-comments' ), FALSE );
319 }
320 }
321
322 #################################################################
323 // Permalink Settings ///////////////////////////////////////////
324 $permalink_structure = get_option( 'permalink_structure' );
325 if( !$permalink_structure ){
326 global $wp_rewrite;
327 $wp_rewrite->set_permalink_structure( '/%postname%/' );
328 }
329
330 #################################################################
331 // Creating Forum Page //////////////////////////////////////////
332 if( !$wpforo->pageid ||
333 !$wpforo->db->get_var("SELECT `ID` FROM `{$wpforo->db->prefix}posts` WHERE `ID` = '".intval($wpforo->pageid)."' AND ( `post_content` LIKE '%[wpforo]%' OR `post_content` LIKE '%[wpforo-index]%' ) AND `post_status` LIKE 'publish' AND `post_type` IN('post', 'page')") ){
334 if( !$page_id = $wpforo->db->get_var("SELECT `ID` FROM `{$wpforo->db->prefix}posts` WHERE `post_content` LIKE '%[wpforo]%' AND `post_status` LIKE 'publish' AND `post_type` IN('post', 'page')") ){
335 $wpforo_page = array(
336 'post_date' => current_time( 'mysql', 1 ),
337 'post_date_gmt' => current_time( 'mysql', 1 ),
338 'post_content' => '[wpforo]',
339 'post_title' => 'Forum',
340 'post_status' => 'publish',
341 'comment_status' => 'close',
342 'ping_status' => 'close',
343 'post_name' => 'community',
344 'post_modified' => current_time( 'mysql', 1 ),
345 'post_modified_gmt' => current_time( 'mysql', 1 ),
346 'post_parent' => 0,
347 'menu_order' => 0,
348 'post_type' => 'page'
349 );
350 $page_id = wp_insert_post( $wpforo_page );
351 }
352 if( $page_id && !is_wp_error($page_id) ){
353 update_option( 'wpforo_pageid', $page_id );
354 update_option( 'wpforo_use_home_url', '0' );
355 $wpforo_url = get_wpf_option('wpforo_url');
356 if( !$wpforo_url ){
357 update_option( 'wpforo_permastruct', 'community' );
358 update_option( 'wpforo_url', esc_url( home_url('/') ) . "community/" );
359 }else{
360 if( !$wpforo->permastruct ){
361 update_option( 'wpforo_permastruct', basename($wpforo_url) );
362 update_option( 'wpforo_url', esc_url( home_url('/') ) . basename($wpforo_url) . "/" );
363 }else{
364 update_option( 'wpforo_url', esc_url( home_url('/') ) . $wpforo->permastruct . "/" );
365 }
366 }
367 }
368 }else{
369 if( !$wpforo->use_home_url ) update_option( 'wpforo_use_home_url', '0' );
370 if( !$wpforo->permastruct ) update_option( 'wpforo_permastruct', basename( get_wpf_option('wpforo_url') ) );
371 $wpforo->db->query("UPDATE `{$wpforo->db->prefix}posts` SET `post_content` = REPLACE(`post_content`, '[wpforo-index]', '[wpforo]') WHERE `ID` = '{$wpforo->pageid}'");
372 }
373
374 $wpforo->pageid = get_wpf_option( 'wpforo_pageid');
375 $wpforo->permastruct = trim( get_wpf_option('wpforo_permastruct'), '/' );
376 flush_rewrite_rules(FALSE);
377 nocache_headers();
378
379
380 #################################################################
381 // Importing Language Packs and Phrases /////////////////////////
382 $wpforo->phrase->xml_import('english.xml', 'install');
383
384 #################################################################
385 // Creating wpforo folders //////////////////////////////////////
386 $upload_array = wp_upload_dir();
387 $wpforo_upload_dir = $upload_array['basedir'].'/wpforo/';
388 if (!is_dir($wpforo_upload_dir)) {
389 wp_mkdir_p($wpforo_upload_dir);
390 }
391 $avatars_upload_dir=$upload_array['basedir'].'/wpforo/avatars/';
392 if (!is_dir($avatars_upload_dir)) {
393 wp_mkdir_p($avatars_upload_dir);
394 }
395
396 #################################################################
397 // RESET USER CACHE /////////////////////////////////////////////
398 $wpforo->member->clear_db_cache();
399
400 #################################################################
401 // RESET FUNCTIONS //////////////////////////////////////////////
402 $sql = "SHOW COLUMNS FROM `".$wpdb->prefix."wpforo_phrases` WHERE `Field` LIKE 'package'";
403 if( !$wpdb->get_row($sql, ARRAY_A) ){
404 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_phrases` ADD COLUMN `package` VARCHAR(255) NOT NULL DEFAULT 'wpforo'" );
405 }
406 $wpforo->phrase->clear_cache();
407
408 #################################################################
409 // ADD `private` field in TOPIC TABLE ///////////////////////////
410 $args = array( 'table' => $wpdb->prefix . 'wpforo_topics', 'col' => 'private', 'check' => 'col_exists' );
411 if( !wpforo_db_check( $args ) ){
412 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_topics` ADD `private` TINYINT(1) NOT NULL DEFAULT '0', ADD INDEX `is_private` (`private`);" );
413 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_topics` ADD INDEX `own_private` ( `userid`, `private`);" );
414 }
415 // ADD INDEXES in wpforo_views TABLE///////////////////////////
416 $args = array( 'table' => $wpdb->prefix . 'wpforo_views', 'col' => 'topicid', 'check' => 'key_exists' );
417 if( !wpforo_db_check( $args ) ){
418 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` ADD INDEX(`userid`);" );
419 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` ADD INDEX(`topicid`);" );
420 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` ADD UNIQUE( `userid`, `topicid`);" );
421 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_likes` ADD UNIQUE( `userid`, `postid`);" );
422 }
423 $args = array( 'table' => $wpdb->prefix . 'wpforo_views', 'col' => 'created', 'check' => 'col_type' );
424 $col_type = wpforo_db_check( $args );
425 if( $col_type != 'int(11)' ){
426 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` CHANGE `created` `created` INT(11) NOT NULL;" );
427 }
428 // ADD `status` field in TOPICS & POSTS TABLE ///////////////////////////
429 $args = array( 'table' => $wpdb->prefix . 'wpforo_topics', 'col' => 'status', 'check' => 'col_exists' );
430 if( !wpforo_db_check( $args ) ){
431 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_topics` ADD `status` TINYINT(1) NOT NULL DEFAULT '0', ADD INDEX `status` (`status`);" );
432 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_topics` ADD INDEX `forumid_status` ( `forumid`, `status`);" );
433 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_posts` ADD `status` TINYINT(1) NOT NULL DEFAULT '0', ADD INDEX `status` (`status`);" );
434 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_posts` ADD INDEX `topicid_status` ( `topicid`, `status`);" );
435 }
436 // ADD `name` and `email` field in TOPIC TABLE ///////////////////////////
437 $args = array( 'table' => $wpdb->prefix . 'wpforo_topics', 'col' => 'name', 'check' => 'col_exists' );
438 if( !wpforo_db_check( $args ) ){
439 @$wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "wpforo_topics` ADD `name` VARCHAR(50) NOT NULL AFTER `status`, ADD `email` VARCHAR(50) NOT NULL AFTER `name`" );
440 @$wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "wpforo_posts` ADD `name` VARCHAR(50) NOT NULL AFTER `status`, ADD `email` VARCHAR(50) NOT NULL AFTER `name`" );
441 @$wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "wpforo_topics` ADD KEY `email` (`email`)" );
442 @$wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "wpforo_posts` ADD KEY `email` (`email`)" );
443 }
444 // ADD `utitle`, `role` and `access` to USERGROUP TABLE /////////
445 $args = array( 'table' => $wpdb->prefix . 'wpforo_usergroups', 'col' => 'utitle', 'check' => 'col_exists' );
446 if( !wpforo_db_check( $args ) ){
447 @$wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "wpforo_usergroups` ADD `utitle` VARCHAR(100), ADD `role` VARCHAR(50), ADD `access` VARCHAR(50)" );
448 @$wpdb->query( "UPDATE `" . $wpdb->prefix . "wpforo_usergroups` SET `utitle` = 'Admin', `role` = 'administrator', `access` = 'full' WHERE `groupid` = 1");
449 @$wpdb->query( "UPDATE `" . $wpdb->prefix . "wpforo_usergroups` SET `utitle` = 'Moderator', `role` = 'editor', `access` = 'moderator' WHERE `groupid` = 2");
450 @$wpdb->query( "UPDATE `" . $wpdb->prefix . "wpforo_usergroups` SET `utitle` = 'Registered', `role` = 'subscriber', `access` = 'standard' WHERE `groupid` = 3");
451 @$wpdb->query( "UPDATE `" . $wpdb->prefix . "wpforo_usergroups` SET `utitle` = 'Guest', `role` = '', `access` = 'read_only' WHERE `groupid` = 4");
452 @$wpdb->query( "UPDATE `" . $wpdb->prefix . "wpforo_usergroups` SET `utitle` = 'Customer', `role` = 'customer', `access` = 'standard' WHERE `groupid` = 5");
453 @$wpdb->query( "UPDATE `" . $wpdb->prefix . "wpforo_usergroups` SET `utitle` = 'name', `role` = 'subscriber', `access` = 'standard' WHERE `utitle` IS NULL OR `utitle` = ''");
454 }
455
456 #################################################################
457 // UPDATE VERSION - END /////////////////////////////////////////
458 update_option('wpforo_version', WPFORO_VERSION);
459 $wpforo->notice->clear();
460 wpforo_clean_cache();
461 }
462
463
464 function wpforo_update() {
465 if ( get_option('wpforo_version') && WPFORO_VERSION !== get_option('wpforo_version') ) wpforo_activation();
466 }
467 add_action('wp_loaded', 'wpforo_update');
468
469
470 function wpforo_update_options( $option_key, $default, $exlude = array() ) {
471
472 $option = get_option( $option_key, array() );
473
474 if( !empty($option) ){
475 if( !empty($exlude) ){
476 foreach( $exlude as $key ){
477 if( isset($default[$key]) ) unset($default[$key]);
478 }
479 }
480 $option_update = array_merge($default, $option);
481 }
482 else{
483 $option_update = $default;
484 }
485
486 update_option( $option_key, $option_update );
487 }
488
489
490 function wpforo_deactivation() {}
491
492
493 function wpforo_uninstall() {
494
495 global $wpforo, $wpdb;
496
497 if( ! wpforo_is_admin() ) return;
498 if( ! current_user_can( 'activate_plugins' ) ) return;
499 $QUERY_STRING = trim(preg_replace('|_wpnonce=[^\&\?\=]*|is', '', $_SERVER['QUERY_STRING']), '&');
500
501 if( 'action=wpforo-uninstall' == trim($QUERY_STRING) ){
502
503 $tables = array( $wpdb->prefix . 'wpforo_accesses',
504 $wpdb->prefix . 'wpforo_forums',
505 $wpdb->prefix . 'wpforo_languages',
506 $wpdb->prefix . 'wpforo_likes',
507 $wpdb->prefix . 'wpforo_phrases',
508 $wpdb->prefix . 'wpforo_profiles',
509 $wpdb->prefix . 'wpforo_posts',
510 $wpdb->prefix . 'wpforo_subscribes',
511 $wpdb->prefix . 'wpforo_topics',
512 $wpdb->prefix . 'wpforo_usergroups',
513 $wpdb->prefix . 'wpforo_views',
514 $wpdb->prefix . 'wpforo_visits',
515 $wpdb->prefix . 'wpforo_votes');
516
517 foreach($tables as $table){
518 if( strpos( $table, '_wpforo_' ) !== FALSE){
519 $sql = "DROP TABLE IF EXISTS `$table`;";
520 $wpdb->query( $sql );
521 }
522 }
523
524 if( isset($wpforo->pageid) && $wpforo->pageid ){
525 wp_delete_post( $wpforo->pageid, true );
526 }
527
528 $options = array( 'wpforo_version',
529 'wpforo_url',
530 'wpforo_stat',
531 'wpforo_general_options',
532 'wpforo_pageid',
533 'wpforo_count_per_page',
534 'wpforo_default_groupid',
535 'wpforo_forum_options',
536 'wpforo_post_options',
537 'wpforo_member_options',
538 'wpforo_subscribe_options',
539 'wpforo_theme_options',
540 'wpforo_features',
541 'wpforo_style_options',
542 'wpforo_permastruct',
543 'wpforo_use_home_url',
544 'wpforo_excld_urls',
545 'wpforo_tools_antispam',
546 'wpforo_tools_cleanup'
547 );
548
549 foreach($options as $option){
550 if( strpos( $option, 'wpforo_' ) !== FALSE){
551 delete_option( $option );
552 }
553 }
554
555 $wpdb->query( "DELETE FROM `" . $wpdb->base_prefix ."usermeta` WHERE `meta_key` = '_wpf_member_obj'" );
556 $wpdb->query( "DELETE FROM `" . $wpdb->prefix ."options` WHERE option_name LIKE 'widget_wpforo_widget_%'" );
557
558 $menu = wp_get_nav_menu_object( 'wpforo-navigation' );
559 wp_delete_nav_menu( $menu->term_id );
560 wp_delete_post($wpforo->pageid, TRUE);
561
562 deactivate_plugins( WPFORO_BASENAME );
563
564 }
565 else{
566 return;
567 }
568 }
569
570 function wpforo_profile_notice(){
571 global $wpdb;
572 $button = '';
573 $users = $wpdb->get_var("SELECT COUNT(*) FROM `".$wpdb->base_prefix."usermeta` WHERE `meta_key` LIKE '".$wpdb->prefix."capabilities'");
574 $profiles = $wpdb->get_var("SELECT COUNT(*) FROM `" . $wpdb->prefix . "wpforo_profiles`");
575 $delta = $users - $profiles;
576 $status = ( $delta > 2 ) ? round((( $profiles * 100 ) / $users ), 1) . '% (' . $profiles . ' / ' . $users . ') ' : '100%';
577 $btext = ( $profiles == 0 ) ? __( 'Start Profile Synchronization', 'wpforo') : __( 'Continue Synchronization', 'wpforo');
578 $url = admin_url('admin.php?page=wpforo-community&action=synch');
579 $class = 'wpforo-mnote notice notice-warning is-dismissible';
580 $note = __( 'This process may take a few seconds or dozens of minutes, please be patient and don\'t close this page.', 'wpforo');
581 $info = __( 'You can permanently disable this message in Dashboard > Forums > Features admin page.', 'wpforo');
582 $button = '<a href="' . $url . '" class="button button-primary button-large" style="font-size:14px;">' . $btext . ' &gt;&gt;</a>';
583 $header = __( 'wpForo Forum Installation | ', 'wpforo' );
584 $message = __( 'Forum users\' profile data are not synchronized yet, this step is required! Please click the button below to complete installation.', 'wpforo' );
585 echo '<div class="' . $class . '" style="padding:15px 20px;"><h2 style="margin:0px;">' . esc_html($header) . $status . ' </h2><p style="font-size:15px;margin:5px 0px;">' . $message . '</p><p style="margin:0px 0px 10px 0px;">' . $button . '</p><hr /><p style="margin:0px;color:#dd0000;">' . $note . '</p><p style="margin:0px;color:#999; font-size:12px;">' . $info . '</p></div>';
586 }
587
588 function wpforo_update_db_indexes(){
589 global $wpdb;
590
591 // ADD INDEXES in wpforo_views TABLE///////////////////////////
592 $args = array( 'table' => $wpdb->prefix . 'wpforo_views', 'col' => 'topicid', 'check' => 'key_exists' );
593 if( !wpforo_db_check( $args ) ){
594 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` ADD INDEX(`userid`);" );
595 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` ADD INDEX(`topicid`);" );
596 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` ADD UNIQUE( `userid`, `topicid`);" );
597 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_likes` ADD UNIQUE( `userid`, `postid`);" );
598 }
599 }