135 lines
2.7 KiB
PHP
135 lines
2.7 KiB
PHP
|
<?php declare(strict_types = 1);
|
||
|
/**
|
||
|
* Plugin activation handler.
|
||
|
*
|
||
|
* @package query-monitor
|
||
|
*/
|
||
|
|
||
|
class QM_Activation extends QM_Plugin {
|
||
|
|
||
|
/**
|
||
|
* @param string $file
|
||
|
*/
|
||
|
protected function __construct( $file ) {
|
||
|
# Filters
|
||
|
add_filter( 'pre_update_option_active_plugins', array( $this, 'filter_active_plugins' ) );
|
||
|
add_filter( 'pre_update_site_option_active_sitewide_plugins', array( $this, 'filter_active_sitewide_plugins' ) );
|
||
|
|
||
|
# Activation and deactivation
|
||
|
register_activation_hook( $file, array( $this, 'activate' ) );
|
||
|
register_deactivation_hook( $file, array( $this, 'deactivate' ) );
|
||
|
|
||
|
# Parent setup:
|
||
|
parent::__construct( $file );
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param bool $sitewide
|
||
|
* @return void
|
||
|
*/
|
||
|
public function activate( $sitewide = false ) {
|
||
|
$db = WP_CONTENT_DIR . '/db.php';
|
||
|
$create_symlink = defined( 'QM_DB_SYMLINK' ) ? QM_DB_SYMLINK : true;
|
||
|
|
||
|
if ( $create_symlink && ! file_exists( $db ) && function_exists( 'symlink' ) ) {
|
||
|
@symlink( $this->plugin_path( 'wp-content/db.php' ), $db ); // phpcs:ignore
|
||
|
}
|
||
|
|
||
|
if ( $sitewide ) {
|
||
|
update_site_option( 'active_sitewide_plugins', get_site_option( 'active_sitewide_plugins' ) );
|
||
|
} else {
|
||
|
update_option( 'active_plugins', get_option( 'active_plugins' ) );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return void
|
||
|
*/
|
||
|
public function deactivate() {
|
||
|
$admins = QM_Util::get_admins();
|
||
|
|
||
|
// Remove legacy capability handling:
|
||
|
if ( $admins ) {
|
||
|
$admins->remove_cap( 'view_query_monitor' );
|
||
|
}
|
||
|
|
||
|
# Only delete db.php if it belongs to Query Monitor
|
||
|
if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && class_exists( 'QM_DB', false ) ) {
|
||
|
unlink( WP_CONTENT_DIR . '/db.php' ); // phpcs:ignore
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array<int, string> $plugins
|
||
|
* @return array<int, string>
|
||
|
*/
|
||
|
public function filter_active_plugins( $plugins ) {
|
||
|
|
||
|
// this needs to run on the cli too
|
||
|
|
||
|
if ( empty( $plugins ) ) {
|
||
|
return $plugins;
|
||
|
}
|
||
|
|
||
|
$f = preg_quote( basename( $this->plugin_base() ), '/' );
|
||
|
$qm = preg_grep( '/' . $f . '$/', $plugins );
|
||
|
$notqm = preg_grep( '/' . $f . '$/', $plugins, PREG_GREP_INVERT );
|
||
|
|
||
|
if ( false === $qm || false === $notqm ) {
|
||
|
return $plugins;
|
||
|
}
|
||
|
|
||
|
return array_merge(
|
||
|
$qm,
|
||
|
$notqm
|
||
|
);
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array<string, int> $plugins
|
||
|
* @return array<string, int>
|
||
|
*/
|
||
|
public function filter_active_sitewide_plugins( $plugins ) {
|
||
|
|
||
|
if ( empty( $plugins ) ) {
|
||
|
return $plugins;
|
||
|
}
|
||
|
|
||
|
$f = $this->plugin_base();
|
||
|
|
||
|
if ( isset( $plugins[ $f ] ) ) {
|
||
|
|
||
|
unset( $plugins[ $f ] );
|
||
|
|
||
|
return array_merge( array(
|
||
|
$f => time(),
|
||
|
), $plugins );
|
||
|
|
||
|
} else {
|
||
|
return $plugins;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $file
|
||
|
* @return self
|
||
|
*/
|
||
|
public static function init( $file ) {
|
||
|
|
||
|
static $instance = null;
|
||
|
|
||
|
if ( ! $instance ) {
|
||
|
$instance = new QM_Activation( $file );
|
||
|
}
|
||
|
|
||
|
return $instance;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|