public function get_license_status($action = 'check_license', $clear_cache = false )
{
$status = $this->get_transient('cmplz_license_status');
if ($clear_cache) {
$status = false;
}
if ( !$status || get_site_option('cmplz_license_activation_limit') === FALSE ){
$status = 'valid';
$transient_expiration = MONTH_IN_SECONDS;
$license = $this->maybe_decode( $this->license_key() );
if ( empty($license) ) {
$this->set_transient('cmplz_license_status', 'valid', $transient_expiration);
delete_site_option('cmplz_license_expires',);
update_site_option('cmplz_license_activation_limit', 'none');
delete_site_option('cmplz_license_activations_left' );
return 'empty';
}
$home_url = home_url();
//the multisite plugin should activate for the main domain
if ( defined('cmplz_premium_multisite') ) {
$home_url = network_site_url();
}
// data to send in our API request
$api_params = array(
'edd_action' => $action,
'license' => $license,
'item_id' => CMPLZ_ITEM_ID,
'url' => $home_url
);
$ssl_verify = get_site_option('cmplz_ssl_verify', 'true' ) === 'true';
$args = apply_filters('cmplz_license_verification_args', array('timeout' => 15, 'sslverify' => $ssl_verify, 'body' => $api_params) );
$response = wp_remote_post($this->website, $args);
$attempts = get_site_option('cmplz_license_attempts', 0);
$attempts++;
if ( is_wp_error($response) || 200 !== wp_remote_retrieve_response_code($response) ) {
if (is_wp_error($response)) {
$message = $response->get_error_message('http_request_failed');
if (strpos($message, '60')!==false ) {
update_site_option('cmplz_ssl_verify', 'false' );
if ($attempts < 5) {
$transient_expiration = 5 * MINUTE_IN_SECONDS;
} else {
update_site_option('cmplz_ssl_verify', 'true' );
}
}
}
$this->set_transient('cmplz_license_status', 'error', $transient_expiration );
update_option('cmplz_license_attempts', $attempts, false );
} else {
update_option('cmplz_license_attempts', 0, false );
$license_data = json_decode(wp_remote_retrieve_body($response));
if ( !$license_data || ($license_data->license === 'failed' ) ) {
$status = 'empty';
delete_site_option('cmplz_license_expires' );
update_site_option('cmplz_license_activation_limit', 'none');
delete_site_option('cmplz_license_activations_left' );
} elseif ( isset($license_data->error) ){
$status = $license_data->error; //revoked, missing, invalid, site_inactive, item_name_mismatch, no_activations_left
if ($status==='no_activations_left') {
update_site_option('cmplz_license_activations_left', 0);
}
} elseif ( $license_data->license === 'invalid' || $license_data->license === 'disabled' ) {
$status = $license_data->license;
} elseif ( true === $license_data->success ) {
$status = $license_data->license; //inactive, expired, valid, deactivated
if ($status === 'deactivated'){
$left = get_site_option('cmplz_license_activations_left', 1 );
$activations_left = is_numeric($left) ? $left + 1 : $left;
update_site_option('cmplz_license_activations_left', $activations_left);
}
}
if ( $license_data ) {
$date = isset($license_data->expires) ? $license_data->expires : '';
if ( $date !== 'lifetime' ) {
if (!is_numeric($date)) $date = strtotime($date);
$date = date(get_option('date_format'), $date);
}
update_site_option('cmplz_license_expires', $date);
if ( isset($license_data->license_limit) ) update_site_option('cmplz_license_activation_limit', $license_data->license_limit);
if ( isset($license_data->activations_left) ) update_site_option('cmplz_license_activations_left', $license_data->activations_left);
}
}
$this->set_transient('cmplz_license_status', $status, $transient_expiration );
}
return $status;
}