SILENT KILLERPanel

Current Path: > home > transcarter > public_html > wp-content > plugins > query-monitor > classes


Operation   : Linux host59.registrar-servers.com 4.18.0-513.18.1.lve.2.el8.x86_64 #1 SMP Sat Mar 30 15:36:11 UTC 2024 x86_64
Software     : Apache
Server IP    : 198.54.126.42 | Your IP: 216.73.216.135
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: /home/transcarter/public_html/wp-content/plugins/query-monitor/classes

NameTypeSizeLast ModifiedActions
Activation.php File 3038 bytes July 17 2025 21:05:45.
Backtrace.php File 14755 bytes July 17 2025 21:05:45.
CLI.php File 1568 bytes July 17 2025 21:05:45.
Collector.php File 8676 bytes July 17 2025 21:05:45.
Collector_Assets.php File 13804 bytes July 17 2025 21:05:45.
Collectors.php File 1923 bytes July 17 2025 21:05:45.
Component.php File 257 bytes July 17 2025 21:05:45.
DB.php File 1601 bytes July 17 2025 21:05:45.
Data.php File 1343 bytes July 17 2025 21:05:45.
DataCollector.php File 396 bytes July 17 2025 21:05:45.
Dispatcher.php File 5244 bytes July 17 2025 21:05:45.
Dispatchers.php File 1241 bytes July 17 2025 21:05:45.
Hook.php File 1706 bytes July 17 2025 21:05:45.
Output.php File 923 bytes July 17 2025 21:05:45.
PHP.php File 1397 bytes July 17 2025 21:05:45.
Plugin.php File 2400 bytes July 17 2025 21:05:45.
QM.php File 4443 bytes July 17 2025 21:05:45.
QueryMonitor.php File 8688 bytes July 17 2025 21:05:45.
Timer.php File 2923 bytes July 17 2025 21:05:45.
Util.php File 19534 bytes July 17 2025 21:05:45.
debug_bar.php File 1713 bytes July 17 2025 21:05:45.
debug_bar_panel.php File 1446 bytes July 17 2025 21:05:45.

Reading File: /home/transcarter/public_html/wp-content/plugins/query-monitor/classes/Dispatcher.php

<?php declare(strict_types = 1);
/**
 * Abstract dispatcher.
 *
 * @package query-monitor
 */

