? invite-user-register-access-374869-1.patch
Index: invite.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/invite/invite.module,v
retrieving revision 1.25.2.3
diff -u -p -r1.25.2.3 invite.module
--- invite.module	6 Oct 2008 13:03:08 -0000	1.25.2.3
+++ invite.module	15 Feb 2009 21:43:15 -0000
@@ -23,6 +23,37 @@ define('INVITE_UNLIMITED', -1);
 require_once drupal_get_path('module', 'invite') .'/invite_token.inc';
 
 /**
+ * Implementation of hook_menu_alter().
+ */
+function invite_menu_alter(&$items) {
+  $items['user/register']['access callback'] = 'invite_registration_access';
+}
+
+/**
+ * Menu callback; determine access to user registration form.
+ */
+function invite_registration_access() {
+  $invite = invite_load_from_session();
+
+  // Legacy url support (user/register/regcode).
+  if (!$invite && $code = arg(2)) {
+    if ($invite = invite_load($code)) {
+      if (invite_validate($invite)) {
+        $_SESSION[INVITE_SESSION] = $invite->reg_code;
+      }
+    }
+  }
+
+  if ($invite) {
+    return TRUE;
+  }
+  elseif (variable_get('user_register', 1) === '1-inviteonly' && !user_access('administer users')) {
+    drupal_set_message(t('Sorry, new user registration by invitation only.'));
+    return FALSE;    
+  }
+}
+
+/**
  * Implementation of hook_help().
  */
 function invite_help($path, $arg) {
@@ -318,22 +349,15 @@ function invite_form_alter(&$form, $form
           }
         }
       }
-
-      if ($invite) {
-        // Preset the e-mail field.
-        if (isset($form['account'])) {
-          $field = &$form['account'];
-        }
-        else {
-          $field = &$form;
-        }
-        if (isset($field['mail'])) {
-          $field['mail']['#default_value'] = $invite->email;
-        }
+      // Preset the e-mail field.
+      if (isset($form['account'])) {
+        $field = &$form['account'];
+      }
+      else {
+        $field = &$form;
       }
-      else if (variable_get('user_register', 1) === '1-inviteonly' && !user_access('administer users')) {
-        drupal_set_message(t('Sorry, new user registration by invitation only.'));
-        drupal_goto();
+      if (isset($field['mail'])) {
+        $field['mail']['#default_value'] = $invite->email;
       }
       break;
 
