75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * License Registry
 | 
						|
 *
 | 
						|
 * Responsible for holding information about premium EDD extensions in use on this site.
 | 
						|
 *
 | 
						|
 * @package   easy-digital-downloads
 | 
						|
 * @copyright Copyright (c) 2021, Easy Digital Downloads
 | 
						|
 * @license   GPL2+
 | 
						|
 * @since     2.11.4
 | 
						|
 */
 | 
						|
 | 
						|
namespace EDD\Extensions;
 | 
						|
 | 
						|
class ExtensionRegistry extends \ArrayObject {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Adds an extension to the registry.
 | 
						|
	 *
 | 
						|
	 * @since 2.11.4
 | 
						|
	 *
 | 
						|
	 * @param string      $pluginFile     Path to the plugin's main file.
 | 
						|
	 * @param string      $pluginName     Display name of the plugin.
 | 
						|
	 * @param int         $pluginId       EDD product ID for the plugin.
 | 
						|
	 * @param string      $currentVersion Current version number.
 | 
						|
	 * @param string|null $optionName     Option name where the license key is stored. If omitted, automatically generated.
 | 
						|
	 */
 | 
						|
	public function addExtension( $pluginFile, $pluginName, $pluginId, $currentVersion, $optionName = null ) {
 | 
						|
		if ( $this->offsetExists( $pluginId ) ) {
 | 
						|
			throw new \InvalidArgumentException( sprintf(
 | 
						|
				'The extension %d is already registered.',
 | 
						|
				$pluginId
 | 
						|
			) );
 | 
						|
		}
 | 
						|
 | 
						|
		$this->offsetSet(
 | 
						|
			$pluginId,
 | 
						|
			new \EDD_License( $pluginFile, $pluginName, $currentVersion, 'Easy Digital Downloads', $optionName, null, $pluginId )
 | 
						|
		);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Returns all registered extensions, regardless of whether they have licenses activated.
 | 
						|
	 *
 | 
						|
	 * At some point we could make this public, just making it private for now so that we have
 | 
						|
	 * flexibility to change exactly what it returns in the future.
 | 
						|
	 *
 | 
						|
	 * @since 2.11.4
 | 
						|
	 *
 | 
						|
	 * @return \EDD_License[]
 | 
						|
	 */
 | 
						|
	private function getExtensions() {
 | 
						|
		return $this->getArrayCopy();
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Counts the number of licensed extensions active on this site.
 | 
						|
	 * Note: This only looks at extensions registered via this registry, then filters down
 | 
						|
	 * to those that have a license key entered. It does not check to verify if the license
 | 
						|
	 * key is actually valid / not expired.
 | 
						|
	 *
 | 
						|
	 * @since 2.11.4
 | 
						|
	 *
 | 
						|
	 * @return int
 | 
						|
	 */
 | 
						|
	public function countLicensedExtensions() {
 | 
						|
		$licensedExtensions = array_filter( $this->getExtensions(), function ( \EDD_License $license ) {
 | 
						|
			return ! empty( $license->license );
 | 
						|
		} );
 | 
						|
 | 
						|
		return count( $licensedExtensions );
 | 
						|
	}
 | 
						|
 | 
						|
}
 |