rolesignup modification .. could not get the rid after role creation ..

  1. <?php # vim: set filetype=php expandtab tabstop=2 shiftwidth=2 autoindent smartindent:
  2. /* $Id: rolesignup.module,v 1.2.4.1 2007/01/20 21:49:48 sym Exp $ */
  3.  
  4. define("ROLE", "role_signup_role");
  5. /********************************************************************
  6. * Drupal Hooks
  7. ********************************************************************/
  8. /**
  9.  * Implementation of module_enable()
  10.  */
  11. function rolesignup_enable() {
  12.         cache_clear_all();
  13.         menu_cache_clear();
  14.         menu_rebuild();
  15. }
  16.  
  17. /**
  18.  * Implementation of module_disable()
  19.  */
  20. function rolesignup_disable() {
  21.         cache_clear_all();
  22.         menu_cache_clear();
  23.         menu_rebuild();
  24. }
  25.  
  26. /**
  27.  * Implementation of hook_perm()
  28.  */
  29. function rolesignup_perm() {
  30.   return array('register for role');
  31. }
  32.  
  33. /**
  34.  * Implementation of hook_user()
  35.  */
  36. function rolesignup_user($op, &$edit, &$account, $category = NULL) {
  37.   switch ($op) {
  38.     case 'register':
  39.             if(!$category || $category == "account") {
  40.  
  41.                         // Here I am tring to retain the _submit hook values ..
  42.                         // =============================================================
  43.                 if($_SESSION["rolesignup_pass_role"]) {
  44.                         $edit[ROLE] = $_SESSION["rolesignup_pass_role"];
  45.                 }
  46.                 if($_SESSION["rolesignup_pass_back"]) {
  47.                         $edit["back"] = $_SESSION["rolesignup_pass_back"];
  48.                 }
  49.                 unset($_SESSION["rolesignup_pass_role"]);
  50.                 unset($_SESSION["rolesignup_pass_back"]);
  51.                 // =============================================================
  52.            
  53.                         $roles = user_roles(1, 'register for role');
  54.                         $rids = array_keys($roles);
  55.                         if(!isset($edit[ROLE]) || !in_array($edit[ROLE], $rids) || $edit["back"]) {
  56.                                 if(isset($edit[ROLE]) && in_array($edit[ROLE], $rids)) {
  57.                                         $rid = $edit[ROLE];
  58.                                 } else {
  59.                                         $rid = $rids[0];
  60.                                 }
  61.                                 $form = array();
  62.                                 $form[ROLE] = array(
  63.                                         "#type" => "select"
  64.                                         ,"#title" => "Please select your role below"
  65.                                         ,"#options" => $roles
  66.                                         ,"#default_value" => $rid
  67.                                         ,"#description" => "roles define the behaviour of your account."
  68.                                         ,"#required" => TRUE
  69.                                 );
  70.                                 $form["next"] = array(
  71.                                         "#type" => "submit"
  72.                                         ,"#submit" => array("rolesignup_next")
  73.                                         ,"#value" => "Next"
  74.                                 );
  75.                                 return $form;
  76.                         } else {
  77.                                 $rolename = $roles[$edit[ROLE]];
  78.                                 $form = array();
  79.                                 $form["#prefix"] = "<p class='messages role_select'>You are registering for the '".ucwords(strtolower($rolename))."' Role.<br/></p>";
  80.                                 $form[ROLE] = array(
  81.                                         "#type" => "hidden"
  82.                                         ,"#value" => $edit[ROLE]
  83.                                 );
  84.                                 $form["back"] = array(
  85.                                         "#type" => "submit"
  86.                                         ,"#submit" => array("rolesignup_back")
  87.                                         ,"#value" => "Change Role"
  88.                                 );
  89.                         }
  90.                         $form["#cache"] = FALSE;
  91.                         return $form;
  92.             }
  93.     break;
  94.     case "insert":
  95.             $roles = user_roles(1,'register for role');
  96.             if ($roles[$edit[ROLE]]) {
  97.                     if(!isset($edit["roles"]) || !is_array($edit["roles"])) {
  98.                         $edit["roles"] = array($edit[ROLE] => $roles[$edit[ROLE]]);
  99.                     } else {
  100.                         $edit["roles"][$edit[ROLE]] = $roles[$edit[ROLE]];
  101.                     }
  102.             }
  103.         break;
  104.   }
  105. }
  106.  
  107. function rolesignup_form_alter(&$form, $form_state, $form_id) {
  108.         switch($form_id) {
  109.   case "user_register":
  110.                 $roles = user_roles(1, 'register for role');
  111.                 $rids = array_keys($roles);
  112.                 if(!isset($form_state["values"][ROLE]) || !in_array($form_state["values"][ROLE], $rids) || $form_state["values"]["back"] ) {
  113.                         /* Hide all the form elements */
  114.                         $form["submit"] = NULL;
  115.                         $form["account"] = NULL;
  116.                         $form["#validate"] = array("rolesignup_user_validate_wrapper");
  117.                 }
  118.     break;
  119.  
  120.   case "user_admin_role":
  121.     global $user;
  122.     module_load_include('inc', 'node', 'node.pages');
  123.     /* Initialize settings: copied from node.pages.inc */
  124.     $node = array('uid' => $user->uid, 'name' => (isset($user->name) ? $user->name : ''), 'type' => 'rolenode', 'language' => '');
  125.     $node_form = rolenode_form($node);
  126.  
  127.     foreach($node_form as $key => $value) {
  128.       if($key == "submit" || $key == "delete") {
  129.         continue;
  130.       }
  131.       $form[$key] = $value;
  132.     }
  133.     $form["submit"]["#weight"] = 111;
  134.     $form["delete"]["#weight"] = 112;
  135.     $form["#submit"][] = 'rolenode_submit_wrapper';
  136.     $form["#validate"][] = 'rolenode_validate_wrapper';
  137.     break;
  138.         }
  139. }
  140.  
  141. function rolenode_validate_wrapper($form, &$form_state) {
  142.   /* Note: the node validation may not be right :( */
  143.   unset($form->name);
  144.   $name = $form_state["values"]["name"];
  145.   unset($form_state["values"]["name"]);
  146.   module_load_include('inc', 'node', 'node.pages');
  147.   node_form_validate($form, $form_state);
  148.   $form_state["values"]["name"] = $name;
  149. }
  150.  
  151. function rolenode_submit_wrapper($form, &$form_state) {
  152.   global $user;
  153.   unset($form->name);
  154.   $name = $form_state["values"]["name"];
  155.   unset($form_state["values"]["name"]);
  156.   module_load_include('inc', 'node', 'node.pages');
  157.   switch($form_state["values"]["op"]) {
  158.   case t('Save role'):
  159.     $nid = rolenode_get_by_role($form_state["values"]["rid"]);
  160.     if($nid) {
  161.       $node = node_load($nid);
  162.     }
  163.   case t('Add role'):
  164.     if(!$node) {
  165.       if(!$form_state['values']['rid']) {
  166.         $form_state['values']['rid'] = lastinsertid;
  167.       }
  168.       $node = array('uid' => $user->uid, 'name' => (isset($user->name) ? $user->name : ''), 'type' => 'rolenode', 'language' => '', $node->rid = $form_state["values"]["rid"]);
  169.     }
  170.     drupal_execute('rolenode_node_form', $form_state, $node);
  171.     break;
  172.   case t('Delete role'):
  173.     $nid = rolenode_get_by_role($form_state["values"]["rid"]);
  174.     node_delete($nid);
  175.     break;
  176.   }
  177.   $form_state["values"]["name"] = $name;
  178. }
  179.  
  180. function rolesignup_user_validate_wrapper($form, &$form_state) {
  181.         $roles = user_roles(1, 'register for role');
  182.         $rids = array_keys($roles);
  183.         if($form_state["values"]["op"] == "Next"){
  184.                 if(!isset($form_state["values"][ROLE]) || !in_array($form_state["values"][ROLE], $rids)) {
  185.                         form_set_error(ROLE, "Role not set");
  186.                 }
  187.         } else if($form_state["values"]["op"] == "Change Role") {
  188.                 // FIXME remove all errors ..
  189.                 form_get_errors();
  190.         } else {
  191.                 form_set_error("Unreachable statement ..");
  192.         }
  193. }
  194.  
  195. function rolesignup_back($form, &$form_state) {
  196.         // FIXME Some how the "back" is not being passed while rebuild :(
  197.         // $form_state["values"]["back"] = TRUE;
  198.         $_SESSION["rolesignup_pass_back"] = $form_state["values"]["back"];
  199.         $form_state["rebuild"] = TRUE;
  200. }
  201.  
  202. function rolesignup_next($form, &$form_state) {
  203.         // FIXME Some how the ROLE is not being passed while rebuild :(
  204.         // $form_state["values"][ROLE]
  205.         $_SESSION["rolesignup_pass_role"] = $form_state["values"][ROLE];
  206.         $form_state["rebuild"] = TRUE;
  207. }