__( 'Registration', 'epsilon-framework' ),
/* Translators: Enter Key field label */
'enter-key' => __( 'Enter your theme license key.', 'epsilon-framework' ),
/* Translators: License Key */
'license-key' => __( 'License Key', 'epsilon-framework' ),
/* Translators: Action */
'license-action' => __( 'License Action', 'epsilon-framework' ),
/* Translators: Deactivate License Label */
'deactivate-license' => __( 'Deactivate License', 'epsilon-framework' ),
/* Translators: Activate License Label */
'activate-license' => __( 'Activate License', 'epsilon-framework' ),
/* Translators: Unknown License Label */
'status-unknown' => __( 'License status is unknown.', 'epsilon-framework' ),
/* Translators: Renewal Label */
'renew' => __( 'Renew?', 'epsilon-framework' ),
/* Translators: Unlimited activations */
'unlimited' => __( 'unlimited', 'epsilon-framework' ),
/* Translators: Active key */
'license-key-is-active' => __( 'License key is active.', 'epsilon-framework' ),
/* Translators: expires */
'expires%s' => __( 'Expires %s.', 'epsilon-framework' ),
/* Translators: websites activated */
'%1$s/%2$-sites' => __( 'You have %1$s / %2$s sites activated.', 'epsilon-framework' ),
/* Translators: License expired*/
'license-key-expired-%s' => __( 'License key expired %s.', 'epsilon-framework' ),
/* Translators: Expired License Key */
'license-key-expired' => __( 'License key has expired.', 'epsilon-framework' ),
/* Translators: Match failed */
'license-keys-do-not-match' => __( 'License keys do not match.', 'epsilon-framework' ),
/* Translators: Inactive license */
'license-is-inactive' => __( 'License is inactive.', 'epsilon-framework' ),
/* Translators: Disabled license */
'license-key-is-disabled' => __( 'License key is disabled.', 'epsilon-framework' ),
/* Translators: Inactive website */
'site-is-inactive' => __( 'Site is inactive.', 'epsilon-framework' ),
/* Translators: Unknown license key */
'license-status-unknown' => __( 'License status is unknown.', 'epsilon-framework' ),
/* Translators: Update notice */
'update-notice' => __( "Updating this theme will lose any customizations you have made. 'Cancel' to stop, 'OK' to update.", 'epsilon-framework' ),
/* Translators: license sites, title, update link */
'update-available' => __( '%1$s %2$s is available. Check out what\'s new or update now.', 'epsilon-framework' ),
);
}
/**
* Initiate actions to register settings and update theme
*/
public static function init() {
$instance = Epsilon_Welcome_Screen::get_instance();
self::register_option( $instance );
self::updater( $instance );
}
/**
* Activate or deactivate license
*/
public static function license_action() {
$instance = Epsilon_Welcome_Screen::get_instance();
if ( isset( $_POST[ $instance->theme_slug . '_license_activate' ] ) ) {
if ( check_admin_referer( $instance->theme_slug . '_nonce', $instance->theme_slug . '_nonce' ) ) {
self::license_activator_deactivator( 'activate_license' );
}
}
if ( isset( $_POST[ $instance->theme_slug . '_license_deactivate' ] ) ) {
if ( check_admin_referer( $instance->theme_slug . '_nonce', $instance->theme_slug . '_nonce' ) ) {
self::license_activator_deactivator( 'deactivate_license' );
}
}
}
/**
* Registers the option used to store the license key in the options table.
*
* @param object $instance Option instance.
*/
public static function register_option( $instance ) {
register_setting(
$instance->theme_slug . '-license',
$instance->theme_slug . '_license_key',
array(
'EDD_Theme_Helper',
'sanitize_license',
)
);
}
/**
* Sanitizes the license key.
*
* @param string $new License key that was submitted.
*
* @return string $new Sanitized license key.
*/
public static function sanitize_license( $new ) {
$instance = Epsilon_Welcome_Screen::get_instance();
$old = get_option( $instance->theme_slug . '_license_key' );
if ( $old && $old !== $new ) {
// New license has been entered, so must reactivate.
delete_option( $instance->theme_slug . '_license_key_status' );
delete_transient( $instance->theme_slug . '_license_message' );
}
return sanitize_text_field( $new );
}
/**
* We need to disable wporg requests at this time
*
* @param object $r Request object.
* @param string $url URL String.
*
* @return mixed
*/
public static function disable_wporg_request( $r, $url ) {
// If it's not a theme update request, bail.
if ( 0 !== strpos( $url, 'https://api.wordpress.org/themes/update-check/1.1/' ) ) {
return $r;
}
// Decode the JSON response.
$themes = json_decode( $r['body']['themes'] );
// Remove the active parent and child themes from the check.
$parent = get_option( 'template' );
$child = get_option( 'stylesheet' );
unset( $themes->themes->$parent );
unset( $themes->themes->$child );
// Encode the updated JSON response.
$r['body']['themes'] = wp_json_encode( $themes );
return $r;
}
/**
* Creates the theme updater class.
*
* @param object $instance Option instance.
*/
public static function updater( $instance ) {
/**
* In case we don`t have a valid license, return here
*/
if ( get_option( $instance->theme_slug . '_license_key_status', false ) !== 'valid' ) {
return;
}
$arr = array(
'license' => get_option( $instance->theme_slug . '_license_key', false ),
);
new Epsilon_Updater_Class( $arr );
}
/**
* Returns a renewal link
*
* @return string
*/
public static function get_renewal_link() {
$instance = Epsilon_Welcome_Screen::get_instance();
$theme = wp_get_theme();
$license_key = trim( get_option( $instance->theme_slug . '_license_key', false ) );
if ( '' !== $instance->download_id && $license_key ) {
$url = esc_url( $theme->get( 'AuthorURI' ) );
$url .= '/checkout/?edd_license_key=' . $license_key . '&download_id=' . $instance->download_id;
return $url;
}
// Otherwise return the remote_api_url.
return $theme->get( 'AuthorURI' );
}
/**
* Checks if license is valid and gets expire date.
*
* @since 1.0.0
*
* @return string $message License status message.
*/
public static function check_license() {
$instance = Epsilon_Welcome_Screen::get_instance();
$license = trim( get_option( $instance->theme_slug . '_license_key' ) );
$strings = self::get_strings();
$api_params = array(
'edd_action' => 'check_license',
'license' => $license,
'item_name' => rawurlencode( $instance->theme_slug ),
'url' => home_url(),
);
$license_data = self::get_api_response( $api_params );
// If response doesn't include license data, return.
if ( ! isset( $license_data->license ) ) {
$message = $strings['license-unknown'];
return $message;
}
// We need to update the license status at the same time the message is updated.
if ( $license_data && isset( $license_data->license ) ) {
update_option( $instance->theme_slug . '_license_key_status', $license_data->license );
}
// Get expire date.
$expires = false;
if ( isset( $license_data->expires ) ) {
$expires = date_i18n( get_option( 'date_format' ), strtotime( $license_data->expires ) );
$renew_link = '' . $strings['renew'] . '';
}
// Get site counts.
$site_count = $license_data->site_count;
$license_limit = $license_data->license_limit;
// If unlimited.
if ( 0 === $license_limit ) {
$license_limit = $strings['unlimited'];
}
if ( 'valid' === $license_data->license ) {
$message = $strings['license-key-is-active'] . ' ';
if ( $expires ) {
$message .= sprintf( $strings['expires%s'], $expires ) . ' ';
}
if ( $site_count && $license_limit ) {
$message .= sprintf( $strings['%1$s/%2$-sites'], $site_count, $license_limit );
}
} elseif ( 'expired' === $license_data->license ) {
if ( $expires ) {
$message = sprintf( $strings['license-key-expired-%s'], $expires );
} else {
$message = $strings['license-key-expired'];
}
if ( $renew_link ) {
$message .= ' ' . $renew_link;
}
} elseif ( 'invalid' === $license_data->license ) {
$message = $strings['license-keys-do-not-match'];
} elseif ( 'inactive' === $license_data->license ) {
$message = $strings['license-is-inactive'];
} elseif ( 'disabled' === $license_data->license ) {
$message = $strings['license-key-is-disabled'];
} elseif ( 'site_inactive' === $license_data->license ) {
// Site is inactive.
$message = $strings['site-is-inactive'];
} else {
$message = $strings['license-status-unknown'];
}
return $message;
}
/**
* Handles the license action.
*
* @param string $action What to do with the license.
*/
public static function license_activator_deactivator( $action = '' ) {
$instance = Epsilon_Welcome_Screen::get_instance();
$license = trim( get_option( $instance->theme_slug . '_license_key' ) );
if ( empty( $action ) ) {
$action = 'activate_license';
}
$api_params = array(
'edd_action' => $action,
'license' => $license,
'item_name' => rawurlencode( $instance->theme_slug ),
);
$license_data = self::get_api_response( $api_params );
switch ( $action ) {
case 'deactivate_license':
if ( $license_data && ( 'deactivated' === $license_data->license ) ) {
delete_option( $instance->theme_slug . '_license_key_status' );
delete_transient( $instance->theme_slug . '_license_message' );
}
break;
default:
if ( $license_data && isset( $license_data->license ) ) {
update_option( $instance->theme_slug . '_license_key_status', $license_data->license );
delete_transient( $instance->theme_slug . '_license_message' );
}
break;
}
}
/**
* Get a response from our website.
*
* @param array $params Configuration array.
*
* @return mixed
*/
public static function get_api_response( $params ) {
$theme = wp_get_theme();
// Call the custom API.
$response = wp_remote_post(
$theme->get( 'AuthorURI' ),
array(
'timeout' => 15,
'sslverify' => false,
'body' => $params,
)
);
// Make sure the response came back okay.
if ( is_wp_error( $response ) ) {
return false;
}
$response = json_decode( wp_remote_retrieve_body( $response ) );
return $response;
}
}