This repository has been archived by the owner on Mar 1, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathwps-install.php
360 lines (294 loc) · 16.4 KB
/
wps-install.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
<?php
if( is_admin() ) {
GLOBAL $wpdb;
$wp_prefix = $wpdb->prefix;
// The follow variables are used to define the table structure for new and upgrade installations.
$create_useronline_table = ("CREATE TABLE {$wp_prefix}statistics_useronline (
ID int(11) NOT NULL AUTO_INCREMENT,
ip varchar(60) NOT NULL,
created int(11),
timestamp int(10) NOT NULL,
date datetime NOT NULL,
referred text CHARACTER SET utf8 NOT NULL,
agent varchar(255) NOT NULL,
platform varchar(255),
version varchar(255),
location varchar(10),
PRIMARY KEY (ID)
) CHARSET=utf8");
$create_visit_table = ("CREATE TABLE {$wp_prefix}statistics_visit (
ID int(11) NOT NULL AUTO_INCREMENT,
last_visit datetime NOT NULL,
last_counter date NOT NULL,
visit int(10) NOT NULL,
PRIMARY KEY (ID),
UNIQUE KEY unique_date (last_counter)
) CHARSET=utf8");
$create_visitor_table = ("CREATE TABLE {$wp_prefix}statistics_visitor (
ID int(11) NOT NULL AUTO_INCREMENT,
last_counter date NOT NULL,
referred text NOT NULL,
agent varchar(255) NOT NULL,
platform varchar(255),
version varchar(255),
UAString varchar(255),
ip varchar(60) NOT NULL,
location varchar(10),
hits int(11),
honeypot int(11),
PRIMARY KEY (ID),
UNIQUE KEY date_ip_agent (last_counter,ip,agent(75),platform(75),version(75)),
KEY agent (agent),
KEY platform (platform),
KEY version (version),
KEY location (location)
) CHARSET=utf8");
$create_visitor_table_old = ("CREATE TABLE {$wp_prefix}statistics_visitor (
ID int(11) NOT NULL AUTO_INCREMENT,
last_counter date NOT NULL,
referred text NOT NULL,
agent varchar(255) NOT NULL,
platform varchar(255),
version varchar(255),
UAString varchar(255),
ip varchar(60) NOT NULL,
location varchar(10),
hits int(11),
honeypot int(11),
PRIMARY KEY (ID),
UNIQUE KEY date_ip_agent (last_counter,ip,agent (75),platform (75),version (75)),
KEY agent (agent),
KEY platform (platform),
KEY version (version),
KEY location (location)
) CHARSET=utf8");
$create_exclusion_table = ("CREATE TABLE {$wp_prefix}statistics_exclusions (
ID int(11) NOT NULL AUTO_INCREMENT,
date date NOT NULL,
reason varchar(255) DEFAULT NULL,
count bigint(20) NOT NULL,
PRIMARY KEY (ID),
KEY date (date),
KEY reason (reason)
) CHARSET=utf8");
$create_pages_table = ("CREATE TABLE {$wp_prefix}statistics_pages (
uri varchar(255) NOT NULL,
date date NOT NULL,
count int(11) NOT NULL,
id int(11) NOT NULL,
UNIQUE KEY date_2 (date,uri),
KEY url (uri),
KEY date (date),
KEY id (id)
) CHARSET=utf8");
$create_historical_table = ("CREATE TABLE {$wp_prefix}statistics_historical (
ID bigint(20) NOT NULL AUTO_INCREMENT,
category varchar(25) NOT NULL,
page_id bigint(20) NOT NULL,
uri varchar(255) NOT NULL,
value bigint(20) NOT NULL,
PRIMARY KEY (ID),
KEY category (category),
UNIQUE KEY page_id (page_id),
UNIQUE KEY uri (uri)
) CHARSET=utf8");
$create_search_table = ("CREATE TABLE {$wp_prefix}statistics_search (
ID bigint(20) NOT NULL AUTO_INCREMENT,
last_counter date NOT NULL,
engine varchar(64) NOT NULL,
host varchar(255),
words varchar(255),
visitor bigint(20),
PRIMARY KEY (ID),
KEY last_counter (last_counter),
KEY engine (engine),
KEY host (host)
) CHARSET=utf8");
// Before we update the historical table, check to see if it exists with the old keys
$result = $wpdb->query( "SHOW COLUMNS FROM {$wp_prefix}statistics_historical LIKE 'key'" );
if( $result > 0 ) {
$wpdb->query( "ALTER TABLE `{$wp_prefix}statistics_historical` CHANGE `id` `page_id` bigint(20)" );
$wpdb->query( "ALTER TABLE `{$wp_prefix}statistics_historical` CHANGE `key` `ID` bigint(20)" );
$wpdb->query( "ALTER TABLE `{$wp_prefix}statistics_historical` CHANGE `type` `category` varchar(25)" );
}
// This includes the dbDelta function from WordPress.
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
// Create/update the plugin tables.
dbDelta($create_useronline_table);
dbDelta($create_visit_table);
dbDelta($create_visitor_table);
dbDelta($create_exclusion_table);
dbDelta($create_pages_table);
dbDelta($create_historical_table);
dbDelta($create_search_table);
// Some old versions (in the 5.0.x line) of MySQL have issue with the compound index on the visitor table
// so let's make sure it was created, if not, use the older format to create the table manually instead of
// using the dbDelta() call.
$dbname = DB_NAME;
$result = $wpdb->query("SHOW TABLES WHERE `Tables_in_{$dbname}` = '{$wpdb->prefix}statistics_visitor'" );
if( $result != 1 ) {
$wpdb->query( $create_visitor_table_old );
}
// Check to see if the date_ip index still exists, if so get rid of it.
$result = $wpdb->query("SHOW INDEX FROM {$wp_prefix}statistics_visitor WHERE Key_name = 'date_ip'");
// Note, the result will be the number of fields contained in the index.
if( $result > 1 ) {
$wpdb->query( "DROP INDEX `date_ip` ON {$wp_prefix}statistics_visitor" );
}
// One final database change, drop the 'AString' column from visitors if it exists as it's a typo from an old version.
$result = $wpdb->query( "SHOW COLUMNS FROM {$wp_prefix}statistics_visitor LIKE 'AString'" );
if( $result > 0 ) {
$wpdb->query( "ALTER TABLE `{$wp_prefix}statistics_visitor` DROP `AString`" );
}
// Store the new version information.
update_option('wp_statistics_plugin_version', WP_STATISTICS_VERSION);
update_option('wp_statistics_db_version', WP_STATISTICS_VERSION);
// Now check to see what database updates may be required and record them for a user notice later.
$dbupdates = array( 'date_ip_agent' => false, 'unique_date' => false );
// Check the number of index's on the visitors table, if it's only 5 we need to check for duplicate entries and remove them
$result = $wpdb->query("SHOW INDEX FROM {$wp_prefix}statistics_visitor WHERE Key_name = 'date_ip_agent'");
// Note, the result will be the number of fields contained in the index, so in our case 5.
if( $result != 5 ) {
$dbupdates['date_ip_agent'] = true;
}
// Check the number of index's on the visits table, if it's only 5 we need to check for duplicate entries and remove them
$result = $wpdb->query("SHOW INDEX FROM {$wp_prefix}statistics_visit WHERE Key_name = 'unique_date'");
// Note, the result will be the number of fields contained in the index, so in our case 1.
if( $result != 1 ) {
$dbupdates['unique_date'] = true;
}
$WP_Statistics->update_option( 'pending_db_updates', $dbupdates );
// Get the robots list, we'll use this for both upgrades and new installs.
include_once('robotslist.php');
if( $WPS_Installed == false ) {
// If this is a first time install, we just need to setup the primary values in the tables.
$WP_Statistics->Primary_Values();
// By default, on new installs, use the new search table.
$WP_Statistics->update_option('search_converted', 1);
} else {
// If this is an upgrade, we need to check to see if we need to convert anything from old to new formats.
// Check to see if the "new" settings code is in place or not, if not, upgrade the old settings to the new system.
if( get_option('wp_statistics') === FALSE ) {
$core_options = array('wps_disable_map', 'wps_map_location', 'wps_google_coordinates', 'wps_schedule_dbmaint', 'wps_schedule_dbmaint_days', 'wps_geoip', 'wps_update_geoip', 'wps_schedule_geoip', 'wps_last_geoip_dl', 'wps_auto_pop', 'wps_useronline', 'wps_check_online', 'wps_visits', 'wps_visitors', 'wps_store_ua', 'wps_coefficient', 'wps_pages', 'wps_track_all_pages', 'wps_disable_column', 'wps_menu_bar', 'wps_hide_notices', 'wps_chart_totals', 'wps_stats_report', 'wps_time_report', 'wps_send_report', 'wps_content_report', 'wps_read_capability', 'wps_manage_capability', 'wps_record_exclusions', 'wps_robotlist', 'wps_exclude_ip', 'wps_exclude_loginpage', 'wps_exclude_adminpage');
$var_options = array('wps_disable_se_%', 'wps_exclude_%');
$widget_options = array( 'name_widget', 'useronline_widget', 'tvisit_widget', 'tvisitor_widget', 'yvisit_widget', 'yvisitor_widget', 'wvisit_widget', 'mvisit_widget', 'ysvisit_widget', 'ttvisit_widget', 'ttvisitor_widget', 'tpviews_widget', 'ser_widget', 'select_se', 'tp_widget', 'tpg_widget', 'tc_widget', 'ts_widget', 'tu_widget', 'ap_widget', 'ac_widget', 'au_widget', 'lpd_widget', 'select_lps');
// Handle the core options, we're going to strip off the 'wps_' header as we store them in the new settings array.
foreach( $core_options as $option ) {
$new_name = substr( $option, 4 );
$WP_Statistics->store_option($new_name, get_option( $option ));
delete_option($option);
}
$wiget = array();
// Handle the widget options, we're goin to store them in a subarray.
foreach( $widget_options as $option ) {
$widget[$option] = get_option($option);
delete_option($option);
}
$WP_Statistics->store_option('widget', $widget);
foreach( $var_options as $option ) {
// Handle the special variables options.
$result = $wpdb->get_results("SELECT * FROM {$wp_prefix}options WHERE option_name LIKE '{$option}'");
foreach( $result as $opt ) {
$new_name = substr( $opt->option_name, 4 );
$WP_Statistics->store_option($new_name, $opt->option_value);
delete_option($opt->option_name);
}
}
$WP_Statistics->save_options();
}
// If the robot list is empty, fill in the defaults.
$wps_temp_robotslist = $WP_Statistics->get_option('robotlist');
if(trim($wps_temp_robotslist) == "" || $WP_Statistics->get_option('force_robot_update') == TRUE) {
$WP_Statistics->update_option('robotlist', $wps_robotslist);
}
// WP Statistics V4.2 and below automatically exclude the administrator for statistics collection
// newer versions allow the option to be set for any role in WordPress, however we should mimic
// 4.2 behaviour when we upgrade, so see if the option exists in the database and if not, set it.
// This will not work correctly on a WordPress install that has removed the administrator role.
// However that seems VERY unlikely.
$exclude_admins = $WP_Statistics->get_option('exclude_administrator', '2');
if( $exclude_admins == '2' ) { $WP_Statistics->update_option('exclude_administrator', '1'); }
// WordPress 4.3 broke the diplay of the sidebar widget because it no longer accepted a null value
// to be returned from the widget update function, let's look to see if we need to update any
// occurances in the options table.
$widget_options = get_option( 'widget_wpstatistics_widget' );
if( is_array( $widget_options ) ) {
foreach( $widget_options as $key => $value ) {
// We want to update all null array keys that are integers.
if( $value === null && is_int( $key ) ) { $widget_options[$key] = array(); }
}
// Store the widget options back to the database.
update_option( 'widget_wpstatistics_widget', $widget_options );
}
}
// If this is a first time install or an upgrade and we've added options, set some intelligent defaults.
if( $WP_Statistics->get_option('geoip') === FALSE ) { $WP_Statistics->store_option('geoip',FALSE); }
if( $WP_Statistics->get_option('browscap') === FALSE ) { $WP_Statistics->store_option('browscap',FALSE); }
if( $WP_Statistics->get_option('useronline') === FALSE ) { $WP_Statistics->store_option('useronline',TRUE); }
if( $WP_Statistics->get_option('visits') === FALSE ) { $WP_Statistics->store_option('visits',TRUE); }
if( $WP_Statistics->get_option('visitors') === FALSE ) { $WP_Statistics->store_option('visitors',TRUE); }
if( $WP_Statistics->get_option('pages') === FALSE ) { $WP_Statistics->store_option('pages',TRUE); }
if( $WP_Statistics->get_option('check_online') === FALSE ) { $WP_Statistics->store_option('check_online','30'); }
if( $WP_Statistics->get_option('menu_bar') === FALSE ) { $WP_Statistics->store_option('menu_bar',FALSE); }
if( $WP_Statistics->get_option('coefficient') === FALSE ) { $WP_Statistics->store_option('coefficient','1'); }
if( $WP_Statistics->get_option('stats_report') === FALSE ) { $WP_Statistics->store_option('stats_report',FALSE); }
if( $WP_Statistics->get_option('time_report') === FALSE ) { $WP_Statistics->store_option('time_report','daily'); }
if( $WP_Statistics->get_option('send_report') === FALSE ) { $WP_Statistics->store_option('send_report','mail'); }
if( $WP_Statistics->get_option('content_report') === FALSE ) { $WP_Statistics->store_option('content_report',''); }
if( $WP_Statistics->get_option('update_geoip') === FALSE ) { $WP_Statistics->store_option('update_geoip',TRUE); }
if( $WP_Statistics->get_option('store_ua') === FALSE ) { $WP_Statistics->store_option('store_ua',FALSE); }
if( $WP_Statistics->get_option('robotlist') === FALSE ) { $WP_Statistics->store_option('robotlist',$wps_robotslist); }
if( $WP_Statistics->get_option('exclude_administrator') === FALSE ) { $WP_Statistics->store_option('exclude_administrator',TRUE); }
if( $WP_Statistics->get_option('disable_se_clearch') === FALSE ) { $WP_Statistics->store_option('disable_se_clearch',TRUE); }
if( $WP_Statistics->get_option('disable_se_ask') === FALSE ) { $WP_Statistics->store_option('disable_se_ask',TRUE); }
if( $WP_Statistics->get_option('map_type') === FALSE ) { $WP_Statistics->store_option('map_type','jqvmap'); }
if( $WPS_Installed == false ) {
// We now need to set the robot list to update during the next release. This is only done for new installs to ensure we don't overwrite existing custom robot lists.
$WP_Statistics->store_option('force_robot_update',TRUE);
}
// For version 8.0, we're removing the old %option% types from the reports, so let's upgrade anyone who still has them to short codes.
$report_content = $WP_Statistics->get_option('content_report');
// Check to make sure we have a report to process.
if( trim( $report_content ) == '' ) {
// These are the variables we can replace in the template and the short codes we're going to replace them with.
$template_vars = array(
'user_online' => '[wpstatistics stat=usersonline]',
'today_visitor' => '[wpstatistics stat=visitors time=today]',
'today_visit' => '[wpstatistics stat=visits time=today]',
'yesterday_visitor' => '[wpstatistics stat=visitors time=yesterday]',
'yesterday_visit' => '[wpstatistics stat=visits time=yesterday]',
'total_visitor' => '[wpstatistics stat=visitors time=total]',
'total_visit' => '[wpstatistics stat=visits time=total]',
);
// Replace the items in the template.
$final_report = preg_replace_callback('/%(.*?)%/im', function($m) { return $template_vars[$m[1]]; }, $report_content);
// Store the updated report content.
$WP_Statistics->store_option('content_report', $final_report);
}
// Save the settings now that we've set them.
$WP_Statistics->save_options();
// If the manual has been set to auto delete, do that now.
if( $WP_Statistics->get_option('delete_manual') == true ) {
$filepath = realpath( plugin_dir_path(__FILE__) ) . "/";
if( file_exists( $filepath . WP_STATISTICS_MANUAL . 'html' ) ) { unlink( $filepath . WP_STATISTICS_MANUAL . 'html' ); }
if( file_exists( $filepath . WP_STATISTICS_MANUAL . 'odt' ) ) { unlink( $filepath . WP_STATISTICS_MANUAL . 'odt' ); }
}
if( $WP_Statistics->get_option('upgrade_report') == true ) {
$WP_Statistics->update_option( 'send_upgrade_email', true );
}
// Handle multi site implementations
if( is_multisite() ) {
// Loop through each of the sites.
foreach( wp_get_sites() as $blog ) {
// Since we've just upgraded/installed the current blog, don't execute a remote call for us.
if( $blog['blog_id'] != get_current_blog_id() ) {
// Get the admin url for the current site.
$url = get_admin_url($blog['blog_id']);
// Go and visit the admin url of the site, this will rerun the install script for each site.
// We turn blocking off because we don't really care about the response so why wait for it.
wp_remote_request($url, array( 'blocking' => false ) );
}
}
}
}
?>