if ( ! class_exists( 'QM_Dispatcher' ) ) {
abstract class QM_Dispatcher {

	/**
	 * Outputter instances.
	 *
	 * @var array<string, QM_Output> Array of outputters.
	 */
	protected $outputters = array();

	/**
	 * Query Monitor plugin instance.
	 *
	 * @var QM_Plugin Plugin instance.
	 */
	protected $qm;

	/**
	 * @var string
	 */
	public $id = '';

	/**
	 * @var bool
	 */
	protected $ceased = false;

	public function __construct( QM_Plugin $qm ) {
		$this->qm = $qm;

		if ( ! defined( 'QM_COOKIE' ) ) {
			define( 'QM_COOKIE', 'wp-query_monitor_' . COOKIEHASH );
		}
		if ( ! defined( 'QM_EDITOR_COOKIE' ) ) {
			define( 'QM_EDITOR_COOKIE', 'wp-query_monitor_editor_' . COOKIEHASH );
		}

		add_action( 'init', array( $this, 'init' ) );

	}

	/**
	 * @return bool
	 */
	abstract public function is_active();

	/**
	 * @param string $message
	 * @param mixed[] $e
	 * @phpstan-param array{
	 *   message: string,
	 *   file: string,
	 *   line: int,
	 *   type?: int,
	 *   trace?: mixed|null,
	 * } $e
	 */
	public function output_fatal( $message, array $e ): void {
		print_r( $e );
	}

	/**
	 * @return bool
	 */
	final public function should_dispatch() {

		$e = error_get_last();

		# Don't dispatch if a fatal has occurred:
		if ( ! empty( $e ) && ( $e['type'] & QM_ERROR_FATALS ) ) {
			return false;
		}

		/**
		 * Allows users to disable this dispatcher.
		 *
		 * The dynamic portion of the hook name, `$this->id`, refers to the dispatcher ID.
		 *
		 * Possible filter names include:
		 *
		 *  - `qm/dispatch/html`
		 *  - `qm/dispatch/ajax`
		 *  - `qm/dispatch/redirect`
		 *  - `qm/dispatch/rest`
		 *  - `qm/dispatch/wp_die`
		 *
		 * @since 2.8.0
		 *
		 * @param bool $true Whether or not the dispatcher is enabled.
		 */
		if ( ! apply_filters( "qm/dispatch/{$this->id}", true ) ) {
			return false;
		}

		return $this->is_active();

	}

	/**
	 * @return void
	 */
	public function cease() {
		$this->ceased = true;

		add_filter( "qm/dispatch/{$this->id}", '__return_false' );
	}

	/**
	 * Processes and fetches the outputters for this dispatcher.
	 *
	 * @param string $outputter_id The outputter ID.
	 * @return array<string, QM_Output> Array of outputters.
	 */
	public function get_outputters( $outputter_id ) {
		$collectors = QM_Collectors::init();
		$collectors->process();

		/**
		 * Allows users to filter what outputs.
		 *
		 * The dynamic portion of the hook name, `$outputter_id`, refers to the outputter ID.
		 *
		 * @since 2.8.0
		 *
		 * @param array<string, QM_Output> $outputters Array of outputters.
		 * @param QM_Collectors            $collectors List of collectors.
		 */
		$this->outputters = apply_filters( "qm/outputter/{$outputter_id}", array(), $collectors );

		return $this->outputters;
	}

	/**
	 * @return void
	 */
	public function init() {
		if ( ! self::user_can_view() ) {
			do_action( 'qm/cease' );
			return;
		}

		if ( ! defined( 'DONOTCACHEPAGE' ) ) {
			define( 'DONOTCACHEPAGE', 1 );
		}

		add_action( 'send_headers', 'nocache_headers' );
	}

	/**
	 * @return void
	 */
	protected function before_output() {
	}

	/**
	 * @return void
	 */
	protected function after_output() {
	}

	/**
	 * @return bool
	 */
	public static function user_can_view() {

		if ( ! did_action( 'plugins_loaded' ) ) {
			return false;
		}

		if ( current_user_can( 'view_query_monitor' ) ) {
			return true;
		}

		return self::user_verified();

	}

	/**
	 * @return bool
	 */
	public static function user_verified() {
		if ( isset( $_COOKIE[QM_COOKIE] ) ) { // phpcs:ignore
			return self::verify_cookie( wp_unslash( $_COOKIE[QM_COOKIE] ) ); // phpcs:ignore
		}
		return false;
	}

	/**
	 * @return string
	 */
	public static function editor_cookie() {
		if ( defined( 'QM_EDITOR_COOKIE' ) && isset( $_COOKIE[QM_EDITOR_COOKIE] ) ) { // phpcs:ignore
			return $_COOKIE[QM_EDITOR_COOKIE]; // phpcs:ignore
		}
		return '';
	}

	/**
	 * @param string $value
	 * @return bool
	 */
	public static function verify_cookie( $value ) {
		$old_user_id = wp_validate_auth_cookie( $value, 'logged_in' );
		if ( $old_user_id ) {
			return user_can( $old_user_id, 'view_query_monitor' );
		}
		return false;
	}

	/**
	 * Attempts to switch to the given locale.
	 *
	 * This is a wrapper around `switch_to_locale()` which is safe to call at any point, even
	 * before the `$wp_locale_switcher` global is initialised.
	 *
	 * @param string $locale The locale.
	 * @return bool True on success, false on failure.
	 */
	public static function switch_to_locale( $locale ) {
		global $wp_locale_switcher;

		if ( $wp_locale_switcher instanceof WP_Locale_Switcher ) {
			return switch_to_locale( $locale );
		}

		return false;
	}

	/**
	 * Attempts to restore the previous locale.
	 *
	 * This is a wrapper around `restore_previous_locale()` which is safe to call at any point, even
	 * before the `$wp_locale_switcher` global is initialised.
	 *
	 * @return string|false Locale on success, false on error.
	 */
	public static function restore_previous_locale() {
		global $wp_locale_switcher;

		if ( $wp_locale_switcher instanceof WP_Locale_Switcher ) {
			return restore_previous_locale();
		}

		return false;
	}
}
}

SILENT KILLER Tool