示例#1
0
 /**
  * Redirect and auth twitter account
  */
 public function redirect()
 {
     if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'twitterauth') {
         // request token
         if (!isset($_SESSION)) {
             ob_start();
             @session_start();
         }
         require_once dirname(__FILE__) . '/twitteroauth/twitteroauth.php';
         // create connection
         $connection = new TwitterOAuth($this->consumer_key, $this->consumer_secret);
         // request token
         $request_token = $connection->getRequestToken($this->oauth_callback);
         //
         if ($request_token) {
             // var_dump($request_token);
             // exit;
             $token = $request_token['oauth_token'];
             $_SESSION['oauth_token'] = $token;
             $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];
             // redirect to twitter
             switch ($connection->http_code) {
                 case 200:
                     $url = $connection->getAuthorizeURL($request_token);
                     //redirect to Twitter .
                     header('Location: ' . $url);
                     exit;
                     break;
                 default:
                     echo "Connection with twitter Failed";
                     exit;
                     break;
             }
         } else {
             echo __("Error Receiving Request Token", ET_DOMAIN);
             exit;
         }
     } else {
         if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'twitterauth_callback' && $_GET['oauth_token']) {
             // request access token and
             // create account here
             if (!isset($_SESSION)) {
                 ob_start();
                 @session_start();
             }
             require_once dirname(__FILE__) . '/twitteroauth/twitteroauth.php';
             // create connection
             $connection = new TwitterOAuth($this->consumer_key, $this->consumer_secret, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
             // request access token
             $access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);
             //
             if ($access_token && isset($access_token['oauth_token'])) {
                 // recreate connection
                 $connection = new TwitterOAuth($this->consumer_key, $this->consumer_secret, $access_token['oauth_token'], $access_token['oauth_token_secret']);
                 $account = $connection->get('account/verify_credentials');
                 // create account
                 if ($account && isset($account->screen_name) && isset($account->name)) {
                     // find
                     $users = get_users(array('meta_key' => 'et_twitter_id', 'meta_value' => $account->id));
                     if (!empty($users) && is_array($users)) {
                         $user = $users[0];
                         wp_set_auth_cookie($user->ID, 1);
                         wp_redirect(home_url());
                         exit;
                     }
                     $avatars = array();
                     $sizes = get_intermediate_image_sizes();
                     foreach ($sizes as $size) {
                         $avatars[$size] = array($account->profile_image_url);
                     }
                     // save user info for saving later
                     $_SESSION['user_login'] = $account->screen_name;
                     $_SESSION['display_name'] = $account->name;
                     $_SESSION['et_twitter_id'] = $account->id;
                     $_SESSION['user_location'] = $account->location;
                     $_SESSION['description'] = $account->description;
                     $_SESSION['profile_image_url'] = $account->profile_image_url;
                     $_SESSION['et_auth'] = serialize(array('user_login' => $account->screen_name, 'display_name' => $account->name, 'user_location' => $account->location, 'user_twitter' => 'https://twitter.com/' . $account->screen_name, 'description' => $account->description, 'et_avatar' => $avatars));
                     $_SESSION['et_social_id'] = $account->id;
                     $_SESSION['et_auth_type'] = 'twitter';
                     wp_redirect($this->auth_url);
                     exit;
                 }
             }
             exit;
         } else {
             if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'twitterauth_login') {
                 if (!isset($_SESSION)) {
                     ob_start();
                     @session_start();
                 }
                 if (!empty($_POST['user_email'])) {
                     $password = wp_generate_password();
                     $new_account = array('user_login' => $_SESSION['user_login'], 'display_name' => $_SESSION['display_name'], 'et_twitter_id' => $_SESSION['et_twitter_id'], 'user_location' => $_SESSION['user_location'], 'user_twitter' => 'https://twitter.com/' . $_SESSION['user_login'], 'description' => $_SESSION['description'], 'user_email' => $_POST['user_email'], 'user_pass' => $password, 'et_avatar' => array('thumbnail' => array($_SESSION['profile_image_url'])));
                     $user = get_user_by('login', $new_account['user_login']);
                     if ($user != false) {
                         $new_account['user_login'] = str_replace('@', '', $_POST['user_email']);
                     }
                     $result = QA_Member::insert($new_account);
                     if (!is_wp_error($result)) {
                         // send email here
                         do_action('et_after_register', $result);
                         // login
                         $user = wp_signon(array('user_login' => $new_account['user_login'], 'user_password' => $new_account['user_pass']));
                         if (is_wp_error($user)) {
                             global $et_error;
                             $et_error = $user->get_error_message();
                             //echo $user->get_error_message();
                         } else {
                             wp_redirect(home_url());
                             exit;
                         }
                     } else {
                         global $et_error;
                         $et_error = $result->get_error_message();
                     }
                 }
                 // ask people for password
                 include TEMPLATEPATH . '/page-twitter-auth.php';
                 exit;
             }
         }
     }
 }