init_defaults(); $this->init_options(); } private function init_defaults(){ $this->default = new stdClass; $this->default->options = array( 'fb_api_id' => '', 'fb_api_secret' => '', 'fb_login' => 0, 'fb_load_sdk' => 1, 'fb_sdk_version' => 'v2.10', 'fb_lb_on_lp' => 1, 'fb_lb_on_rp' => 1, 'fb_redirect' => 'profile', 'fb_redirect_url' => '', 'tw_load_wjs' => 1, 'gg_load_js' => 0, 'vk_load_js' => 1, 'ok_load_js' => 1, 'sb_on' => 1, 'sb_toggle_on' => 0, 'sb' => array('fb' => 1, 'tw' => 1, 'wapp' => 1, 'lin' => 0, 'vk' => 0, 'ok' => 0, 'gg' => 0), 'sb_icon' => 'mixed', 'sb_type' => 'icon', 'sb_style' => 'grey', 'sb_toggle' => 4, 'sb_location_toggle' => 'top', 'sb_toggle_type' => 'collapsed', 'sb_location' => array('top' => 0, 'bottom' => 1), ); } private function init_options(){ $this->options = get_wpf_option('wpforo_api_options', $this->default->options); } public function hooks(){ $template = WPF()->current_object['template']; ############################################################################### ############### Facebook & Twitter API ######################################## ############################################################################### if(!is_user_logged_in()){ if( $this->options['fb_login'] ){ if( $template == 'login' || $template == 'register' ){ add_action('wp_enqueue_scripts', array($this, 'fb_enqueue')); add_action('wpforo_bottom_hook', array($this, 'fb_login_sdk'), 9); } if( $this->options['fb_api_id'] && $this->options['fb_api_secret'] ){ if( $this->options['fb_lb_on_lp'] ){ add_action('wpforo_login_form_end', array($this, 'fb_login_button')); } if( $this->options['fb_lb_on_rp'] ){ add_action('wpforo_register_form_end', array($this, 'fb_login_button')); } } add_action('wp_ajax_wpforo_facebook_auth', array($this, 'fb_auth')); add_action('wp_ajax_nopriv_wpforo_facebook_auth', array($this, 'fb_auth')); } } if( is_wpforo_page() ){ if( $this->options['fb_load_sdk'] ){ add_action('wpforo_bottom_hook', array($this, 'fb_sdk'), 10); } if( $this->options['tw_load_wjs'] && wpfval($this->options, 'sb', 'tw') ){ add_action('wpforo_top_hook', array($this, 'tw_wjs'), 11); } if( $this->options['vk_load_js'] && wpfval($this->options, 'sb', 'vk') ){ add_action('wpforo_top_hook', array($this, 'vk_js'), 13); } if( $this->options['ok_load_js'] && wpfval($this->options, 'sb', 'ok') ){ add_action('wpforo_top_hook', array($this, 'ok_js'), 14); } } ############################################################################### ############### reCAPTCHA API ################################################# ############################################################################### $site_key = WPF()->tools_antispam['rc_site_key']; $secret_key = WPF()->tools_antispam['rc_secret_key']; if( !is_user_logged_in() && $site_key && $secret_key ){ $rc_reg_form = WPF()->tools_antispam['rc_reg_form']; $rc_login_form = WPF()->tools_antispam['rc_login_form']; $rc_lostpass_form = WPF()->tools_antispam['rc_lostpass_form']; $rc_wpf_reg_form = WPF()->tools_antispam['rc_wpf_reg_form']; $rc_wpf_login_form = WPF()->tools_antispam['rc_wpf_login_form']; $rc_wpf_lostpass_form = WPF()->tools_antispam['rc_wpf_lostpass_form']; $rc_post_editor = WPF()->tools_antispam['rc_post_editor']; $rc_topic_editor = WPF()->tools_antispam['rc_topic_editor']; add_filter('script_loader_tag', array(&$this,'rc_enqueue_async'), 10, 3); //Verification Hooks: Login / Register / Reset Pass if( $rc_login_form || $rc_wpf_login_form ) add_filter('wp_authenticate_user', array($this, 'rc_verify_wp_login'), 15, 2); if( $rc_reg_form || $rc_wpf_reg_form ) add_filter('registration_errors', array($this, 'rc_verify_wp_register'), 10, 3); if( $rc_lostpass_form || $rc_wpf_lostpass_form ) add_action('lostpassword_post', array($this, 'rc_verify_wp_lostpassword'), 10); //Load reCAPTCHA API and Widget on wp-login.php if( $rc_reg_form || $rc_login_form || $rc_lostpass_form ){ add_action('login_enqueue_scripts', array($this, 'rc_enqueue')); add_action('login_enqueue_scripts', array($this, 'rc_enqueue_css')); if( $rc_login_form && $template != 'login' ) add_action('login_form', array($this, 'rc_widget')); if( $rc_reg_form && $template != 'register') add_action('register_form', array($this, 'rc_widget')); if( $rc_lostpass_form && $template != 'lostpassword' )add_action('lostpassword_form', array( $this, 'rc_widget')); } //Load reCAPTCHA API on wpForo pages: Login / Register / Reset Pass if( $template == 'login' || $template == 'register' || $template == 'lostpassword'){ if( $rc_wpf_reg_form || $rc_wpf_login_form || $rc_wpf_lostpass_form ){ add_action('wp_enqueue_scripts', array($this, 'rc_enqueue')); } } //Load reCAPTCHA Widget wpForo forms: Login / Register / Reset Pass if( $rc_wpf_login_form && $template == 'login' ) add_action('login_form', array($this, 'rc_widget')); if( $rc_wpf_reg_form && $template == 'register') add_action('register_form', array($this, 'rc_widget')); if( $rc_wpf_lostpass_form && $template == 'lostpassword' ) add_action('lostpassword_form', array( $this, 'rc_widget')); //Load reCAPTCHA API and Widget for Topic and Post Editor if( $template == 'forum' || $template == 'topic' || $template == 'post' ){ add_action('wp_enqueue_scripts', array($this, 'rc_enqueue')); add_action('wpforo_verify_form_end', array($this, 'rc_verify')); if( $rc_topic_editor ) add_action('wpforo_topic_form_extra_fields_after', array($this, 'rc_widget')); if( $rc_post_editor ) { add_action('wpforo_reply_form_extra_fields_after', array($this, 'rc_widget')); add_action('wpforo_portable_form_extra_fields_after', array($this, 'rc_widget')); } } } ############################################################################### } public function local( $api ){ $wplocal = get_locale(); $wplocal_iso = substr($wplocal, 0, 2); if( $api == 'fb' ){ if( in_array($wplocal, $this->fb_local) ){ return $wplocal; } else{ return $this->locale; } } elseif( $api == 'tw' ){ if( in_array($wplocal_iso, $this->tw_local) ){ return $wplocal_iso; } else{ return $this->locale_iso; } } elseif( $api == 'vk' ){ return $wplocal_iso; } elseif( $api == 'ok' ){ if( in_array($wplocal_iso, $this->ok_local) ){ return $wplocal_iso; } else{ return $this->locale_iso; } } } public function fb_enqueue() { $app_id = $this->options['fb_api_id']; wp_register_script('wpforo-snfb', WPFORO_URL . '/wpf-assets/js/snfb.js', array('jquery'), WPFORO_VERSION, false ); wp_enqueue_script('wpforo-snfb'); wp_localize_script('wpforo-snfb', 'wpforo_fb', array( 'ajaxurl' => admin_url('admin-ajax.php'), 'site_url' => home_url(), 'scopes' => 'email,public_profile', 'appId' => $app_id, 'l18n' => array( 'chrome_ios_alert' => __( 'Please login into Facebook and then click connect button again', 'wpforo' ))) ); } public function fb_auth(){ $app_version = 'v2.10'; $app_secret = $this->options['fb_api_secret']; check_ajax_referer( 'wpforo-fb-nonce', 'security' ); $fb_token = isset( $_POST['fb_response']['authResponse']['accessToken'] ) ? $_POST['fb_response']['authResponse']['accessToken'] : ''; $fb_url = add_query_arg( array( 'fields' => 'id,first_name,last_name,email,link,about,locale,birthday', 'access_token' => $fb_token ), 'https://graph.facebook.com/' . $app_version . '/' . $_POST['fb_response']['authResponse']['userID'] ); ################################################################################################################### // Verifying Graph API Calls with appsecret_proof // Graph API calls can be made from clients or from your server on behalf of clients. // Calls from a server can be better secured by adding a parameter called appsecret_proof. // https://developers.facebook.com/docs/graph-api/securing-requests/ if( $app_secret ) { $appsecret_proof = hash_hmac('sha256', $fb_token, trim($app_secret) ); $fb_url = add_query_arg( array( 'appsecret_proof' => $appsecret_proof ), $fb_url ); } ################################################################################################################### $fb_response = wp_remote_get( esc_url_raw( $fb_url ), array( 'timeout' => 30 ) ); if( is_wp_error( $fb_response ) ) wpforo_ajax_response( array( 'error' => $fb_response->get_error_message() ) ); $fb_user = json_decode( wp_remote_retrieve_body( $fb_response ), true ); if( isset( $fb_user['error'] ) ) wpforo_ajax_response( array( 'error' => 'Error code: '. $fb_user['error']['code'] . ' - ' . $fb_user['error']['message'] ) ); if( empty( $fb_user['email'] ) ) wpforo_ajax_response( array( 'error' => __('Your email is required to be able authorize you here. Please try loging again. ', 'wpforo' ), 'fb' => $fb_user ) ); $fb_user['link'] = ( isset($fb_user['link']) ) ? $fb_user['link'] : ''; $fb_user['about'] = ( isset($fb_user['about']) ) ? $fb_user['about'] : ''; $fb_user['locale'] = ( isset($fb_user['locale']) ) ? $fb_user['locale'] : ''; $user = array( 'fb_user_id' => $fb_user['id'], 'first_name' => $fb_user['first_name'], 'last_name' => $fb_user['last_name'], 'user_email' => $fb_user['email'], 'user_url' => $fb_user['link'], 'user_pass' => wp_generate_password(), 'description' => $fb_user['about'], 'locale' => $fb_user['locale'], 'rich_editing' => 'true' ); $message = array( 'error' => __( 'Invalid User', 'wpforo' ) ); if ( empty( $user['fb_user_id'] ) ) wpforo_ajax_response( $message ); $member = wpforo_get_fb_user( $user ); $meta_updated = false; if ( $member ){ $user_id = $member->ID; $message = array( 'success' => $user_id, 'method' => 'login'); if( empty( $member->user_email ) ) wp_update_user( array( 'ID' => $user_id, 'user_email' => $user['user_email'] ) ); } else { if( !wpforo_feature('user-register') ) wpforo_ajax_response( array( 'error' => __( 'User registration is disabled', 'wpforo' ) ) ); $username = wpforo_unique_username( $user['user_email'] ); $user['user_login'] = str_replace('.', '', $username); $user['user_nicename'] = sanitize_title($username); $user['display_name'] = ( $user['first_name'] || $user['last_name'] ) ? trim($user['first_name'] . ' ' . $user['last_name']) : ucfirst(str_replace('-', ' ', $user['user_nicename'])); $user_id = wp_insert_user( $user ); if( !is_wp_error( $user_id ) ) { wp_new_user_notification( $user_id, NULL, 'admin' ); wp_new_user_notification( $user_id, '', 'user' ); update_user_meta( $user_id, '_fb_user_id', $user['fb_user_id'] ); if( isset($fb_user['birthday']) && $fb_user['birthday'] ){ update_user_meta( $user_id, '_fb_user_birthday', $fb_user['birthday'] ); } $meta_updated = true; $message = array( 'success' => $user_id, 'method' => 'registration' ); } } if( is_numeric( $user_id ) ) { wp_set_auth_cookie( $user_id, true ); if( !$meta_updated ) update_user_meta( $user_id, '_fb_user_id', $user['fb_user_id'] ); } wpforo_ajax_response( $message ); } public function fb_redirect(){ if( $this->options['fb_redirect'] == 'custom' && $this->options['fb_redirect_url'] != '' ){ return esc_url($this->options['fb_redirect_url']); } elseif( $this->options['fb_redirect'] == 'profile' ){ $current_user_id = WPF()->current_userid; return wpforo_home_url("account/"); } else{ return wpforo_home_url(); } } public function fb_sdk(){ ?>
tools_legal['checkbox_fb_login']; $public_profile = 'public_profile'; ?>