207 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * WPSEO plugin file.
 | |
|  *
 | |
|  * @package WPSEO\Admin
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Class representing a feature toggle.
 | |
|  */
 | |
| class Yoast_Feature_Toggle {
 | |
| 
 | |
| 	/**
 | |
| 	 * Feature toggle identifier.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $name = '';
 | |
| 
 | |
| 	/**
 | |
| 	 * Name of the setting the feature toggle is associated with.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $setting = '';
 | |
| 
 | |
| 	/**
 | |
| 	 * Whether the feature is premium or not.
 | |
| 	 *
 | |
| 	 * @var bool
 | |
| 	 */
 | |
| 	protected $premium = false;
 | |
| 
 | |
| 	/**
 | |
| 	 * Whether the feature is in beta or not.
 | |
| 	 *
 | |
| 	 * @var bool
 | |
| 	 */
 | |
| 	protected $in_beta = false;
 | |
| 
 | |
| 	/**
 | |
| 	 * The Premium version in which this feature has been added.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $premium_version = '';
 | |
| 
 | |
| 	/**
 | |
| 	 * The languages in which this feature is supported.
 | |
| 	 * E.g. for language specific analysis support.
 | |
| 	 *
 | |
| 	 * If empty, the feature is considered to have support in all languages.
 | |
| 	 *
 | |
| 	 * @var string[]
 | |
| 	 */
 | |
| 	protected $supported_languages = [];
 | |
| 
 | |
| 	/**
 | |
| 	 * Feature toggle label.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $label = '';
 | |
| 
 | |
| 	/**
 | |
| 	 * URL to learn more about the feature.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $read_more_url = '';
 | |
| 
 | |
| 	/**
 | |
| 	 * URL to learn more about the premium feature.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $premium_url = '';
 | |
| 
 | |
| 	/**
 | |
| 	 * URL to buy premium.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $premium_upsell_url = '';
 | |
| 
 | |
| 	/**
 | |
| 	 * Label for the learn more link.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $read_more_label = '';
 | |
| 
 | |
| 	/**
 | |
| 	 * Additional help content for the feature.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $extra = '';
 | |
| 
 | |
| 	/**
 | |
| 	 * Additional content to be rendered after the toggle.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $after = '';
 | |
| 
 | |
| 	/**
 | |
| 	 * Value to specify the feature toggle order.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $order = 100;
 | |
| 
 | |
| 	/**
 | |
| 	 * Disable the integration toggle.
 | |
| 	 *
 | |
| 	 * @var bool
 | |
| 	 */
 | |
| 	protected $disabled = false;
 | |
| 
 | |
| 	/**
 | |
| 	 * Whether the feature is new or not.
 | |
| 	 *
 | |
| 	 * @var bool
 | |
| 	 */
 | |
| 	protected $new = false;
 | |
| 
 | |
| 	/**
 | |
| 	 * Constructor.
 | |
| 	 *
 | |
| 	 * Sets the feature toggle arguments.
 | |
| 	 *
 | |
| 	 * @param array $args {
 | |
| 	 *     Feature toggle arguments.
 | |
| 	 *
 | |
| 	 *     @type string $name                Required. Feature toggle identifier.
 | |
| 	 *     @type string $setting             Required. Name of the setting the feature toggle is associated with.
 | |
| 	 *     @type string $disabled            Whether the feature is premium or not.
 | |
| 	 *     @type string $label               Feature toggle label.
 | |
| 	 *     @type string $read_more_url       URL to learn more about the feature. Default empty string.
 | |
| 	 *     @type string $premium_upsell_url  URL to buy premium. Default empty string.
 | |
| 	 *     @type string $read_more_label     Label for the learn more link. Default empty string.
 | |
| 	 *     @type string $extra               Additional help content for the feature. Default empty string.
 | |
| 	 *     @type int    $order               Value to specify the feature toggle order. A lower value indicates
 | |
| 	 *                                       a higher priority. Default 100.
 | |
| 	 *     @type bool   $disabled            Disable the integration toggle. Default false.
 | |
| 	 *     @type string $new                 Whether the feature is new or not.
 | |
| 	 *     @type bool   $in_beta             Whether the feature is in beta or not.
 | |
| 	 *     @type array  $supported_languages The languages that this feature supports.
 | |
| 	 *     @type string $premium_version     The Premium version in which this feature was added.
 | |
| 	 * }
 | |
| 	 *
 | |
| 	 * @throws InvalidArgumentException Thrown when a required argument is missing.
 | |
| 	 */
 | |
| 	public function __construct( array $args ) {
 | |
| 		$required_keys = [ 'name', 'setting' ];
 | |
| 
 | |
| 		foreach ( $required_keys as $key ) {
 | |
| 			if ( empty( $args[ $key ] ) ) {
 | |
| 				/* translators: %s: argument name */
 | |
| 				throw new InvalidArgumentException( sprintf( __( '%s is a required feature toggle argument.', 'wordpress-seo' ), $key ) );
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		foreach ( $args as $key => $value ) {
 | |
| 			if ( property_exists( $this, $key ) ) {
 | |
| 				$this->$key = $value;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Magic isset-er.
 | |
| 	 *
 | |
| 	 * @param string $key Key to check whether a value for it is set.
 | |
| 	 *
 | |
| 	 * @return bool True if set, false otherwise.
 | |
| 	 */
 | |
| 	public function __isset( $key ) {
 | |
| 		return isset( $this->$key );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Magic getter.
 | |
| 	 *
 | |
| 	 * @param string $key Key to get the value for.
 | |
| 	 *
 | |
| 	 * @return mixed Value for the key, or null if not set.
 | |
| 	 */
 | |
| 	public function __get( $key ) {
 | |
| 		if ( isset( $this->$key ) ) {
 | |
| 			return $this->$key;
 | |
| 		}
 | |
| 
 | |
| 		return null;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Checks whether the feature for this toggle is enabled.
 | |
| 	 *
 | |
| 	 * @return bool True if the feature is enabled, false otherwise.
 | |
| 	 */
 | |
| 	public function is_enabled() {
 | |
| 		return (bool) WPSEO_Options::get( $this->setting );
 | |
| 	}
 | |
| }
 |