global_variables();
$this->js_in_footer();
// Registering hooks callback for admin section.
add_action('admin_init', array($this, 'admin_init'));
add_action('admin_enqueue_scripts', array($this, 'load_scripts'), 5);
}
// Create Api Options if not already created.
public function global_variables() {
global $loginradius_api_settings;
$loginradius_api_settings = get_option('LoginRadius_API_settings');
}
public static function js_in_footer() {
global $loginradius_api_settings, $lr_js_in_footer;
// Set js in footer bool.
$lr_js_in_footer = isset($loginradius_api_settings['scripts_in_footer']) && $loginradius_api_settings['scripts_in_footer'] == '1' ? true : false;
}
/**
* Callback for admin_menu hook,
* Register LoginRadius_settings and its sanitization callback. Add Login Radius meta box to pages and posts.
*/
public function admin_init() {
register_setting('loginradius_api_settings', 'LoginRadius_API_settings', array($this, 'validate_options'));
// Replicate Social Login configuration to the subblogs in the multisite network
if (is_multisite() && is_main_site()) {
add_action('wpmu_new_blog', array($this, 'replicate_settings_to_new_blog'));
}
}
/*
* Adding Javascript/Jquery for admin settings page
*/
public function load_scripts($hook) {
global $lr_js_in_footer;
if ($hook != 'toplevel_page_LoginRadius') {
return;
}
wp_enqueue_script('lr_activation_options', LR_ROOT_URL . 'lr-core/assets/js/lr-activation.js', array('jquery'), LR_PLUGIN_VERSION, $lr_js_in_footer);
}
/**
* Get response from LoginRadius api
*/
public static function api_validation_response($apiKey, $apiSecret, $string) {
global $currentErrorCode, $currentErrorResponse;
try {
$object = new \LoginRadiusSDK\Clients\WPHttpClient($apiKey, $apiSecret, array('authentication' => false));
} catch (\LoginRadiusSDK\LoginRadiusException $e) {
$currentErrorCode = '0';
$currentErrorResponse = "Something went wrong: " . $e->getMessage();
return false;
}
$options['method'] = 'post';
$options['post_data'] = array('addon' => 'WordPress', 'version' => LR_PLUGIN_VERSION, 'agentstring' => $_SERVER['HTTP_USER_AGENT'], 'clientip' => $_SERVER['REMOTE_ADDR'], 'configuration' => $string);
try {
$response = json_decode($object->request("https://api.loginradius.com/api/v2/app/validate", array("apikey" => $apiKey, "apisecret" => $apiSecret), $options));
if (isset($response->Status) && $response->Status) {
return true;
} else {
$currentErrorCode = $response->Messages;
return false;
}
} catch (\LoginRadiusSDK\LoginRadiusException $e) {
$currentErrorCode = '0';
$currentErrorResponse = "Something went wrong: " . $e->getErrorResponse()->description;
return false;
}
}
public static function validate_options($settings) {
$settings['sitename'] = sanitize_text_field($settings['sitename']);
$settings['LoginRadius_apikey'] = sanitize_text_field($settings['LoginRadius_apikey']);
$settings['LoginRadius_secret'] = sanitize_text_field($settings['LoginRadius_secret']);
if (empty($settings['sitename'])) {
$message = 'LoginRadius Site Name is blank. Get your LoginRadius Site Name from LoginRadius';
add_settings_error('LoginRadius_API_settings', esc_attr('settings_updated'), $message, 'error');
}
if (empty($settings['LoginRadius_apikey']) && empty($settings['LoginRadius_secret'])) {
$message = 'LoginRadius API Key and API Secret are blank. Get your LoginRadius API Key and API Secret from LoginRadius';
add_settings_error('LoginRadius_API_settings', esc_attr('settings_updated'), $message, 'error');
return $settings;
}
if (empty($settings['LoginRadius_apikey'])) {
$message = 'LoginRadius API Key is blank. Get your LoginRadius API Key from LoginRadius';
add_settings_error('LoginRadius_API_settings', esc_attr('settings_updated'), $message, 'error');
return $settings;
}
if (empty($settings['LoginRadius_secret'])) {
$message = 'LoginRadius API Secret is blank. Get your LoginRadius API Secret from LoginRadius';
add_settings_error('LoginRadius_API_settings', esc_attr('settings_updated'), $message, 'error');
return $settings;
}
if (isset($settings['LoginRadius_apikey']) && isset($settings['LoginRadius_secret'])) {
$encodeString = 'settings';
if (self::api_validation_response($settings['LoginRadius_apikey'], $settings['LoginRadius_secret'], $encodeString)) {
if (!isset($settings['raas_enable']) || ($settings['raas_enable'] == '1')) {
$socialProfileSetting = get_option('LoginRadius_Social_Profile_Data_settings');
$socialProfileSetting['enable_custom_popup'] = '0';
update_option('LoginRadius_Social_Profile_Data_settings', $socialProfileSetting);
}
return $settings;
} else {
// Api or Secret is not valid or something wrong happened while getting response from LoginRadius api
$message = 'please check your php.ini settings to enable CURL or FSOCKOPEN';
global $currentErrorCode, $currentErrorResponse;
$errorMessage = array(
"API_KEY_NOT_VALID" => 'LoginRadius API key is invalid. Get your LoginRadius API Key from LoginRadius',
'API_SECRET_NOT_VALID' => 'LoginRadius API Secret is invalid. Get your LoginRadius API Secret from LoginRadius',
'API_KEY_NOT_FORMATED' => 'LoginRadius API Key is not formatted correctly.',
'API_SECRET_NOT_FORMATED' => 'LoginRadius API Secret is not formatted correctly.',
);
if ($currentErrorCode[0] == '0') {
$message = $currentErrorResponse;
} else {
if (count($currentErrorCode) > 1) {
add_settings_error('LoginRadius_API_settings', esc_attr('settings_updated'), $errorMessage[$currentErrorCode[0]], 'error');
add_settings_error('LoginRadius_API_settings', esc_attr('settings_updated'), $errorMessage[$currentErrorCode[1]], 'error');
return $settings;
} else {
$message = $errorMessage[$currentErrorCode[0]];
}
}
add_settings_error('LoginRadius_API_settings', esc_attr('settings_updated'), $message, 'error');
return $settings;
}
} else {
add_settings_error('LoginRadius_API_settings', esc_attr('settings_updated'), 'Settings Updated', 'updated');
return $settings;
}
}
// Replicate the social login config to the new blog created in the multisite network
public function replicate_settings_to_new_blog($blogId) {
global $loginradius_api_settings;
add_blog_option($blogId, 'LoginRadius_API_settings', $loginradius_api_settings);
}
/*
* Callback for add_menu_page,
* This is the first function which is called while plugin admin page is requested
*/
public static function options_page() {
require_once LR_ROOT_DIR . "lr-core/admin/views/class-activation-settings-view.php";
LR_Activation_Settings::render_options_page();
}
}
}
LR_Activation_Admin::get_instance();