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

<?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>