98 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Licensing Functions
 | |
|  *
 | |
|  * Functions used for saving and/or retrieving information about EDD licensed products
 | |
|  * running on the site.
 | |
|  *
 | |
|  * @package   easy-digital-downloads
 | |
|  * @copyright Copyright (c) 2021, Easy Digital Downloads
 | |
|  * @license   GPL2+
 | |
|  * @since     2.11.4
 | |
|  */
 | |
| 
 | |
| namespace EDD\Extensions;
 | |
| 
 | |
| /**
 | |
|  * Saves an option in the database with the information from the `$edd_licensed_products`
 | |
|  * global. This only runs in the context of WP-Admin, because that's the only place we
 | |
|  * can be certain that the information is accurate.
 | |
|  *
 | |
|  * @link https://github.com/awesomemotive/easy-digital-downloads/issues/8969
 | |
|  *
 | |
|  * @global $edd_licensed_products
 | |
|  */
 | |
| add_action( 'admin_init', function () {
 | |
| 	if ( ! is_admin() ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	$saved_products = get_option( 'edd_licensed_extensions', array() );
 | |
| 
 | |
| 	/*
 | |
| 	 * We only want to update this option once per day. If the timeout has expired
 | |
| 	 * then update it with product information.
 | |
| 	 *
 | |
| 	 * Note: We always save this option, even if `$edd_licensed_products` is empty.
 | |
| 	 * This is to help designate that the information has been checked and saved,
 | |
| 	 * even if there are no licensed products.
 | |
| 	 */
 | |
| 	if ( empty( $saved_products['timeout'] ) || $saved_products['timeout'] < time() ) {
 | |
| 		global $edd_licensed_products;
 | |
| 
 | |
| 		update_option( 'edd_licensed_extensions', json_encode( array(
 | |
| 			'timeout'  => strtotime( '+1 day' ),
 | |
| 			'products' => $edd_licensed_products,
 | |
| 		) ) );
 | |
| 	}
 | |
| }, 200 );
 | |
| 
 | |
| /**
 | |
|  * Returns licensed EDD extensions that are active on this site.
 | |
|  * Array values are the `$item_shortname` from `\EDD_License`
 | |
|  *
 | |
|  * @see \EDD_License::$item_shortname
 | |
|  *
 | |
|  * @since 2.11.4
 | |
|  * @return array
 | |
|  */
 | |
| function get_licensed_extension_slugs() {
 | |
| 	$products = get_option( 'edd_licensed_extensions' );
 | |
| 
 | |
| 	/*
 | |
| 	 * If this isn't set for some reason, fall back to trying the global. There are
 | |
| 	 * probably a very limited number of cases where the option would be empty when
 | |
| 	 * the global is not, but worth a shot.
 | |
| 	 */
 | |
| 	if ( empty( $products ) ) {
 | |
| 		global $edd_licensed_products;
 | |
| 
 | |
| 		return ! empty( $edd_licensed_products ) && is_array( $edd_licensed_products )
 | |
| 			? $edd_licensed_products
 | |
| 			: array();
 | |
| 	}
 | |
| 
 | |
| 	$products = json_decode( $products, true );
 | |
| 
 | |
| 	return isset( $products['products'] ) && is_array( $products['products'] )
 | |
| 		? $products['products']
 | |
| 		: array();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Triggers our hook for registering extensions.
 | |
|  * This needs to run after all plugins have definitely been loaded.
 | |
|  *
 | |
|  * @since 2.11.4
 | |
|  */
 | |
| add_action( 'plugins_loaded', function() {
 | |
| 	/**
 | |
| 	 * Extensions should hook in here to register themselves.
 | |
| 	 *
 | |
| 	 * @since 2.11.4
 | |
| 	 *
 | |
| 	 * @param ExtensionRegistry
 | |
| 	 */
 | |
| 	do_action( 'edd_extension_license_init', EDD()->extensionRegistry );
 | |
| }, PHP_INT_MAX );
 |