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

99 lines
2.2 KiB
PHP

<?php
namespace WP_Rocket\Engine\Preload\Database\Tables;
use WP_Rocket\Dependencies\Database\Table;
class Cache extends Table {
/**
* Hook into queries, admin screens, and more!
*
* @since 1.0.0
*/
public function __construct() {
parent::__construct();
add_action( 'rocket_preload_activation', [ $this, 'maybe_upgrade' ] );
add_action( 'init', [ $this, 'maybe_upgrade' ] );
add_action( 'admin_init', [ $this, 'maybe_trigger_recreate_table' ], 9 );
}
/**
* Table name
*
* @var string
*/
protected $name = 'wpr_rocket_cache';
/**
* Database version key (saved in _options or _sitemeta)
*
* @var string
*/
protected $db_version_key = 'wpr_rocket_cache_version';
/**
* Database version
*
* @var int
*/
protected $version = 20220927;
/**
* Key => value array of versions => methods.
*
* @var array
*/
protected $upgrades = [
20220927 => 'add_is_locked_column',
];
/**
* Setup the database schema
*
* @return void
*/
protected function set_schema() {
$this->schema = "
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
url varchar(2000) NOT NULL default '',
status varchar(255) NOT NULL default '',
modified timestamp NOT NULL default '0000-00-00 00:00:00',
last_accessed timestamp NOT NULL default '0000-00-00 00:00:00',
is_locked tinyint(1) NOT NULL default 0,
PRIMARY KEY (id),
KEY url (url(191)),
KEY modified (modified),
KEY last_accessed (last_accessed)";
}
/**
* Trigger recreation of cache table if not exist.
*
* @return void
*/
public function maybe_trigger_recreate_table() {
if ( $this->exists() ) {
return;
}
delete_option( $this->db_version_key );
}
/**
* Add is_locked column.
*
* @return bool
*/
public function add_is_locked_column() {
$hash_column_exists = $this->column_exists( 'is_locked' );
$created = true;
if ( ! $hash_column_exists ) {
$created &= $this->get_db()->query( "ALTER TABLE {$this->table_name} ADD COLUMN is_locked tinyint(1) NOT NULL default 0 AFTER last_accessed" );
}
return $this->is_success( $created );
}
}