65 lines
1.6 KiB
PHP
65 lines
1.6 KiB
PHP
<?php declare(strict_types = 1);
|
|
/**
|
|
* Multisite collector, used for monitoring use of `switch_to_blog()` and `restore_current_blog()`.
|
|
*
|
|
* @package query-monitor
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* @extends QM_DataCollector<QM_Data_Multisite>
|
|
*/
|
|
class QM_Collector_Multisite extends QM_DataCollector {
|
|
public $id = 'multisite';
|
|
|
|
public function __construct() {
|
|
parent::__construct();
|
|
|
|
$this->data->switches = array();
|
|
|
|
add_action( 'switch_blog', array( $this, 'action_switch_blog' ), 10, 3 );
|
|
}
|
|
|
|
public function get_storage(): QM_Data {
|
|
return new QM_Data_Multisite();
|
|
}
|
|
|
|
/**
|
|
* Fires when the blog is switched.
|
|
*
|
|
* @param int $new_blog_id New blog ID.
|
|
* @param int $prev_blog_id Previous blog ID.
|
|
* @param string $context Additional context. Accepts 'switch' when called from switch_to_blog()
|
|
* or 'restore' when called from restore_current_blog().
|
|
* @return void
|
|
*/
|
|
public function action_switch_blog( $new_blog_id, $prev_blog_id, $context ) {
|
|
if ( intval( $new_blog_id ) === intval( $prev_blog_id ) ) {
|
|
return;
|
|
}
|
|
|
|
$this->data->switches[] = array(
|
|
'new' => $new_blog_id,
|
|
'prev' => $prev_blog_id,
|
|
'to' => ( 'switch' === $context ),
|
|
'trace' => new QM_Backtrace( array(
|
|
'ignore_hook' => array(
|
|
'switch_blog' => true,
|
|
),
|
|
'ignore_func' => array(
|
|
'switch_to_blog' => true,
|
|
'restore_current_blog' => true,
|
|
),
|
|
) ),
|
|
);
|
|
}
|
|
}
|
|
|
|
if ( is_multisite() ) {
|
|
# Load early to detect as many happenings during the bootstrap process as possible
|
|
QM_Collectors::add( new QM_Collector_Multisite() );
|
|
}
|