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.
216 lines
7.2 KiB
216 lines
7.2 KiB
<?php
|
|
function wp_statistics_purge_data( $purge_days ) {
|
|
GLOBAL $wpdb, $WP_Statistics;
|
|
|
|
// If it's less than 30 days, don't do anything.
|
|
if ( $purge_days > 30 ) {
|
|
// Purge the visit data.
|
|
$table_name = $wpdb->prefix . 'statistics_visit';
|
|
$date_string = $WP_Statistics->current_date( 'Y-m-d', '-' . $purge_days );
|
|
|
|
$result = $wpdb->query( $wpdb->prepare( "DELETE FROM {$table_name} WHERE `last_counter` < %s", $date_string ) );
|
|
|
|
if ( $result ) {
|
|
// Update the historical count with what we purged.
|
|
$historical_result = $wpdb->query(
|
|
$wpdb->prepare(
|
|
"UPDATE {$wpdb->prefix}statistics_historical SET value = value + %d WHERE `category` = 'visits'",
|
|
$result
|
|
)
|
|
);
|
|
|
|
if ( $historical_result == 0 ) {
|
|
$wpdb->insert(
|
|
$wpdb->prefix . "statistics_historical",
|
|
array(
|
|
'value' => $result,
|
|
'category' => 'visits',
|
|
'page_id' => - 2,
|
|
'uri' => '-2',
|
|
)
|
|
);
|
|
}
|
|
|
|
$result_string = sprintf(
|
|
__( '%s data older than %s days purged successfully.', 'wp-statistics' ),
|
|
'<code>' . $table_name . '</code>',
|
|
'<code>' . $purge_days . '</code>'
|
|
);
|
|
} else {
|
|
$result_string = sprintf(
|
|
__( 'No records found to purge from %s!', 'wp-statistics' ),
|
|
'<code>' . $table_name . '</code>'
|
|
);
|
|
}
|
|
|
|
// Purge the visitors data.
|
|
$table_name = $wpdb->prefix . 'statistics_visitor';
|
|
|
|
$result = $wpdb->query( $wpdb->prepare( "DELETE FROM {$table_name} WHERE `last_counter` < %s", $date_string ) );
|
|
|
|
if ( $result ) {
|
|
// Update the historical count with what we purged.
|
|
$historical_result = $wpdb->query(
|
|
$wpdb->prepare(
|
|
"UPDATE {$wpdb->prefix}statistics_historical SET value = value + %d WHERE `category` = 'visitors'",
|
|
$result
|
|
)
|
|
);
|
|
|
|
if ( $historical_result == 0 ) {
|
|
$wpdb->insert(
|
|
$wpdb->prefix . "statistics_historical",
|
|
array(
|
|
'value' => $result,
|
|
'category' => 'visitors',
|
|
'page_id' => - 1,
|
|
'uri' => '-1',
|
|
)
|
|
);
|
|
}
|
|
|
|
$result_string .= '<br>' .
|
|
sprintf(
|
|
__( '%s data older than %s days purged successfully.', 'wp-statistics' ),
|
|
'<code>' . $table_name . '</code>',
|
|
'<code>' . $purge_days . '</code>'
|
|
);
|
|
} else {
|
|
$result_string .= '<br>' .
|
|
sprintf(
|
|
__( 'No records found to purge from %s!', 'wp-statistics' ),
|
|
'<code>' . $table_name . '</code>'
|
|
);
|
|
}
|
|
|
|
// Purge the exclusions data.
|
|
$table_name = $wpdb->prefix . 'statistics_exclusions';
|
|
|
|
$result = $wpdb->query( $wpdb->prepare( "DELETE FROM {$table_name} WHERE `date` < %s", $date_string ) );
|
|
|
|
if ( $result ) {
|
|
$result_string .= '<br>' .
|
|
sprintf(
|
|
__( '%s data older than %s days purged successfully.', 'wp-statistics' ),
|
|
'<code>' . $table_name . '</code>',
|
|
'<code>' . $purge_days . '</code>'
|
|
);
|
|
} else {
|
|
$result_string .= '<br>' .
|
|
sprintf(
|
|
__( 'No records found to purge from %s!', 'wp-statistics' ),
|
|
'<code>' . $table_name . '</code>'
|
|
);
|
|
}
|
|
|
|
// Purge the search data.
|
|
$table_name = $wpdb->prefix . 'statistics_search';
|
|
|
|
$result = $wpdb->query( $wpdb->prepare( "DELETE FROM {$table_name} WHERE `last_counter` < %s", $date_string ) );
|
|
|
|
if ( $result ) {
|
|
$result_string .= '<br>' .
|
|
sprintf(
|
|
__( '%s data older than %s days purged successfully.', 'wp-statistics' ),
|
|
'<code>' . $table_name . '</code>',
|
|
'<code>' . $purge_days . '</code>'
|
|
);
|
|
} else {
|
|
$result_string .= '<br>' .
|
|
sprintf(
|
|
__( 'No records found to purge from %s!', 'wp-statistics' ),
|
|
'<code>' . $table_name . '</code>'
|
|
);
|
|
}
|
|
|
|
// Purge the pages data, this is more complex as we want to save the historical data per page.
|
|
$table_name = $wpdb->prefix . 'statistics_pages';
|
|
$historical = 0;
|
|
|
|
// The first thing we need to do is update the historical data by finding all the unique pages.
|
|
$result = $wpdb->get_results(
|
|
$wpdb->prepare( "SELECT DISTINCT uri FROM {$table_name} WHERE `date` < %s", $date_string )
|
|
);
|
|
|
|
// If we have a result, let's store the historical data.
|
|
if ( $result ) {
|
|
// Loop through all the unique rows that were returned.
|
|
foreach ( $result as $row ) {
|
|
// Use the unique rows to get a total count from the database of all the data from the given URIs/Pageids that we're going to delete later.
|
|
$historical = $wpdb->get_var(
|
|
$wpdb->prepare(
|
|
"SELECT sum(count) FROM {$table_name} WHERE `uri` = %s AND `date` < %s",
|
|
$row->uri,
|
|
$date_string
|
|
)
|
|
);
|
|
|
|
// Do an update of the historical data.
|
|
$uresult = $wpdb->query(
|
|
$wpdb->prepare(
|
|
"UPDATE {$wpdb->prefix}statistics_historical SET `value` = value + %d WHERE `uri` = %s AND `category` = 'uri'",
|
|
$historical,
|
|
$row->uri,
|
|
$date_string
|
|
)
|
|
);
|
|
|
|
// If we failed it's because this is the first time we've seen this URI/pageid so let's create a historical row for it.
|
|
if ( $uresult == 0 ) {
|
|
$wpdb->insert(
|
|
$wpdb->prefix . "statistics_historical",
|
|
array(
|
|
'value' => $historical,
|
|
'category' => 'uri',
|
|
'uri' => $row->uri,
|
|
'page_id' => wp_statistics_uri_to_id( $row->uri ),
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Now that we've done all of the required historical data storage, we can actually delete the data from the database.
|
|
$result = $wpdb->query( $wpdb->prepare( "DELETE FROM {$table_name} WHERE `date` < %s", $date_string ) );
|
|
|
|
if ( $result ) {
|
|
$result_string .= '<br>' .
|
|
sprintf(
|
|
__( '%s data older than %s days purged successfully.', 'wp-statistics' ),
|
|
'<code>' . $table_name . '</code>',
|
|
'<code>' . $purge_days . '</code>'
|
|
);
|
|
} else {
|
|
$result_string .= '<br>' .
|
|
sprintf(
|
|
__( 'No records found to purge from %s!', 'wp-statistics' ),
|
|
'<code>' . $table_name . '</code>'
|
|
);
|
|
}
|
|
|
|
if ( $WP_Statistics->get_option( 'prune_report' ) == true ) {
|
|
$blogname = get_bloginfo( 'name' );
|
|
$blogemail = get_bloginfo( 'admin_email' );
|
|
|
|
$headers[] = "From: $blogname <$blogemail>";
|
|
$headers[] = "MIME-Version: 1.0";
|
|
$headers[] = "Content-type: text/html; charset=utf-8";
|
|
|
|
if ( $WP_Statistics->get_option( 'email_list' ) == '' ) {
|
|
$WP_Statistics->update_option( 'email_list', $blogemail );
|
|
}
|
|
|
|
wp_mail(
|
|
$WP_Statistics->get_option( 'email_list' ),
|
|
__( 'Database pruned on', 'wp-statistics' ) . ' ' . $blogname,
|
|
$result_string,
|
|
$headers
|
|
);
|
|
}
|
|
|
|
return $result_string;
|
|
} else {
|
|
return __( 'Please select a value over 30 days.', 'wp-statistics' );
|
|
}
|
|
}
|