• File: purge-hits.php
  • Full Path: /home/chassiw/www/wp-statistics/includes/functions/purge-hits.php
  • File size: 2.23 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php
function wp_statistics_purge_visitor_hits( $purge_hits ) {
	GLOBAL $wpdb, $WP_Statistics;

	// If it's less than 10 hits, don't do anything.
	if ( $purge_hits > 9 ) {
		// Purge the visitor's with more than the defined hits.
		$result = $wpdb->get_results(
			$wpdb->prepare( "SELECT * FROM {$wpdb->prefix}statistics_visitor WHERE `hits` > %s", $purge_hits )
		);

		$to_delete = array();

		// Loop through the results and store the requried information in an array.  We don't just process it now as deleting
		// the rows from the visitor table will mess up the results from our first query.
		foreach ( $result as $row ) {
			$to_delete[] = array( $row->ID, $row->last_counter, $row->hits );
		}
		if ( count( $to_delete ) > 0 ) {
			foreach ( $to_delete as $item ) {
				// First update the daily hit count.
				$wpdb->query(
					$wpdb->prepare(
						"UPDATE {$wpdb->prefix}statistics_visit SET `visit` = `visit` - %d WHERE `last_counter` = %s;",
						$item[2],
						$item[1]
					)
				);
				// Next remove the visitor.  Note we can't do both in a single query, looks like $wpdb doesn't like executing them together.
				$wpdb->query(
					$wpdb->prepare( "DELETE FROM {$wpdb->prefix}statistics_visitor WHERE `id` = %s;", $item[0] )
				);
			}

			$result_string = sprintf(
				__( '%s records purged successfully.', 'wp-statistics' ),
				'<code>' . count( $to_delete ) . '</code>'
			);
		} else {
			$result_string = __( 'No visitors found to purge.', 'wp-statistics' );
		}
	} else {
		$result_string = __( 'Number of hits must be greater than or equal to 10!', 'wp-statistics' );
	}

	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;
}