123 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * WPSEO plugin file.
 | 
						|
 *
 | 
						|
 * @package WPSEO\Admin\Options\Tabs
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Class WPSEO_Option_Tabs.
 | 
						|
 */
 | 
						|
class WPSEO_Option_Tabs {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Tabs base.
 | 
						|
	 *
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	private $base;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * The tabs in this group.
 | 
						|
	 *
 | 
						|
	 * @var array
 | 
						|
	 */
 | 
						|
	private $tabs = [];
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Name of the active tab.
 | 
						|
	 *
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	private $active_tab = '';
 | 
						|
 | 
						|
	/**
 | 
						|
	 * WPSEO_Option_Tabs constructor.
 | 
						|
	 *
 | 
						|
	 * @codeCoverageIgnore
 | 
						|
	 *
 | 
						|
	 * @param string $base       Base of the tabs.
 | 
						|
	 * @param string $active_tab Currently active tab.
 | 
						|
	 */
 | 
						|
	public function __construct( $base, $active_tab = '' ) {
 | 
						|
		$this->base = sanitize_title( $base );
 | 
						|
 | 
						|
		// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information.
 | 
						|
		$tab              = isset( $_GET['tab'] ) && is_string( $_GET['tab'] ) ? sanitize_text_field( wp_unslash( $_GET['tab'] ) ) : '';
 | 
						|
		$this->active_tab = empty( $tab ) ? $active_tab : $tab;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Get the base.
 | 
						|
	 *
 | 
						|
	 * @return string
 | 
						|
	 */
 | 
						|
	public function get_base() {
 | 
						|
		return $this->base;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Add a tab.
 | 
						|
	 *
 | 
						|
	 * @param WPSEO_Option_Tab $tab Tab to add.
 | 
						|
	 *
 | 
						|
	 * @return $this
 | 
						|
	 */
 | 
						|
	public function add_tab( WPSEO_Option_Tab $tab ) {
 | 
						|
		$this->tabs[] = $tab;
 | 
						|
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Get active tab.
 | 
						|
	 *
 | 
						|
	 * @return WPSEO_Option_Tab|null Get the active tab.
 | 
						|
	 */
 | 
						|
	public function get_active_tab() {
 | 
						|
		if ( empty( $this->active_tab ) ) {
 | 
						|
			return null;
 | 
						|
		}
 | 
						|
 | 
						|
		$active_tabs = array_filter( $this->tabs, [ $this, 'is_active_tab' ] );
 | 
						|
		if ( ! empty( $active_tabs ) ) {
 | 
						|
			$active_tabs = array_values( $active_tabs );
 | 
						|
			if ( count( $active_tabs ) === 1 ) {
 | 
						|
				return $active_tabs[0];
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return null;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Is the tab the active tab.
 | 
						|
	 *
 | 
						|
	 * @param WPSEO_Option_Tab $tab Tab to check for active tab.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function is_active_tab( WPSEO_Option_Tab $tab ) {
 | 
						|
		return ( $tab->get_name() === $this->active_tab );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Get all tabs.
 | 
						|
	 *
 | 
						|
	 * @return WPSEO_Option_Tab[]
 | 
						|
	 */
 | 
						|
	public function get_tabs() {
 | 
						|
		return $this->tabs;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Display the tabs.
 | 
						|
	 *
 | 
						|
	 * @param Yoast_Form $yform Yoast Form needed in the views.
 | 
						|
	 */
 | 
						|
	public function display( Yoast_Form $yform ) {
 | 
						|
		$formatter = new WPSEO_Option_Tabs_Formatter();
 | 
						|
		$formatter->run( $this, $yform );
 | 
						|
	}
 | 
						|
}
 |