LLMS_Helper_Keys
Contents
Source Source
File: libraries/lifterlms-helper/includes/class-llms-helper-keys.php
class LLMS_Helper_Keys { /** * Activate LifterLMS License Keys with the remote server. * * @since 3.0.0 * @since 3.0.1 Unknown. * @since 3.4.2 Removed empty key lines. * @since 3.5.0 Caching results. Added `$force` parameter. * * @param string|array $keys Array or a white-space separated list of API keys. * @param bool $force Optional. Whether to force a remote check. Default `false`. * @return array */ public static function activate_keys( $keys, $force = false ) { // Sanitize before sending. if ( ! is_array( $keys ) ) { $keys = explode( PHP_EOL, $keys ); } $keys = array_map( 'sanitize_text_field', $keys ); $keys = array_map( 'trim', $keys ); $keys = array_unique( $keys ); $keys = array_filter( $keys ); // Remove empty keys. $data = array( 'keys' => $keys, 'url' => get_site_url(), ); // Check for a cached result based on the keys and url input. $cache_hash = md5( wp_json_encode( $data ) ); if ( $force ) { // Delete cache if forcing a remote check. delete_site_transient( 'llms_helper_keys_activation_response_' . $cache_hash ); } else { // Use the cached result if present. $cached_req_result = get_site_transient( 'llms_helper_keys_activation_response_' . $cache_hash ); if ( ! empty( $cached_req_result ) ) { return $cached_req_result; } } $req = new LLMS_Dot_Com_API( '/license/activate', $data ); set_site_transient( 'llms_helper_keys_activation_response_' . $cache_hash, $req->get_result(), HOUR_IN_SECONDS ); return $req->get_result(); } /** * Add a single license key * * @since 3.0.0 * * @param string $activation_data Array of activation details from api call. * @return boolean True if option value has changed, false if not or if update failed. */ public static function add_license_key( $activation_data ) { $keys = llms_helper_options()->get_license_keys(); $keys[ $activation_data['license_key'] ] = array( 'product_id' => $activation_data['id'], 'status' => 1, 'license_key' => $activation_data['license_key'], 'update_key' => $activation_data['update_key'], 'addons' => $activation_data['addons'], ); return llms_helper_options()->set_license_keys( $keys ); } /** * Check all saved keys to ensure they're still active * * Outputs warnings if the key has expired or the status has changed remotely. * * Runs on daily cron (`llms_check_license_keys`). * * Only make api calls to check once / week. * * @since 3.0.0 * @since 3.4.0 Use core textdomain. * * @param bool $force Ignore the once/week setting and force a check. * @return void */ public static function check_keys( $force = false ) { // Don't trigger during AJAX Requests. if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { return; } // Don't proceed if we don't have any keys to check. $keys = llms_helper_options()->get_license_keys(); if ( ! $keys ) { return; } if ( ! $force ) { // Only check keys once a week. $last_send = llms_helper_options()->get_last_keys_cron_check(); if ( $last_send > apply_filters( 'llms_check_license_keys_interval', strtotime( '-1 week' ) ) ) { return; } } // Record check time. llms_helper_options()->set_last_keys_cron_check( time() ); $data = array( 'keys' => array(), 'url' => get_site_url(), ); foreach ( $keys as $key ) { $data['keys'][ $key['license_key'] ] = $key['update_key']; } $req = new LLMS_Dot_Com_API( '/license/status', $data ); if ( ! $req->is_error() ) { $res = $req->get_result(); include_once LLMS_PLUGIN_DIR . 'includes/admin/class.llms.admin.notices.php'; /* Translators: %s = License Key */ $msg = __( 'The license "%s" is no longer valid and was deactivated. Please visit your account dashboard at https://lifterlms.com/my-account for more information.', 'lifterlms' ); // Output error responses. if ( isset( $res['data']['errors'] ) ) { foreach ( array_keys( $res['data']['errors'] ) as $key ) { self::remove_license_key( $key ); LLMS_Admin_Notices::add_notice( 'key_check_' . sanitize_text_field( $key ), make_clickable( sprintf( $msg, $key ) ), array( 'type' => 'error', 'dismiss_for_days' => 0, ) ); } } // Check status of keys, if the status has changed remove it locally. if ( isset( $res['data']['keys'] ) ) { foreach ( $res['data']['keys'] as $key => $data ) { if ( $data['status'] ) { continue; } self::remove_license_key( $key ); LLMS_Admin_Notices::add_notice( 'key_check_' . sanitize_text_field( $key ), make_clickable( sprintf( $msg, $key ) ), array( 'type' => 'error', 'dismiss_for_days' => 0, ) ); } } } } /** * Deactivate LifterLMS API keys with remote server * * @since 3.0.0 * @since 3.4.1 Ensure key exists before attempting to deactivate it. * @since 3.5.0 Deleting any cached activation result. * * @param array $keys Array of keys. * @return array */ public static function deactivate_keys( $keys ) { $keys = array_map( 'sanitize_text_field', $keys ); $keys = array_map( 'trim', $keys ); $data = array( 'keys' => array(), 'url' => get_site_url(), ); // Delete any cached activation result. $cache_hash = md5( wp_json_encode( $data ) ); delete_site_transient( 'llms_helper_keys_activation_response_' . $cache_hash ); $saved = llms_helper_options()->get_license_keys(); foreach ( $keys as $key ) { if ( isset( $saved[ $key ] ) && $saved[ $key ]['update_key'] ) { $data['keys'][ $key ] = $saved[ $key ]['update_key']; } } $req = new LLMS_Dot_Com_API( '/license/deactivate', $data ); return $req->get_result(); } /** * Retrieve stored information about a key by the license key * * @since 3.3.1 * * @param string $key License key. * @return array|false Associative array of license key information. Returns `false` if the provided license key was not found. */ public static function get( $key ) {
Expand full source code Collapse full source code View on GitHub
Methods Methods
- activate_keys — Activate LifterLMS License Keys with the remote server.
- add_license_key — Add a single license key
- check_keys — Check all saved keys to ensure they're still active
- deactivate_keys — Deactivate LifterLMS API keys with remote server
- get — Retrieve stored information about a key by the license key
- remove_license_key — Remove a single license key
Changelog Changelog
Version | Description |
---|---|
3.0.0 | Introduced. |