]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/finishaddopenid.php
remember to broadcast in api, and also use the right ID
[quix0rs-gnu-social.git] / actions / finishaddopenid.php
index 35b82ddf9271182da51ee0773e8333f10085c90e..54d81b0b4e538efd0ba3c60d43f7d22566daaf53 100644 (file)
@@ -26,12 +26,12 @@ class FinishaddopenidAction extends Action {
        function handle($args) {
                parent::handle($args);
                if (!common_logged_in()) {
-                       common_user_error(_t('Not logged in.'));
+                       common_user_error(_('Not logged in.'));
                } else {
                        $this->try_login();
                }
        }
-
+       
        function try_login() {
 
                $consumer =& oid_consumer();
@@ -39,18 +39,16 @@ class FinishaddopenidAction extends Action {
                $response = $consumer->complete(common_local_url('finishaddopenid'));
 
                if ($response->status == Auth_OpenID_CANCEL) {
-                       $this->message(_t('OpenID authentication cancelled.'));
+                       $this->message(_('OpenID authentication cancelled.'));
                        return;
                } else if ($response->status == Auth_OpenID_FAILURE) {
                        // Authentication failed; display the error message.
-                       $this->message(_t('OpenID authentication failed: ') . $response->message);
+                       $this->message(sprintf(_('OpenID authentication failed: %s'), $response->message));
                } else if ($response->status == Auth_OpenID_SUCCESS) {
-                       // This means the authentication succeeded; extract the
-                       // identity URL and Simple Registration data (if it was
-                       // returned).
+
                        $display = $response->getDisplayIdentifier();
-                       $canonical = ($response->endpoint->canonicalID) ?
-                         $response->endpoint->canonicalID : $response->getDisplayIdentifier();
+                       $canonical = ($response->endpoint && $response->endpoint->canonicalID) ?
+                         $response->endpoint->canonicalID : $display;
 
                        $sreg_resp = Auth_OpenID_SRegResponse::fromSuccessResponse($response);
 
@@ -58,87 +56,48 @@ class FinishaddopenidAction extends Action {
                                $sreg = $sreg_resp->contents();
                        }
 
-                       common_debug(print_r($sreg, TRUE), __FILE__);
-                       common_debug(print_r($display, TRUE), __FILE__);
-                       common_debug(print_r($canonical, TRUE), __FILE__);
-                       
-                       $other =& $this->get_user($canonical);
+                       $cur =& common_current_user();
+                       $other = oid_get_user($canonical);
 
                        if ($other) {
-                               $this->message(_t('This OpenID is already associated with user "') . $other->nickname . _t('"'));
-                       } else {
-                               $cur =& common_current_user();
-                               $result = oid_link_user($cur->id, $display, $canonical);
-                               if (!$result) {
-                                       $this->message(_t('Error connecting user'));
-                                       return;
-                               }
-                               if ($sreg) {
-                                       if (!$this->update_user($cur, $sreg)) {
-                                               $this->message(_t('Error updating profile'));
-                                               return;
-                                       }
+                               if ($other->id == $cur->id) {
+                                       $this->message(_('You already have this OpenID!'));
+                               } else {
+                                       $this->message(_('Someone else already has this OpenID.'));
                                }
-                               # success!
-                               common_redirect(common_local_url('openidsettings'));
+                               return;
                        }
-               }
-       }
-
-       function message($msg) {
-               common_show_header(_t('OpenID Login'));
-               common_element('p', NULL, $msg);
-               common_show_footer();
-       }
-
-       function get_user($canonical) {
-               $user = NULL;
-               $oid = User_openid::staticGet('canonical', $canonical);
-               if ($oid) {
-                       $user = User::staticGet('id', $oid->user_id);
-               }
-               return $user;
-       }
-
-       function update_user(&$user, $sreg) {
 
-               $profile =& $user->getProfile();
+                       # start a transaction
 
-               $orig_profile = clone($profile);
+                       $cur->query('BEGIN');
 
-               if ($sreg['fullname'] && strlen($sreg['fullname']) <= 255) {
-                       $profile->fullname = $sreg['fullname'];
-               }
+                       $result = oid_link_user($cur->id, $canonical, $display);
 
-               if ($sreg['country']) {
-                       if ($sreg['postcode']) {
-                               # XXX: use postcode to get city and region
-                               # XXX: also, store postcode somewhere -- it's valuable!
-                               $profile->location = $sreg['postcode'] . ', ' . $sreg['country'];
-                       } else {
-                               $profile->location = $sreg['country'];
+                       if (!$result) {
+                               $this->message(_('Error connecting user.'));
+                               return;
+                       }
+                       if ($sreg) {
+                               if (!oid_update_user($cur, $sreg)) {
+                                       $this->message(_('Error updating profile'));
+                                       return;
+                               }
                        }
-               }
 
-               # XXX save language if it's passed
-               # XXX save timezone if it's passed
+                       # success!
 
-               if (!$profile->update($orig_profile)) {
-                       common_server_error(_t('Error saving the profile.'));
-                       return false;
-               }
+                       $cur->query('COMMIT');
 
-               $orig_user = clone($user);
+                       oid_set_last($display);
 
-               if ($sreg['email'] && Validate::email($sreg['email'], true)) {
-                       $user->email = $sreg['email'];
+                       common_redirect(common_local_url('openidsettings'));
                }
+       }
 
-               if (!$user->update($orig_user)) {
-                       common_server_error(_t('Error saving the user.'));
-                       return false;
-               }
-               
-               return true;
+       function message($msg) {
+               common_show_header(_('OpenID Login'));
+               common_element('p', NULL, $msg);
+               common_show_footer();
        }
 }