PluginProbe
wpForo Forum / 1.4.1
wpForo Forum v1.4.1
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.1, at wpf-includes/functions-installation.php

600 lines 29.5 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 if( strtolower($usergroup['name']) == 'guest' && $data_update['vprf'] && WPFORO_VERSION == '1.4.1' ) $data_update['va'] = 1;
309 $data_update = serialize($data_update);
310 $wpforo->db->query("UPDATE `".$wpforo->db->prefix."wpforo_usergroups` SET `cans` = '" . $wpforo->db->_real_escape($data_update) . "' WHERE `groupid` = " . intval($usergroup['groupid']) );
311 }
312 }
313 }
314 }
315 $sql = "SELECT COUNT(*) FROM `".$wpforo->db->prefix."wpforo_forums`";
316 $count = $wpforo->db->get_var($sql);
317 if(!$count){
318 if( $parentid = $wpforo->forum->add( array( 'title' => 'Main Category', 'description' => 'This is a simple category / section' ), FALSE ) ){
319 $wpforo->forum->add( array( 'title' => 'Main Forum', 'description' => 'This is a simple parent forum', 'parentid' => $parentid, 'icon' => 'fa-comments' ), FALSE );
320 }
321 }
322
323 #################################################################
324 // Permalink Settings ///////////////////////////////////////////
325 $permalink_structure = get_option( 'permalink_structure' );
326 if( !$permalink_structure ){
327 global $wp_rewrite;
328 $wp_rewrite->set_permalink_structure( '/%postname%/' );
329 }
330
331 #################################################################
332 // Creating Forum Page //////////////////////////////////////////
333 if( !$wpforo->pageid ||
334 !$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')") ){
335 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')") ){
336 $wpforo_page = array(
337 'post_date' => current_time( 'mysql', 1 ),
338 'post_date_gmt' => current_time( 'mysql', 1 ),
339 'post_content' => '[wpforo]',
340 'post_title' => 'Forum',
341 'post_status' => 'publish',
342 'comment_status' => 'close',
343 'ping_status' => 'close',
344 'post_name' => 'community',
345 'post_modified' => current_time( 'mysql', 1 ),
346 'post_modified_gmt' => current_time( 'mysql', 1 ),
347 'post_parent' => 0,
348 'menu_order' => 0,
349 'post_type' => 'page'
350 );
351 $page_id = wp_insert_post( $wpforo_page );
352 }
353 if( $page_id && !is_wp_error($page_id) ){
354 update_option( 'wpforo_pageid', $page_id );
355 update_option( 'wpforo_use_home_url', '0' );
356 $wpforo_url = get_wpf_option('wpforo_url');
357 if( !$wpforo_url ){
358 update_option( 'wpforo_permastruct', 'community' );
359 update_option( 'wpforo_url', esc_url( home_url('/') ) . "community/" );
360 }else{
361 if( !$wpforo->permastruct ){
362 update_option( 'wpforo_permastruct', basename($wpforo_url) );
363 update_option( 'wpforo_url', esc_url( home_url('/') ) . basename($wpforo_url) . "/" );
364 }else{
365 update_option( 'wpforo_url', esc_url( home_url('/') ) . $wpforo->permastruct . "/" );
366 }
367 }
368 }
369 }else{
370 if( !$wpforo->use_home_url ) update_option( 'wpforo_use_home_url', '0' );
371 if( !$wpforo->permastruct ) update_option( 'wpforo_permastruct', basename( get_wpf_option('wpforo_url') ) );
372 $wpforo->db->query("UPDATE `{$wpforo->db->prefix}posts` SET `post_content` = REPLACE(`post_content`, '[wpforo-index]', '[wpforo]') WHERE `ID` = '{$wpforo->pageid}'");
373 }
374
375 $wpforo->pageid = get_wpf_option( 'wpforo_pageid');
376 $wpforo->permastruct = trim( get_wpf_option('wpforo_permastruct'), '/' );
377 flush_rewrite_rules(FALSE);
378 nocache_headers();
379
380
381 #################################################################
382 // Importing Language Packs and Phrases /////////////////////////
383 $wpforo->phrase->xml_import('english.xml', 'install');
384
385 #################################################################
386 // Creating wpforo folders //////////////////////////////////////
387 $upload_array = wp_upload_dir();
388 $wpforo_upload_dir = $upload_array['basedir'].'/wpforo/';
389 if (!is_dir($wpforo_upload_dir)) {
390 wp_mkdir_p($wpforo_upload_dir);
391 }
392 $avatars_upload_dir=$upload_array['basedir'].'/wpforo/avatars/';
393 if (!is_dir($avatars_upload_dir)) {
394 wp_mkdir_p($avatars_upload_dir);
395 }
396
397 #################################################################
398 // RESET USER CACHE /////////////////////////////////////////////
399 $wpforo->member->clear_db_cache();
400
401 #################################################################
402 // RESET FUNCTIONS //////////////////////////////////////////////
403 $sql = "SHOW COLUMNS FROM `".$wpdb->prefix."wpforo_phrases` WHERE `Field` LIKE 'package'";
404 if( !$wpdb->get_row($sql, ARRAY_A) ){
405 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_phrases` ADD COLUMN `package` VARCHAR(255) NOT NULL DEFAULT 'wpforo'" );
406 }
407 $wpforo->phrase->clear_cache();
408
409 #################################################################
410 // ADD `private` field in TOPIC TABLE ///////////////////////////
411 $args = array( 'table' => $wpdb->prefix . 'wpforo_topics', 'col' => 'private', 'check' => 'col_exists' );
412 if( !wpforo_db_check( $args ) ){
413 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_topics` ADD `private` TINYINT(1) NOT NULL DEFAULT '0', ADD INDEX `is_private` (`private`);" );
414 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_topics` ADD INDEX `own_private` ( `userid`, `private`);" );
415 }
416 // ADD INDEXES in wpforo_views TABLE///////////////////////////
417 $args = array( 'table' => $wpdb->prefix . 'wpforo_views', 'col' => 'topicid', 'check' => 'key_exists' );
418 if( !wpforo_db_check( $args ) ){
419 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` ADD INDEX(`userid`);" );
420 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` ADD INDEX(`topicid`);" );
421 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` ADD UNIQUE( `userid`, `topicid`);" );
422 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_likes` ADD UNIQUE( `userid`, `postid`);" );
423 }
424 $args = array( 'table' => $wpdb->prefix . 'wpforo_views', 'col' => 'created', 'check' => 'col_type' );
425 $col_type = wpforo_db_check( $args );
426 if( $col_type != 'int(11)' ){
427 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` CHANGE `created` `created` INT(11) NOT NULL;" );
428 }
429 // ADD `status` field in TOPICS & POSTS TABLE ///////////////////////////
430 $args = array( 'table' => $wpdb->prefix . 'wpforo_topics', 'col' => 'status', 'check' => 'col_exists' );
431 if( !wpforo_db_check( $args ) ){
432 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_topics` ADD `status` TINYINT(1) NOT NULL DEFAULT '0', ADD INDEX `status` (`status`);" );
433 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_topics` ADD INDEX `forumid_status` ( `forumid`, `status`);" );
434 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_posts` ADD `status` TINYINT(1) NOT NULL DEFAULT '0', ADD INDEX `status` (`status`);" );
435 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_posts` ADD INDEX `topicid_status` ( `topicid`, `status`);" );
436 }
437 // ADD `name` and `email` field in TOPIC TABLE ///////////////////////////
438 $args = array( 'table' => $wpdb->prefix . 'wpforo_topics', 'col' => 'name', 'check' => 'col_exists' );
439 if( !wpforo_db_check( $args ) ){
440 @$wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "wpforo_topics` ADD `name` VARCHAR(50) NOT NULL AFTER `status`, ADD `email` VARCHAR(50) NOT NULL AFTER `name`" );
441 @$wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "wpforo_posts` ADD `name` VARCHAR(50) NOT NULL AFTER `status`, ADD `email` VARCHAR(50) NOT NULL AFTER `name`" );
442 @$wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "wpforo_topics` ADD KEY `email` (`email`)" );
443 @$wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "wpforo_posts` ADD KEY `email` (`email`)" );
444 }
445 // ADD `utitle`, `role` and `access` to USERGROUP TABLE /////////
446 $args = array( 'table' => $wpdb->prefix . 'wpforo_usergroups', 'col' => 'utitle', 'check' => 'col_exists' );
447 if( !wpforo_db_check( $args ) ){
448 @$wpdb->query( "ALTER TABLE `" . $wpdb->prefix . "wpforo_usergroups` ADD `utitle` VARCHAR(100), ADD `role` VARCHAR(50), ADD `access` VARCHAR(50)" );
449 @$wpdb->query( "UPDATE `" . $wpdb->prefix . "wpforo_usergroups` SET `utitle` = 'Admin', `role` = 'administrator', `access` = 'full' WHERE `groupid` = 1");
450 @$wpdb->query( "UPDATE `" . $wpdb->prefix . "wpforo_usergroups` SET `utitle` = 'Moderator', `role` = 'editor', `access` = 'moderator' WHERE `groupid` = 2");
451 @$wpdb->query( "UPDATE `" . $wpdb->prefix . "wpforo_usergroups` SET `utitle` = 'Registered', `role` = 'subscriber', `access` = 'standard' WHERE `groupid` = 3");
452 @$wpdb->query( "UPDATE `" . $wpdb->prefix . "wpforo_usergroups` SET `utitle` = 'Guest', `role` = '', `access` = 'read_only' WHERE `groupid` = 4");
453 @$wpdb->query( "UPDATE `" . $wpdb->prefix . "wpforo_usergroups` SET `utitle` = 'Customer', `role` = 'customer', `access` = 'standard' WHERE `groupid` = 5");
454 @$wpdb->query( "UPDATE `" . $wpdb->prefix . "wpforo_usergroups` SET `utitle` = 'name', `role` = 'subscriber', `access` = 'standard' WHERE `utitle` IS NULL OR `utitle` = ''");
455 }
456
457 #################################################################
458 // UPDATE VERSION - END /////////////////////////////////////////
459 update_option('wpforo_version', WPFORO_VERSION);
460 $wpforo->notice->clear();
461 wpforo_clean_cache();
462 }
463
464
465 function wpforo_update() {
466 if ( get_option('wpforo_version') && WPFORO_VERSION !== get_option('wpforo_version') ) wpforo_activation();
467 }
468 add_action('wp_loaded', 'wpforo_update');
469
470
471 function wpforo_update_options( $option_key, $default, $exlude = array() ) {
472
473 $option = get_option( $option_key, array() );
474
475 if( !empty($option) ){
476 if( !empty($exlude) ){
477 foreach( $exlude as $key ){
478 if( isset($default[$key]) ) unset($default[$key]);
479 }
480 }
481 $option_update = array_merge($default, $option);
482 }
483 else{
484 $option_update = $default;
485 }
486
487 update_option( $option_key, $option_update );
488 }
489
490
491 function wpforo_deactivation() {}
492
493
494 function wpforo_uninstall() {
495
496 global $wpforo, $wpdb;
497
498 if( ! wpforo_is_admin() ) return;
499 if( ! current_user_can( 'activate_plugins' ) ) return;
500 $QUERY_STRING = trim(preg_replace('|_wpnonce=[^\&\?\=]*|is', '', $_SERVER['QUERY_STRING']), '&');
501
502 if( 'action=wpforo-uninstall' == trim($QUERY_STRING) ){
503
504 $tables = array( $wpdb->prefix . 'wpforo_accesses',
505 $wpdb->prefix . 'wpforo_forums',
506 $wpdb->prefix . 'wpforo_languages',
507 $wpdb->prefix . 'wpforo_likes',
508 $wpdb->prefix . 'wpforo_phrases',
509 $wpdb->prefix . 'wpforo_profiles',
510 $wpdb->prefix . 'wpforo_posts',
511 $wpdb->prefix . 'wpforo_subscribes',
512 $wpdb->prefix . 'wpforo_topics',
513 $wpdb->prefix . 'wpforo_usergroups',
514 $wpdb->prefix . 'wpforo_views',
515 $wpdb->prefix . 'wpforo_visits',
516 $wpdb->prefix . 'wpforo_votes');
517
518 foreach($tables as $table){
519 if( strpos( $table, '_wpforo_' ) !== FALSE){
520 $sql = "DROP TABLE IF EXISTS `$table`;";
521 $wpdb->query( $sql );
522 }
523 }
524
525 if( isset($wpforo->pageid) && $wpforo->pageid ){
526 wp_delete_post( $wpforo->pageid, true );
527 }
528
529 $options = array( 'wpforo_version',
530 'wpforo_url',
531 'wpforo_stat',
532 'wpforo_general_options',
533 'wpforo_pageid',
534 'wpforo_count_per_page',
535 'wpforo_default_groupid',
536 'wpforo_forum_options',
537 'wpforo_post_options',
538 'wpforo_member_options',
539 'wpforo_subscribe_options',
540 'wpforo_theme_options',
541 'wpforo_features',
542 'wpforo_style_options',
543 'wpforo_permastruct',
544 'wpforo_use_home_url',
545 'wpforo_excld_urls',
546 'wpforo_tools_antispam',
547 'wpforo_tools_cleanup'
548 );
549
550 foreach($options as $option){
551 if( strpos( $option, 'wpforo_' ) !== FALSE){
552 delete_option( $option );
553 }
554 }
555
556 $wpdb->query( "DELETE FROM `" . $wpdb->base_prefix ."usermeta` WHERE `meta_key` = '_wpf_member_obj'" );
557 $wpdb->query( "DELETE FROM `" . $wpdb->prefix ."options` WHERE option_name LIKE 'widget_wpforo_widget_%'" );
558
559 $menu = wp_get_nav_menu_object( 'wpforo-navigation' );
560 wp_delete_nav_menu( $menu->term_id );
561 wp_delete_post($wpforo->pageid, TRUE);
562
563 deactivate_plugins( WPFORO_BASENAME );
564
565 }
566 else{
567 return;
568 }
569 }
570
571 function wpforo_profile_notice(){
572 global $wpdb;
573 $button = '';
574 $users = $wpdb->get_var("SELECT COUNT(*) FROM `".$wpdb->base_prefix."usermeta` WHERE `meta_key` LIKE '".$wpdb->prefix."capabilities'");
575 $profiles = $wpdb->get_var("SELECT COUNT(*) FROM `" . $wpdb->prefix . "wpforo_profiles`");
576 $delta = $users - $profiles;
577 $status = ( $delta > 2 ) ? round((( $profiles * 100 ) / $users ), 1) . '% (' . $profiles . ' / ' . $users . ') ' : '100%';
578 $btext = ( $profiles == 0 ) ? __( 'Start Profile Synchronization', 'wpforo') : __( 'Continue Synchronization', 'wpforo');
579 $url = admin_url('admin.php?page=wpforo-community&action=synch');
580 $class = 'wpforo-mnote notice notice-warning is-dismissible';
581 $note = __( 'This process may take a few seconds or dozens of minutes, please be patient and don\'t close this page.', 'wpforo');
582 $info = __( 'You can permanently disable this message in Dashboard > Forums > Features admin page.', 'wpforo');
583 $button = '<a href="' . $url . '" class="button button-primary button-large" style="font-size:14px;">' . $btext . ' &gt;&gt;</a>';
584 $header = __( 'wpForo Forum Installation | ', 'wpforo' );
585 $message = __( 'Forum users\' profile data are not synchronized yet, this step is required! Please click the button below to complete installation.', 'wpforo' );
586 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>';
587 }
588
589 function wpforo_update_db_indexes(){
590 global $wpdb;
591
592 // ADD INDEXES in wpforo_views TABLE///////////////////////////
593 $args = array( 'table' => $wpdb->prefix . 'wpforo_views', 'col' => 'topicid', 'check' => 'key_exists' );
594 if( !wpforo_db_check( $args ) ){
595 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` ADD INDEX(`userid`);" );
596 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` ADD INDEX(`topicid`);" );
597 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_views` ADD UNIQUE( `userid`, `topicid`);" );
598 @$wpdb->query( "ALTER TABLE `".$wpdb->prefix."wpforo_likes` ADD UNIQUE( `userid`, `postid`);" );
599 }
600 }