oont-contents/plugins/wp-rocket/inc/Engine/Admin/Database/Optimization.php
2025-02-08 15:10:23 +01:00

107 lines
3.1 KiB
PHP

<?php
namespace WP_Rocket\Engine\Admin\Database;
/**
* Handles the database optimization process.
*/
class Optimization {
/**
* Background process instance
*
* @var OptimizationProcess $process Background Process instance.
*/
protected $process;
/**
* Array of option name/label pairs.
*
* @var array
*/
private $options;
/**
* Class constructor.
*
* @param OptimizationProcess $process Background process instance.
*/
public function __construct( OptimizationProcess $process ) {
$this->process = $process;
$this->options = [
'database_revisions' => __( 'Revisions', 'rocket' ),
'database_auto_drafts' => __( 'Auto Drafts', 'rocket' ),
'database_trashed_posts' => __( 'Trashed Posts', 'rocket' ),
'database_spam_comments' => __( 'Spam Comments', 'rocket' ),
'database_trashed_comments' => __( 'Trashed Comments', 'rocket' ),
'database_all_transients' => __( 'Transients', 'rocket' ),
'database_optimize_tables' => __( 'Tables', 'rocket' ),
];
}
/**
* Get Database options
*
* @since 3.0.4
*
* @return array
*/
public function get_options() {
return $this->options;
}
/**
* Performs the database optimization
*
* @since 2.11
*
* @param array $options WP Rocket Database options.
*/
public function process_handler( $options ) {
if ( method_exists( $this->process, 'cancel_process' ) ) {
$this->process->cancel_process();
}
array_map( [ $this->process, 'push_to_queue' ], $options );
$this->process->save()->dispatch();
}
/**
* Count the number of items concerned by the database cleanup
*
* @since 2.8
*
* @param string $type Item type to count.
* @return int Number of items for this type
*/
public function count_cleanup_items( $type ) {
global $wpdb;
$count = 0;
switch ( $type ) {
case 'database_revisions':
$count = $wpdb->get_var( "SELECT COUNT(ID) FROM $wpdb->posts WHERE post_type = 'revision'" );
break;
case 'database_auto_drafts':
$count = $wpdb->get_var( "SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status = 'auto-draft'" );
break;
case 'database_trashed_posts':
$count = $wpdb->get_var( "SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status = 'trash'" );
break;
case 'database_spam_comments':
$count = $wpdb->get_var( "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 'spam'" );
break;
case 'database_trashed_comments':
$count = $wpdb->get_var( "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE (comment_approved = 'trash' OR comment_approved = 'post-trashed')" );
break;
case 'database_all_transients':
$count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(option_id) FROM $wpdb->options WHERE option_name LIKE %s OR option_name LIKE %s", $wpdb->esc_like( '_transient_' ) . '%', $wpdb->esc_like( '_site_transient_' ) . '%' ) );
break;
case 'database_optimize_tables':
$count = $wpdb->get_var( "SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema = '" . DB_NAME . "' and Engine <> 'InnoDB' and data_free > 0" );
break;
}
return $count;
}
}