110 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php declare(strict_types = 1);
 | 
						|
/**
 | 
						|
 * Abstract plugin wrapper.
 | 
						|
 *
 | 
						|
 * @package query-monitor
 | 
						|
 */
 | 
						|
 | 
						|
if ( ! class_exists( 'QM_Plugin' ) ) {
 | 
						|
abstract class QM_Plugin {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @var array<string, string>
 | 
						|
	 */
 | 
						|
	private $plugin = array();
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	public $file = '';
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Class constructor
 | 
						|
	 *
 | 
						|
	 * @param string $file
 | 
						|
	 */
 | 
						|
	protected function __construct( $file ) {
 | 
						|
		$this->file = $file;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Returns the URL for for a file/dir within this plugin.
 | 
						|
	 *
 | 
						|
	 * @param string $file The path within this plugin, e.g. '/js/clever-fx.js'
 | 
						|
	 * @return string URL
 | 
						|
	 */
 | 
						|
	final public function plugin_url( $file = '' ) {
 | 
						|
		return $this->_plugin( 'url', $file );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Returns the filesystem path for a file/dir within this plugin.
 | 
						|
	 *
 | 
						|
	 * @param string $file The path within this plugin, e.g. '/js/clever-fx.js'
 | 
						|
	 * @return string Filesystem path
 | 
						|
	 */
 | 
						|
	final public function plugin_path( $file = '' ) {
 | 
						|
		return $this->_plugin( 'path', $file );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Returns a version number for the given plugin file.
 | 
						|
	 *
 | 
						|
	 * @param string $file The path within this plugin, e.g. '/js/clever-fx.js'
 | 
						|
	 * @return string Version
 | 
						|
	 */
 | 
						|
	final public function plugin_ver( $file ) {
 | 
						|
		return QM_VERSION;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Returns the current plugin's basename, eg. 'my_plugin/my_plugin.php'.
 | 
						|
	 *
 | 
						|
	 * @return string Basename
 | 
						|
	 */
 | 
						|
	final public function plugin_base() {
 | 
						|
		return $this->_plugin( 'base' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Populates and returns the current plugin info.
 | 
						|
	 *
 | 
						|
	 * @param string $item
 | 
						|
	 * @param string $file
 | 
						|
	 * @return string
 | 
						|
	 */
 | 
						|
	private function _plugin( $item, $file = '' ) {
 | 
						|
		if ( ! array_key_exists( $item, $this->plugin ) ) {
 | 
						|
			switch ( $item ) {
 | 
						|
				case 'url':
 | 
						|
					$this->plugin[ $item ] = plugin_dir_url( $this->file );
 | 
						|
					break;
 | 
						|
				case 'path':
 | 
						|
					$this->plugin[ $item ] = plugin_dir_path( $this->file );
 | 
						|
					break;
 | 
						|
				case 'base':
 | 
						|
					$this->plugin[ $item ] = plugin_basename( $this->file );
 | 
						|
					break;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		return $this->plugin[ $item ] . ltrim( $file, '/' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @param string $name Icon name.
 | 
						|
	 * @return string Icon HTML.
 | 
						|
	 */
 | 
						|
	public static function icon( $name ) {
 | 
						|
		if ( 'blank' === $name ) {
 | 
						|
			return '<span class="qm-icon qm-icon-blank"></span>';
 | 
						|
		}
 | 
						|
 | 
						|
		return sprintf(
 | 
						|
			'<svg class="qm-icon qm-icon-%1$s" aria-hidden="true" width="20" height="20" viewBox="0 0 20 20"><use href="#qm-icon-%1$s" /></svg>',
 | 
						|
			esc_attr( $name )
 | 
						|
		);
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
}
 |