﻿### Eclipse Workspace Patch 1.0
#P realname-6
Index: modules/realname_generate.install
===================================================================
RCS file: modules/realname_generate.install
diff -N modules/realname_generate.install
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/realname_generate.install	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,15 @@
+<?php
+// $Id: realname_generate.install,v .1 $
+
+/**
+ * @file
+ *   Uninstall realname_generate module.
+ *
+ */
+
+/**
+ * Implementation of hook_uninstall().
+ */
+function realname_generate_uninstall() {
+  variable_del('realname_generate_username');
+}
Index: modules/realname_generate.module
===================================================================
RCS file: modules/realname_generate.module
diff -N modules/realname_generate.module
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/realname_generate.module	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,146 @@
+<?php
+// $Id: realname_generate.module,v .1 $
+
+/**
+ * @file
+ * Generates a username from fields on the registration page.
+ */
+
+/**
+ * Implementation of hook_menu().
+ */
+function realname_generate_menu() {
+  $items = array();
+  $items['admin/user/realname/generate'] = array(
+    'title' => 'Username generation',
+    'access arguments' => array('administer users'),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('realname_generate_admin'),
+    'type' => MENU_LOCAL_TASK,
+    'weight' => 10,
+  );
+  return $items;
+}
+
+/**
+ * Callback for the local task item.
+ */
+function realname_generate_admin() {
+  $form = array();
+  if (count($realname_fields = variable_get('realname_fields', array()))) {
+    $form['realname_generate_username'] = array(
+      '#type' => 'checkbox',
+      '#title' => '<strong>'. t('Generate username from realname') .'</strong>',
+      '#description' => t('If this option is selected, the realname will be used to automatically generate a username.'),
+      '#default_value' => variable_get('realname_generate_username', FALSE),
+      '#weight' => -10,
+    );
+  }
+  else {
+    //Need to select fields
+    $module = variable_get('realname_profile_module', NULL);
+    if (!$module) {
+      drupal_goto('admin/user/realname/module');
+    }
+    else {
+      drupal_goto('admin/user/realname/fields');
+    }
+  }
+  //Username settings.
+  $form['realname_generate_separator'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Username Separator'),
+    '#size' => 1,
+    '#description' => t('Enter a character to put between the realname fields in the username.'),
+    '#default_value' => variable_get('realname_generate_separator', '.'),
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save'),
+    );
+
+  return $form;
+}
+
+/**
+ * Sumbit handler for the settings.
+ */
+function realname_generate_admin_submit($form, &$form_state) {
+  // Save all the settings,.
+  variable_set('realname_generate_username', $form_state['values']['realname_generate_username']);
+  variable_set('realname_generate_separator', $form_state['values']['realname_generate_separator']);
+  drupal_set_message(t('Configuration has been updated.'), 'status');
+}
+
+/**
+ * Implementation of hook_user().
+ * Borrowed from the auto_username module (hat tip to Crell).
+ */
+function realname_generate_user($op, &$edit, &$account, $category = NULL) {
+  if (variable_get('realname_generate_username', FALSE)!== 0) {
+    static $new_name;
+    switch ($op) {
+      case 'validate':
+        // Find the fields on to generate the username from.
+        $fields = variable_get('realname_fields', array());
+        $field_count = 1;
+        $separator = variable_get('realname_generate_separator', '.');
+        foreach ($fields as $key => $values) {
+          if ($edit[$key]) {
+            $new_name .= $edit[$key][0]['value'] . check_plain($separator);
+          }
+        }
+        $new_name = substr($new_name, 0, -1);
+        if ($error = user_validate_name($new_name) && !is_numeric(arg(1))) {
+          form_set_error('name', $error);
+        }
+        // Add a serial to the name for uniqueness.
+        $counter = 1;
+        $base_name = $new_name;
+        while (db_result(db_query("SELECT COUNT(uid) FROM {users} WHERE uid != %d AND LOWER(name) = LOWER('%s')", $account->uid, $new_name)) > 0) {
+          $new_name = $base_name . $counter++;
+        }
+        $_SESSION['realname_generate']['new_name'] = $new_name;
+        break;
+
+      case 'insert': 
+        db_query("UPDATE {users} SET name='%s' WHERE uid=%d", array($new_name, $account->uid));
+        break;
+        
+      case 'after_update':
+        // If a user has updated their realname, we want to update their username.
+        // @TODO How to find when a realname has been updated so that we can make the db update?
+        //db_query("UPDATE {users} SET name='%s' WHERE uid=%d", array($new_name, $account->uid));
+        break;
+    }
+  }
+}
+
+/**
+* Implementation of hook_form_alter().
+*/
+function realname_generate_form_alter(&$form, &$form_state, $form_id) {
+  if (variable_get('realname_generate_username', FALSE) !== 0) {
+    if ($form_id == 'user_register') {
+      // default user registration form
+      $form['name']['#type'] = 'value';
+      $form['account']['name']['#type'] = 'value';
+      $form['account']['name']['#required'] = FALSE;
+      $form['name']['#value'] = user_password(10);
+      $form['#validate'][] = 'realname_generate_user_register_validate';
+    }
+    else if ($form_id = 'user_edit') {
+      $form['account']['name']['#type'] = 'hidden';
+      $form['account']['name']['#required'] = FALSE;
+    }    
+  }
+}
+
+/**
+ * Validation function is used to set the username to the realname fields entered on the previous screen.
+ *
+ */
+function realname_generate_user_register_validate($form, &$form_state) {
+  $form_state['values']['name'] = $_SESSION['realname_generate']['new_name'];
+  unset($_SESSION['realname_generate']['new_name']);
+}
Index: modules/realname_generate.info
===================================================================
RCS file: modules/realname_generate.info
diff -N modules/realname_generate.info
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/realname_generate.info	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,7 @@
+; $Id: generate_username.info,v .1 $
+name = "Username Generation"
+description = "Username Generation and check using AJAX on registration or create user form."
+core = 6.x
+package = User Management
+dependencies[] = user
+dependencies[] = realname
