You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
285 lines
10 KiB
285 lines
10 KiB
<?php
|
|
global $wpdb, $WP_Statistics;
|
|
$wp_prefix = $wpdb->prefix;
|
|
|
|
if ( ! is_super_admin() ) {
|
|
wp_die( __( 'Access denied!', 'wp-statistics' ) );
|
|
}
|
|
|
|
if ( array_key_exists( 'populate', $_GET ) ) {
|
|
if ( intval( $_GET['populate'] ) == 1 ) {
|
|
echo WP_Statistics_Updates::populate_geoip_info();
|
|
}
|
|
}
|
|
|
|
if ( array_key_exists( 'hash-ips', $_GET ) ) {
|
|
if ( intval( $_GET['hash-ips'] ) == 1 ) {
|
|
// Generate a random salt
|
|
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
$randomString = '';
|
|
for ( $i = 0; $i < 50; $i ++ ) {
|
|
$randomString .= $characters[ rand( 0, strlen( $characters ) - 1 ) ];
|
|
}
|
|
|
|
// Get the rows from the Visitors table.
|
|
$result = $wpdb->get_results( "SELECT DISTINCT ip FROM {$wp_prefix}statistics_visitor" );
|
|
|
|
foreach ( $result as $row ) {
|
|
if ( substr( $row->ip, 0, 6 ) != '#hash#' ) {
|
|
$wpdb->update(
|
|
$wp_prefix . "statistics_visitor",
|
|
array(
|
|
'ip' => '#hash#' . sha1( $row->ip . $randomString ),
|
|
),
|
|
array(
|
|
'ip' => $row->ip,
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
echo "<div class='updated settings-error'><p><strong>" .
|
|
__( 'IP Addresses replaced with hash values.', 'wp-statistics' ) .
|
|
"</strong></p></div>";
|
|
}
|
|
}
|
|
|
|
if ( array_key_exists( 'install', $_GET ) ) {
|
|
if ( intval( $_GET['install'] ) == 1 ) {
|
|
$WPS_Installed = "1.0";
|
|
new WP_Statistics_Install( $WP_Statistics );
|
|
echo "<div class='updated settings-error'><p><strong>" .
|
|
__( 'Install routine complete.', 'wp-statistics' ) .
|
|
"</strong></p></div>";
|
|
}
|
|
}
|
|
|
|
if ( array_key_exists( 'index', $_GET ) ) {
|
|
if ( intval( $_GET['index'] ) == 1 ) {
|
|
// 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'" );
|
|
|
|
if ( $result != 5 ) {
|
|
// We have to loop through all the rows in the visitors table to check for duplicates that may have been created in error.
|
|
$result = $wpdb->get_results(
|
|
"SELECT ID, last_counter, ip FROM {$wp_prefix}statistics_visitor ORDER BY last_counter, ip"
|
|
);
|
|
|
|
// Setup the inital values.
|
|
$lastrow = array( 'last_counter' => '', 'ip' => '' );
|
|
$deleterows = array();
|
|
|
|
// Ok, now iterate over the results.
|
|
foreach ( $result as $row ) {
|
|
// if the last_counter (the date) and IP is the same as the last row, add the row to be deleted.
|
|
if ( $row->last_counter == $lastrow['last_counter'] && $row->ip == $lastrow['ip'] ) {
|
|
$deleterows[] .= $row->ID;
|
|
}
|
|
|
|
// Update the lastrow data.
|
|
$lastrow['last_counter'] = $row->last_counter;
|
|
$lastrow['ip'] = $row->ip;
|
|
}
|
|
|
|
// Now do the acutal deletions.
|
|
foreach ( $deleterows as $row ) {
|
|
$wpdb->delete( $wp_prefix . 'statistics_visitor', array( 'ID' => $row ) );
|
|
}
|
|
|
|
// The table should be ready to be updated now with the new index, so let's do it.
|
|
$result = $wpdb->get_results(
|
|
"ALTER TABLE " .
|
|
$wp_prefix .
|
|
'statistics_visitor' .
|
|
" ADD UNIQUE `date_ip_agent` ( `last_counter`, `ip`, `agent` (75), `platform` (75), `version` (75) )"
|
|
);
|
|
|
|
// We might have an old index left over from 7.1-7.3 so lets make sure to delete it.
|
|
$wpdb->query( "DROP INDEX `date_ip` ON {$wp_prefix}statistics_visitor" );
|
|
|
|
// Record in the options that we've done this update.
|
|
$dbupdates = $WP_Statistics->get_option( 'pending_db_updates' );
|
|
$dbupdates['date_ip_agent'] = false;
|
|
$WP_Statistics->update_option( 'pending_db_updates', $dbupdates );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( array_key_exists( 'visits', $_GET ) ) {
|
|
if ( intval( $_GET['visits'] ) == 1 ) {
|
|
// 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 ) {
|
|
// We have to loop through all the rows in the visitors table to check for duplicates that may have been created in error.
|
|
$result = $wpdb->get_results(
|
|
"SELECT ID, last_counter, visit FROM {$wp_prefix}statistics_visit ORDER BY last_counter, visit DESC"
|
|
);
|
|
|
|
// Setup the initial values.
|
|
$lastrow = array( 'last_counter' => '', 'visit' => 0, 'id' => 0 );
|
|
$deleterows = array();
|
|
|
|
// Ok, now iterate over the results.
|
|
foreach ( $result as $row ) {
|
|
// if the last_counter (the date) and IP is the same as the last row, add the row to be deleted.
|
|
if ( $row->last_counter == $lastrow['last_counter'] ) {
|
|
$deleterows[] .= $row->ID;
|
|
}
|
|
|
|
// Update the lastrow data.
|
|
$lastrow['last_counter'] = $row->last_counter;
|
|
$lastrow['id'] = $row->ID;
|
|
$lastrow['visit'] = $row->visit;
|
|
}
|
|
|
|
// Now do the acutal deletions.
|
|
foreach ( $deleterows as $row ) {
|
|
$wpdb->delete( $wp_prefix . 'statistics_visit', array( 'ID' => $row ) );
|
|
}
|
|
|
|
// The table should be ready to be updated now with the new index, so let's do it.
|
|
$result = $wpdb->get_results(
|
|
"ALTER TABLE " . $wp_prefix . 'statistics_visit' . " ADD UNIQUE `unique_date` ( `last_counter` )"
|
|
);
|
|
|
|
// Record in the options that we've done this update.
|
|
$dbupdates = $WP_Statistics->get_option( 'pending_db_updates' );
|
|
$dbupdates['unique_date'] = false;
|
|
$WP_Statistics->update_option( 'pending_db_updates', $dbupdates );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( array_key_exists( 'historical-submit', $_POST ) ) {
|
|
if ( array_key_exists( 'wps_historical_visitors', $_POST ) ) {
|
|
$result = $wpdb->update(
|
|
$wp_prefix . "statistics_historical",
|
|
array( 'value' => $_POST['wps_historical_visitors'] ),
|
|
array( 'category' => 'visitors' )
|
|
);
|
|
|
|
if ( $result == 0 ) {
|
|
$result = $wpdb->insert(
|
|
$wp_prefix . "statistics_historical",
|
|
array(
|
|
'value' => $_POST['wps_historical_visitors'],
|
|
'category' => 'visitors',
|
|
'page_id' => - 1,
|
|
'uri' => '-1',
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
if ( array_key_exists( 'wps_historical_visits', $_POST ) ) {
|
|
$result = $wpdb->update(
|
|
$wp_prefix . "statistics_historical",
|
|
array( 'value' => $_POST['wps_historical_visits'] ),
|
|
array( 'category' => 'visits' )
|
|
);
|
|
|
|
if ( $result == 0 ) {
|
|
$result = $wpdb->insert(
|
|
$wp_prefix . "statistics_historical",
|
|
array(
|
|
'value' => $_POST['wps_historical_visits'],
|
|
'category' => 'visits',
|
|
'page_id' => - 2,
|
|
'uri' => '-2',
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if ( array_key_exists( 'search', $_GET ) ) {
|
|
|
|
// Make sure we get all the search engines, even the ones the disabled ones.
|
|
$se_list = wp_statistics_searchengine_list();
|
|
$total = 0;
|
|
$limitsize = 10000;
|
|
|
|
foreach ( $se_list as $key => $se ) {
|
|
$sql = wp_statistics_searchengine_query( $key );
|
|
$rowcount = $wpdb->get_var( "SELECT count(*) FROM `{$wpdb->prefix}statistics_visitor` WHERE {$sql}" );
|
|
$offset = 0;
|
|
|
|
while ( $rowcount > 0 ) {
|
|
$result = $wpdb->get_results(
|
|
"SELECT * FROM `{$wpdb->prefix}statistics_visitor` WHERE {$sql} LIMIT {$offset}, {$limitsize}"
|
|
);
|
|
foreach ( $result as $row ) {
|
|
$parts = parse_url( $row->referred );
|
|
$data['last_counter'] = $row->last_counter;
|
|
$data['engine'] = $key;
|
|
$data['host'] = $parts['host'];
|
|
$data['words'] = $WP_Statistics->Search_Engine_QueryString( $row->referred );
|
|
$data['visitor'] = $row->ID;
|
|
|
|
if ( $data['words'] == 'No search query found!' ) {
|
|
$data['words'] = '';
|
|
}
|
|
|
|
$wpdb->insert( $wpdb->prefix . 'statistics_search', $data );
|
|
$total ++;
|
|
}
|
|
|
|
$rowcount -= $limitsize;
|
|
$offset += $limitsize;
|
|
}
|
|
}
|
|
|
|
$WP_Statistics->update_option( 'search_converted', 1 );
|
|
echo "<div class='updated settings-error'><p><strong>" .
|
|
sprintf( __( 'Search table conversion complete, %d rows added.', 'wp-statistics' ), $total ) .
|
|
"</strong></p></div>";
|
|
}
|
|
?>
|
|
<div class="wrap wp-statistics-settings">
|
|
<h2><?php _e( 'Optimization', 'wp-statistics' ); ?></h2>
|
|
|
|
<div id="poststuff">
|
|
<div id="post-body" class="metabox-holder columns-2">
|
|
<div class="wp-list-table widefat widefat">
|
|
<div class="wp-statistics-container">
|
|
<ul class="tabs">
|
|
<li class="tab-link current" data-tab="resources"><?php _e(
|
|
'Resources/Information',
|
|
'wp-statistics'
|
|
); ?></li>
|
|
<li class="tab-link" data-tab="export"><?php _e( 'Export', 'wp-statistics' ); ?></li>
|
|
<li class="tab-link" data-tab="purging"><?php _e( 'Purging', 'wp-statistics' ); ?></li>
|
|
<li class="tab-link" data-tab="database"><?php _e( 'Database', 'wp-statistics' ); ?></li>
|
|
<li class="tab-link" data-tab="updates"><?php _e( 'Updates', 'wp-statistics' ); ?></li>
|
|
<li class="tab-link" data-tab="historical"><?php _e( 'Historical', 'wp-statistics' ); ?></li>
|
|
</ul>
|
|
|
|
<div id="resources" class="tab-content current">
|
|
<?php include( WP_Statistics::$reg['plugin-dir'] . 'includes/optimization/tabs/wps-optimization-resources.php' ); ?>
|
|
</div>
|
|
<div id="export" class="tab-content">
|
|
<?php include( WP_Statistics::$reg['plugin-dir'] . 'includes/optimization/tabs/wps-optimization-export.php' ); ?>
|
|
</div>
|
|
<div id="purging" class="tab-content">
|
|
<?php include( WP_Statistics::$reg['plugin-dir'] . 'includes/optimization/tabs/wps-optimization-purging.php' ); ?>
|
|
</div>
|
|
<div id="database" class="tab-content">
|
|
<?php include( WP_Statistics::$reg['plugin-dir'] . 'includes/optimization/tabs/wps-optimization-database.php' ); ?>
|
|
</div>
|
|
<div id="updates" class="tab-content">
|
|
<?php include( WP_Statistics::$reg['plugin-dir'] . 'includes/optimization/tabs/wps-optimization-updates.php' ); ?>
|
|
</div>
|
|
<div id="historical" class="tab-content">
|
|
<?php include( WP_Statistics::$reg['plugin-dir'] . 'includes/optimization/tabs/wps-optimization-historical.php' ); ?>
|
|
</div>
|
|
</div><!-- container -->
|
|
</div>
|
|
|
|
<?php include WP_Statistics::$reg['plugin-dir'] . 'includes/templates/postbox.php'; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|