Index: modules/openid/openid.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/openid/openid.module,v
retrieving revision 1.19
diff -u -p -r1.19 openid.module
--- modules/openid/openid.module	30 Jan 2008 22:11:22 -0000	1.19
+++ modules/openid/openid.module	15 Feb 2008 13:24:53 -0000
@@ -124,6 +124,12 @@ function openid_form_alter(&$form, $form
       $form['pass']['#value'] = user_password();
     }
     $form['auth_openid'] = array('#type' => 'hidden', '#value' => $_SESSION['openid']['values']['auth_openid']);
+    $form['openid_display'] = array(
+      '#type' => 'item',
+      '#title' => t('Your OpenID'),
+      '#description' => t('This OpenID will be attached to your account after registration.'),
+      '#value' => $_SESSION['openid']['values']['auth_openid'],    
+    );
   }
   return $form;
 }
@@ -398,8 +404,8 @@ function openid_authentication($response
   elseif (variable_get('user_register', 1)) {
     // Register new user
     $form_state['redirect'] = NULL;
-    $form_state['values']['name'] = (empty($response['openid.sreg.nickname'])) ? $identity : $response['openid.sreg.nickname'];
-    $form_state['values']['mail'] = (empty($response['openid.sreg.email'])) ? '' : $response['openid.sreg.email'];
+    $form_state['values']['name'] = (!empty($response['openid.sreg.nickname'])) ? $response['openid.sreg.nickname'] : _openid_username_from_id($identity);
+    $form_state['values']['mail'] = (!empty($response['openid.sreg.email'])) ? $response['openid.sreg.email'] : '';
     $form_state['values']['pass']  = user_password();
     $form_state['values']['status'] = variable_get('user_register', 1) == 1;
     $form_state['values']['response'] = $response;
@@ -410,7 +416,7 @@ function openid_authentication($response
     if (form_get_errors()) {
       // We were unable to register a valid new user, redirect to standard
       // user/register and prefill with the values we received.
-      drupal_set_message(t('OpenID registration failed for the reasons listed. You may register now, or if you already have an account you can <a href="@login">log in</a> now and add your OpenID under "My Account"', array('@login' => url('user/login'))), 'error');
+      drupal_set_message(t('You are identifying to this site for the first time, and some requirements could not be fulfilled automatically. Please complete the registration process manually, or <a href="@login">log in</a> normally if you have an account already.', array('@login' => url('user/login'))), 'warning');
       $_SESSION['openid']['values'] = $form_state['values'];
       // We'll want to redirect back to the same place.
       $destination = drupal_get_destination();
@@ -527,3 +533,23 @@ function openid_verify_assertion($op_end
   }
   return $valid;
 }
+
+/**
+ * Sanitize the openid or the nickname to comply with our own restrictions on a username.
+ *
+ * @param $id The OpenID URL to sanitize
+ *
+ * @return $name A valid username for a Drupal account. 
+ */
+
+function _openid_username_from_id($id) {
+  $tokens = parse_url($id);
+  
+  $sub = strrev(substr(strrchr(strrev($tokens['host']), '.'), 1));
+  $path = substr(strrchr('/'. rtrim($tokens['path'], '/'), '/'), 1);
+  
+  $name = $path ? $path : $sub;
+  
+  return trim(preg_replace('/[^a-z0-9]+/', '-', $name), '-');
+}
+
