/**
  * Constructor which loads required files at front
  */
 private function __construct()
 {
     require_once LOGINRADIUS_PLUGIN_DIR . "public/inc/login/class-social-login.php";
     require_once LOGINRADIUS_PLUGIN_DIR . "public/inc/commenting/class-social-commenting.php";
     require_once LOGINRADIUS_PLUGIN_DIR . "public/inc/shortcodes/class-shortcode.php";
     Social_Login::get_instance();
     Social_Commenting::get_instance();
     Login_Radius_Shortcode::get_instance();
 }
 /**
  * This function is called when token is returned from LoginRadius.
  * it checks for query string variable and fetches data using LoginRadius api.
  * After fetching data, appropriate action is taken on the basis of LoginRadius plugin settings
  */
 public static function login_radius_connect()
 {
     global $wpdb, $loginRadiusSettings, $loginRadiusObject, $lr_social_profile_data_settings;
     if (isset($_GET['loginradius_linking']) && isset($_REQUEST['token'])) {
         LR_Common::perform_linking_operation();
     }
     if (isset($_GET['loginRadiusVk']) && trim($_GET['loginRadiusVk']) != '') {
         //If verification link is clicked
         Login_Helper::verify_user_after_email_confirmation();
     }
     if (isset($_POST['LoginRadius_popupSubmit'])) {
         //If "email required" popup has been submitted
         Login_helper::response_to_popup_submission();
     }
     // If remove button clicked
     if (isset($_GET['loginRadiusMap']) && !empty($_GET['loginRadiusMap']) && isset($_GET['loginRadiusMappingProvider']) && !empty($_GET['loginRadiusMappingProvider']) && is_user_logged_in()) {
         Login_Helper::unlink_provider();
     }
     if (!is_user_logged_in() && isset($_REQUEST['token'])) {
         $token = $_REQUEST['token'];
         try {
             // Fetch user profile using access token ......
             $responseFromLoginRadius = $loginRadiusObject->loginradius_get_user_profiledata($token);
         } catch (LoginRadiusException $e) {
             // Error Handling
             if ($loginRadiusSettings['enable_degugging'] == '0') {
                 // if debugging is off and Social profile not recieved, redirect to home page.
                 wp_redirect(site_url());
                 exit;
             } else {
                 $responseFromLoginRadius = null;
                 $message = isset($e->getErrorResponse()->description) ? $e->getErrorResponse()->description : $e->getMessage();
                 error_log($message);
                 // If debug option is set and Social Profile not retrieved
                 Login_Helper::login_radius_notify($message, 'isProfileNotRetrieved');
                 return;
             }
         }
         if (isset($responseFromLoginRadius->ID) && $responseFromLoginRadius->ID != null) {
             // If profile data is retrieved successfully
             self::$loginRadiusProfileData = Login_Helper::filter_loginradius_data_for_wordpress_use($responseFromLoginRadius);
         }
         $userId = Login_Helper::is_socialid_exists_in_wordpress(self::$loginRadiusProfileData);
         if ($userId) {
             //if Social id exists in wordpress database
             if (1 == get_user_meta($userId, self::$loginRadiusProfileData['Provider'] . 'LrVerified', true) || class_exists('LR_Raas_Install')) {
                 // if user is verified, provide login.
                 Login_Helper::login_user($userId, self::$loginRadiusProfileData);
             } else {
                 // If not verified then display pop up.
                 Login_Helper::login_radius_notify(__('Please verify your email by clicking the confirmation link sent to you.', 'LoginRadius'), 'isEmailNotVerified');
                 return;
             }
         }
         // check if id already exists.
         $loginRadiusUserId = $wpdb->get_var($wpdb->prepare("SELECT user_id FROM " . $wpdb->usermeta . " WHERE meta_key='loginradius_provider_id' AND meta_value = %s", self::$loginRadiusProfileData['ID']));
         if (!empty($loginRadiusUserId)) {
             // id exists
             $tempUserId = $wpdb->get_var($wpdb->prepare("SELECT user_id FROM " . $wpdb->usermeta . " WHERE user_id = %d and meta_key='loginradius_isVerified'", $loginRadiusUserId));
             if (!empty($tempUserId)) {
                 // check if verification field exists.
                 $isVerified = $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM " . $wpdb->usermeta . " WHERE user_id = %d and meta_key='loginradius_isVerified'", $loginRadiusUserId));
                 if ($isVerified == '1') {
                     // if email is verified
                     Login_Helper::login_user($loginRadiusUserId, self::$loginRadiusProfileData);
                     return;
                 } else {
                     Login_Helper::login_radius_notify(__('Please verify your email by clicking the confirmation link sent to you.', 'LoginRadius'), 'isEmailNotVerified');
                     return;
                 }
             } else {
                 Login_Helper::login_user($loginRadiusUserId, self::$loginRadiusProfileData);
                 return;
             }
         } else {
             // Email is empty for social profile data.
             $dummyEmail = isset($loginRadiusSettings['LoginRadius_dummyemail']) ? $loginRadiusSettings['LoginRadius_dummyemail'] : '';
             // Create dummy email.
             if (empty(self::$loginRadiusProfileData['Email']) && $dummyEmail == 'dummyemail') {
                 // Email not required according to plugin settings
                 self::$loginRadiusProfileData['Email'] = Login_Helper::generate_dummy_email(self::$loginRadiusProfileData);
             }
             // Retrieve Profile Data in Popup - Custom popup enabled
             if (isset($lr_social_profile_data_settings['enable_custom_popup']) && $lr_social_profile_data_settings['enable_custom_popup'] == '1') {
                 //Has Email from provider or from dummy email
                 $has_email = isset(self::$loginRadiusProfileData['Email']) && !empty(self::$loginRadiusProfileData['Email']) ? true : false;
                 $notdummyemail = isset($loginRadiusSettings['LoginRadius_dummyemail']) && $loginRadiusSettings['LoginRadius_dummyemail'] == 'notdummyemail' ? true : false;
                 $showpopup = false;
                 if (!$has_email && $notdummyemail && isset($lr_social_profile_data_settings['show_email']) && $lr_social_profile_data_settings['show_email'] == '1' || isset($loginRadiusSettings['LoginRadius_dummyemail']) && $loginRadiusSettings['LoginRadius_dummyemail'] == 'notdummyemail') {
                     $showpopup = true;
                 } elseif (isset($lr_social_profile_data_settings['show_gender']) && $lr_social_profile_data_settings['show_gender'] == '1') {
                     $showpopup = true;
                 } elseif (isset($lr_social_profile_data_settings['show_birthdate']) && $lr_social_profile_data_settings['show_birthdate'] == '1') {
                     $showpopup = true;
                 } elseif (isset($lr_social_profile_data_settings['show_phonenumber']) && $lr_social_profile_data_settings['show_phonenumber'] == '1') {
                     $showpopup = true;
                 } elseif (isset($lr_social_profile_data_settings['show_city']) && $lr_social_profile_data_settings['show_city'] == '1') {
                     $showpopup = true;
                 } elseif (isset($lr_social_profile_data_settings['show_postalcode']) && $lr_social_profile_data_settings['show_postalcode'] == '1') {
                     $showpopup = true;
                 } elseif (isset($lr_social_profile_data_settings['show_relationshipstatus']) && $lr_social_profile_data_settings['show_relationshipstatus'] == '1') {
                     $showpopup = true;
                 } elseif (isset($lr_social_profile_data_settings['show_custom_one']) && $lr_social_profile_data_settings['show_custom_one'] == '1') {
                     $showpopup = true;
                 } elseif (isset($lr_social_profile_data_settings['show_custom_two']) && $lr_social_profile_data_settings['show_custom_two'] == '1') {
                     $showpopup = true;
                 } elseif (isset($lr_social_profile_data_settings['show_custom_three']) && $lr_social_profile_data_settings['show_custom_three'] == '1') {
                     $showpopup = true;
                 } elseif (isset($lr_social_profile_data_settings['show_custom_four']) && $lr_social_profile_data_settings['show_custom_four'] == '1') {
                     $showpopup = true;
                 } elseif (isset($lr_social_profile_data_settings['show_custom_five']) && $lr_social_profile_data_settings['show_custom_five'] == '1') {
                     $showpopup = true;
                 }
                 if ($showpopup) {
                     $lrUniqueId = Login_Helper::store_temporary_data(self::$loginRadiusProfileData);
                     $queryString = '?lrid=' . $lrUniqueId;
                     wp_redirect(site_url() . $queryString);
                     exit;
                 } else {
                     Login_Helper::register_user(self::$loginRadiusProfileData);
                     return;
                 }
             } else {
                 // Normal flow no custom popup.
                 if (empty(self::$loginRadiusProfileData['Email'])) {
                     if ($dummyEmail == 'dummyemail') {
                         Login_Helper::register_user(self::$loginRadiusProfileData);
                         return;
                     } else {
                         // Email required according to plugin settings.
                         $lrUniqueId = Login_Helper::store_temporary_data(self::$loginRadiusProfileData);
                         $queryString = '?lrid=' . $lrUniqueId;
                         wp_redirect(site_url() . $queryString);
                         exit;
                     }
                 } else {
                     // Email is not empty
                     $userObject = get_user_by('email', self::$loginRadiusProfileData['Email']);
                     $loginRadiusUserId = is_object($userObject) ? $userObject->ID : '';
                     if (!empty($loginRadiusUserId)) {
                         // Email exists
                         $isVerified = $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM " . $wpdb->usermeta . " WHERE user_id = %d and meta_key='loginradius_isVerified'", $loginRadiusUserId));
                         if (!empty($isVerified)) {
                             if ($isVerified == '1') {
                                 // Social linking
                                 LR_Common::link_account($loginRadiusUserId, self::$loginRadiusProfileData['ID'], self::$loginRadiusProfileData['Provider'], self::$loginRadiusProfileData['ThumbnailImageUrl'], self::$loginRadiusProfileData['Provider'], '');
                                 // Login user
                                 Login_Helper::login_user($loginRadiusUserId, self::$loginRadiusProfileData);
                                 return;
                             } else {
                                 $directorySeparator = DIRECTORY_SEPARATOR;
                                 require_once getcwd() . $directorySeparator . 'wp-admin' . $directorySeparator . 'inc' . $directorySeparator . 'user.php';
                                 wp_delete_user($loginRadiusUserId);
                                 Login_Helper::register_user(self::$loginRadiusProfileData);
                             }
                         } else {
                             // Link Account
                             LR_Common::link_account($loginRadiusUserId, self::$loginRadiusProfileData['ID'], self::$loginRadiusProfileData['Provider'], self::$loginRadiusProfileData['ThumbnailImageUrl'], self::$loginRadiusProfileData['Provider'], '');
                             // Login user
                             Login_Helper::login_user($loginRadiusUserId, self::$loginRadiusProfileData);
                             return;
                         }
                     } else {
                         Login_Helper::register_user(self::$loginRadiusProfileData);
                     }
                 }
             }
         }
     }
     // Authentication ends
 }