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