155 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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' ) . ' ' . WP_Statistics_Admin_Pages::sanitize_mail_subject( $blogname ), $result_string, $headers );
 | |
| 		}
 | |
| 
 | |
| 		return $result_string;
 | |
| 	} else {
 | |
| 		return __( 'Please select a value over 30 days.', 'wp-statistics' );
 | |
| 	}
 | |
| }
 |