better error handling

darcs-hash:20080618071207-84dde-a7903c5a806e16a39101244ef721204a7ce2bd46.gz
This commit is contained in:
Evan Prodromou 2008-06-18 03:12:07 -04:00
parent 7a17d1c477
commit ec68ae3cb1
1 changed files with 28 additions and 20 deletions

View File

@ -33,7 +33,7 @@ class FinishaddopenidAction extends Action {
} }
function try_login() { function try_login() {
$consumer = oid_consumer(); $consumer = oid_consumer();
$response = $consumer->complete(common_local_url('finishaddopenid')); $response = $consumer->complete(common_local_url('finishaddopenid'));
@ -59,15 +59,22 @@ class FinishaddopenidAction extends Action {
} }
$user = $this->get_user($canonical); $user = $this->get_user($canonical);
if ($user) { if ($user) {
$this->message(_t('This OpenID is already associated with user "') . $user->nickname . _t('"')); $this->message(_t('This OpenID is already associated with user "') . $user->nickname . _t('"'));
} else { } else {
$user = common_current_user(); $user = common_current_user();
$this->connect_user($user, $display, $canonical); if (!$this->connect_user($user, $display, $canonical)) {
if ($sreg) { $this->message(_t('Error connecting user'));
$this->update_user($user, $sreg); return;
} }
if ($sreg) {
if (!$this->update_user($user, $sreg)) {
$this->message(_t('Error updating profile'));
return;
}
}
# success!
common_redirect(common_local_url('openidsettings')); common_redirect(common_local_url('openidsettings'));
} }
} }
@ -78,7 +85,7 @@ class FinishaddopenidAction extends Action {
common_element('p', NULL, $msg); common_element('p', NULL, $msg);
common_show_footer(); common_show_footer();
} }
function get_user($canonical) { function get_user($canonical) {
$user = NULL; $user = NULL;
$oid = User_openid::staticGet('canonical', $canonical); $oid = User_openid::staticGet('canonical', $canonical);
@ -89,15 +96,15 @@ class FinishaddopenidAction extends Action {
} }
function update_user($user, $sreg) { function update_user($user, $sreg) {
$profile = $user->getProfile(); $profile = $user->getProfile();
$orig_profile = clone($profile); $orig_profile = clone($profile);
if ($sreg['fullname'] && strlen($sreg['fullname']) <= 255) { if ($sreg['fullname'] && strlen($sreg['fullname']) <= 255) {
$profile->fullname = $sreg['fullname']; $profile->fullname = $sreg['fullname'];
} }
if ($sreg['country']) { if ($sreg['country']) {
if ($sreg['postcode']) { if ($sreg['postcode']) {
# XXX: use postcode to get city and region # XXX: use postcode to get city and region
@ -110,35 +117,36 @@ class FinishaddopenidAction extends Action {
# XXX save language if it's passed # XXX save language if it's passed
# XXX save timezone if it's passed # XXX save timezone if it's passed
if (!$profile->update($orig_profile)) { if (!$profile->update($orig_profile)) {
common_server_error(_t('Error saving the profile.')); common_server_error(_t('Error saving the profile.'));
return; return false;
} }
$orig_user = clone($user); $orig_user = clone($user);
if ($sreg['email'] && Validate::email($sreg['email'], true)) { if ($sreg['email'] && Validate::email($sreg['email'], true)) {
$user->email = $sreg['email']; $user->email = $sreg['email'];
} }
if (!$user->update($orig_user)) { if (!$user->update($orig_user)) {
common_server_error(_t('Error saving the user.')); common_server_error(_t('Error saving the user.'));
return; return false;
} }
}
function connect_user($user, $display, $canonical) {
return true;
}
function connect_user($user, $display, $canonical) {
$oid = new User_openid(); $oid = new User_openid();
$oid->display = $display; $oid->display = $display;
$oid->canonical = $canonical; $oid->canonical = $canonical;
$oid->user_id = $user->id; $oid->user_id = $user->id;
$oid->created = DB_DataObject_Cast::dateTime(); $oid->created = DB_DataObject_Cast::dateTime();
if (!$oid->insert()) { if (!$oid->insert()) {
common_server_error(_t('Error connecting OpenID.')); return false;
return;
} }
} }
} }