<?php # vim: set filetype=php expandtab tabstop=2 shiftwidth=2 autoindent smartindent:
/* $Id: rolesignup.module,v 1.2.4.1 2007/01/20 21:49:48 sym Exp $ */
define("ROLE",
"role_signup_role");
/********************************************************************
* Drupal Hooks
********************************************************************/
/**
* Implementation of module_enable()
*/
function rolesignup_enable() {
}
/**
* Implementation of module_disable()
*/
function rolesignup_disable() {
}
/**
* Implementation of hook_perm()
*/
function rolesignup_perm() {
return array('register for role');
}
/**
* Implementation of hook_user()
*/
function rolesignup_user($op, &$edit, &$account, $category = NULL) {
switch ($op) {
case 'register':
if(!$category || $category == "account") {
// Here I am tring to retain the _submit hook values ..
// =============================================================
if($_SESSION["rolesignup_pass_role"]) {
$edit[ROLE] = $_SESSION["rolesignup_pass_role"];
}
if($_SESSION["rolesignup_pass_back"]) {
$edit["back"] = $_SESSION["rolesignup_pass_back"];
}
unset($_SESSION["rolesignup_pass_role"]);
unset($_SESSION["rolesignup_pass_back"]);
// =============================================================
if(!
isset($edit[ROLE
]) || !
in_array($edit[ROLE
],
$rids) ||
$edit["back"]) {
$rid = $edit[ROLE];
} else {
$rid = $rids[0];
}
"#type" => "select"
,"#title" => "Please select your role below"
,"#options" => $roles
,"#default_value" => $rid
,"#description" => "roles define the behaviour of your account."
,"#required" => TRUE
);
"#type" => "submit"
,
"#submit" =>
array("rolesignup_next")
,"#value" => "Next"
);
return $form;
} else {
$rolename = $roles[$edit[ROLE]];
$form["#prefix"] =
"<p class='messages role_select'>You are registering for the '".
ucwords(strtolower($rolename)).
"' Role.<br/></p>";
"#type" => "hidden"
,"#value" => $edit[ROLE]
);
"#type" => "submit"
,
"#submit" =>
array("rolesignup_back")
,"#value" => "Change Role"
);
}
$form["#cache"] = FALSE;
return $form;
}
break;
case "insert":
if ($roles[$edit[ROLE]]) {
$edit["roles"] =
array($edit[ROLE
] =>
$roles[$edit[ROLE
]]);
} else {
$edit["roles"][$edit[ROLE]] = $roles[$edit[ROLE]];
}
}
break;
}
}
function rolesignup_form_alter(&$form, $form_state, $form_id) {
switch($form_id) {
case "user_register":
if(!
isset($form_state["values"][ROLE
]) || !
in_array($form_state["values"][ROLE
],
$rids) ||
$form_state["values"]["back"] ) {
/* Hide all the form elements */
$form["submit"] = NULL;
$form["account"] = NULL;
$form["#validate"] =
array("rolesignup_user_validate_wrapper");
}
break;
case "user_admin_role":
/* Initialize settings: copied from node.pages.inc */
$node =
array('uid' =>
$user->
uid,
'name' =>
(isset($user->
name) ?
$user->
name :
''),
'type' =>
'rolenode',
'language' =>
'');
$node_form = rolenode_form($node);
foreach($node_form as $key => $value) {
if($key == "submit" || $key == "delete") {
continue;
}
$form[$key] = $value;
}
$form["submit"]["#weight"] = 111;
$form["delete"]["#weight"] = 112;
$form["#submit"][] = 'rolenode_submit_wrapper';
$form["#validate"][] = 'rolenode_validate_wrapper';
break;
}
}
function rolenode_validate_wrapper($form, &$form_state) {
/* Note: the node validation may not be right :( */
$name = $form_state["values"]["name"];
unset($form_state["values"]["name"]);
$form_state["values"]["name"] = $name;
}
function rolenode_submit_wrapper($form, &$form_state) {
$name = $form_state["values"]["name"];
unset($form_state["values"]["name"]);
switch($form_state["values"]["op"]) {
$nid = rolenode_get_by_role($form_state["values"]["rid"]);
if($nid) {
}
if(!$node) {
if(!$form_state['values']['rid']) {
$form_state['values']['rid'] = lastinsertid;
}
$node =
array('uid' =>
$user->
uid,
'name' =>
(isset($user->
name) ?
$user->
name :
''),
'type' =>
'rolenode',
'language' =>
'',
$node->
rid =
$form_state["values"]["rid"]);
}
break;
$nid = rolenode_get_by_role($form_state["values"]["rid"]);
break;
}
$form_state["values"]["name"] = $name;
}
function rolesignup_user_validate_wrapper($form, &$form_state) {
if($form_state["values"]["op"] == "Next"){
if(!
isset($form_state["values"][ROLE
]) || !
in_array($form_state["values"][ROLE
],
$rids)) {
}
} else if($form_state["values"]["op"] == "Change Role") {
// FIXME remove all errors ..
} else {
}
}
function rolesignup_back($form, &$form_state) {
// FIXME Some how the "back" is not being passed while rebuild :(
// $form_state["values"]["back"] = TRUE;
$_SESSION["rolesignup_pass_back"] = $form_state["values"]["back"];
$form_state["rebuild"] = TRUE;
}
function rolesignup_next($form, &$form_state) {
// FIXME Some how the ROLE is not being passed while rebuild :(
// $form_state["values"][ROLE]
$_SESSION["rolesignup_pass_role"] = $form_state["values"][ROLE];
$form_state["rebuild"] = TRUE;
}