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