Files
dw-sheet-data-checker/includes/class-License.php
2025-11-16 01:01:53 +07:00

296 lines
10 KiB
PHP

<?php
if ( ! defined( 'ABSPATH' ) ) exit;
class CHECKER_LICENSE extends SHEET_DATA_CHECKER_PRO {
/**
* A reference to a contact's name of this class.
*/
private $license = true;
/**
* Returns an instance of this class.
*/
public static function get_instance() {
return self::$instance;
}
/**
* Initializes the plugin by setting filters and administration functions.
*/
public function __construct() {
add_action('plugins_loaded', [$this, 'check_license'], 1);
add_action('admin_init', [$this, 'register_routine'], 1);
add_action('sheetcheckerpro/license/check', [$this, 'check_license_routine'], 1);
add_action('admin_notices', [$this, 'display_license_message'], 1);
add_action('admin_menu', [$this, 'admin_menu_license']);
add_action('admin_init', [$this, 'check_form'], 1 );
// if(false !== $this->the_lis()){
// require 'class-Checker.php';
// new UPDATE_CHECKER();
// }
}
public function set_license(bool $data){
$this->license = $data;
}
public function get_status(){
return $this->license;
}
public function the_lis() {
return true;
global $sheet_checker_pro;
$check = get_option('_sheetcheckerpro_license_check');
if(false !== $check && is_array($check)){
return boolval($check['valid']);
}
return false;
}
public function check_license() {
global $sheet_checker_pro;
$check = get_option('_sheetcheckerpro_license_check');
if(false === $check) :
$this->set_license(false);
$license_valid = false;
$license_detail = [
'valid' => false,
'messages' => [
__('Activate License for getting started with <b>Onesender Broadcaster</b>!', SHEET_CHECKER_PRO_DOMAIN)
]
];
else :
$check = wp_parse_args($check, [
'valid' => true,
'detail' => [],
'messages' => []
]);
$license_valid = $check['valid'];
$license_detail = $check;
$this->set_license(true);
endif;
$sheet_checker_pro['license'] = [
'valid' => $license_valid,
'detail' => $license_detail
];
}
public function check_license_routine() {
$post_data = [
'host' => $_SERVER['HTTP_HOST']
];
$request_url = add_query_arg($post_data, SHEET_CHECKER_PRO_MEMBER.'/sejoli-validate-license/');
$response = wp_remote_get($request_url);
$json_result = json_decode(wp_remote_retrieve_body($response), true);
$response_code = (int) wp_remote_retrieve_response_code($response);
if(200 === $response_code && isset($json_result['valid'])) :
if(true === boolval($json_result['valid'])) :
else:
delete_option('_sheetcheckerpro_license_check');
endif;
else :
array(
'code' => $response_code,
'message' => $response['response']['message']
);
endif;
}
public function register_routine() {
if(false === wp_next_scheduled('sheetcheckerpro/license/check')) :
wp_schedule_event(time(),'twicedaily','sheetcheckerpro/license/check');
endif;
}
public function display_license_message() {
if(false === $this->the_lis()) :
global $sheet_checker_pro;
$license_form_link = add_query_arg([
'post_type' => 'checker',
'page' => 'sheetcheckerpro-license'
], admin_url('edit.php'));
return;
?>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<div class="wrap">
<div class="alert alert-dark d-flex align-items-center gap-2 alert-dismissible fade show" role="alert">
<i class="fa-regular fa-circle-check"></i>
<div>
<p class="mb-0"><?php echo implode('<br />', $sheet_checker_pro['license']['detail']['messages']); ?></p>
<p class="mb-0">
<a href='<?php echo $license_form_link; ?>' class='button button-primary'>
<?php _e('Activate Here', SHEET_CHECKER_PRO_DOMAIN); ?>
</a>
</p>
</div>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
</div>
<?php
endif;
if(isset($_GET['error']) && 'sheetcheckerpro-license-not-valid' === $_GET['error']) :
?>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<div class="wrap">
<div class="alert alert-danger d-flex align-items-center gap-2" role="alert">
<i class="fa-regular fa-circle-exclamation"></i>
<div>
<p class="mb-0">Ups! Your license is not detected, have been used or expired. Please input another license code or get a new one. <a class="sheetcheckerpro-checkout-btn btn btn-primary" href="https://member.dwindi.com/product/onesender-broadcaster/">Get a license code</a></p>
</div>
</div>
</div>
<?php
endif;
if(isset($_GET['success']) && 'sheetcheckerpro-license-valid' === $_GET['success']) :
?>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<div class="wrap">
<div class="alert alert-success d-flex align-items-center gap-2 alert-dismissible fade show" role="alert">
<i class="fa-regular fa-circle-check"></i>
<div>
<p class="mb-0"><?php _e('Thank you! <b>Data Sheet Checker Pro</b> can be used now.'); ?></p>
</div>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
</div>
<?php
endif;
}
public function admin_menu_license() {
$is_admin = current_user_can('manage_options');
if ( $is_admin ) {
if(false === $this->the_lis()) :
add_submenu_page(
'edit.php?post_type=checker',
'License',
'License',
'manage_options',
'sheetcheckerpro-license',
[$this, 'display_license_page'],
12
);
endif;
}
}
public function display_license_page() {
require SHEET_CHECKER_PRO_PATH . 'templates/license.php';
}
public function check_form() {
if(isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'sheetcheckerpro-input-license') && isset($_POST['data'])) :
$post_data = wp_parse_args($_POST['data'],[
'user_email' => NULL,
'user_pass' => NULL,
'license' => NULL
]);
$post_data['string'] = $_SERVER['HTTP_HOST'];
$request_url = SHEET_CHECKER_PRO_MEMBER.'/sejoli-license/';
$response = wp_remote_post($request_url, array(
'timeout' => 120,
'body' => $post_data
));
if(is_wp_error($response)) :
wp_die(
__( 'Something is happened because of your hosting. <br />Please contact your hosting provider and attach this message below:', SHEET_CHECKER_PRO_DOMAIN) . '<br />&nbsp;<br />' .
implode('<br />', $response->get_error_messages()),
__( 'Cannot access license server', SHEET_CHECKER_PRO_DOMAIN)
);
exit;
else :
$json_result = json_decode(wp_remote_retrieve_body($response), true);
$response_code = intval(wp_remote_retrieve_response_code($response));
if(200 === $response_code) :
if(isset($json_result['valid']) && true === boolval($json_result['valid'])) :
update_option('_sheetcheckerpro_license_check', $json_result);
$theme_option_url = add_query_arg([
'post_type' => 'checker',
'success' => 'sheetcheckerpro-license-valid'
], admin_url('edit.php'));
wp_redirect($theme_option_url);
else :
$args = array();
$args['post_type'] = 'checker';
$args['error'] = 'sheetcheckerpro-license-not-valid';
$args['messages'] = array_map('urlencode', array_map('strip_tags', $json_result['messages']));
wp_redirect(add_query_arg($args, admin_url('edit.php')));
endif;
// beside response code
else :
$args = array();
$args['post_type'] = 'checker';
$args['page'] = 'sheetcheckerpro-license';
$args['error'] = 'sheetcheckerpro-license-not-valid';
$args['messages'][] = sprintf( __('Error response code : %s. Cannot connect to license server', SHEET_CHECKER_PRO_DOMAIN), $response_code );
wp_redirect(add_query_arg($args, admin_url('admin.php')));
endif;
endif;
exit;
endif;
}
}