<?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("ROLESIGNUP_ROLE",
"role_signup_role");
/********************************************************************
* Drupal Hooks
********************************************************************/
/**
* Implementation of module_enable()
*/
function rolesignup_enable() {
}
/**
* Implementation of module_disable()
*/
function rolesignup_disable() {
}
function rolesignup_menu() {
'title' => 'Sign Up'
,'page callback' => 'rolesignup_main_page'
,'type' => 'MENU_CALLBACK'
,'access callback' => TRUE
,'file' => 'rolesignup.pages.inc'
)
);
}
/**
* Implementation of hook_user()
*/
function rolesignup_user($op, &$edit, &$account, $category = NULL) {
switch ($op) {
case 'register':
if(!$category || $category == "account") {
$rid =
arg(2);
/* user/register/%role */
/* check if we have a valid rid */
$roles = rolesignup_signup_roles();
break;
}
/* show role information */
$role_node->hide_create_link = TRUE; /* A trick to hide the role create link */
$form["#prefix"] = $output;
/* keep the rid */
$form[ROLESIGNUP_ROLE
] =
array(
"#type" => "value"
,"#value" => $rid
);
return $form;
}
break;
case "insert":
$roles = rolesignup_signup_roles();
if (!$roles[$edit[ROLESIGNUP_ROLE]]) {
break;
}
$edit["roles"] =
array();
}
$node =
node_load($roles[$edit[ROLESIGNUP_ROLE
]]);
$edit["roles"][$edit[ROLESIGNUP_ROLE]] = $node->title;
break;
}
}
function rolesignup_form_alter(&$form, $form_state, $form_id) {
switch($form_id) {
case "user_admin_role":
/* Initialize settings: copied from node.pages.inc */
$node = get_rolenode($form, $form_state);
$node_form = rolenode_form($node);
foreach($node_form as $key => $value) {
if($key == "submit" || $key == "delete" || $key == 'rid') {
continue;
}
$form[$key] = $value;
}
$form["submit"]["#weight"] = 111;
$form["delete"]["#weight"] = 112;
$form["#submit"][] = 'rolenode_submit_wrapper';
$form["#validate"][] = 'rolenode_validate_wrapper';
break;
}
}
function get_rolenode(&$form, &$form_state) {
if(
($form_state["values"]["rid"] && $nid = rolenode_get_by_role($form_state["values"]["rid"]))
||
($form['rid']['#value'] && $nid = rolenode_get_by_role($form["rid"]['#value']))
) {
} else {
$node =
array('uid' =>
$user->
uid,
'name' =>
(isset($user->
name) ?
$user->
name :
''),
'type' =>
'rolenode',
'language' =>
'',
"rid" =>
$form_state["values"]["rid"]);
}
return $node;
}
function rolenode_validate_wrapper($form, $form_state) {
/* Note: the node validation may not be right :( */
unset($form_state["values"]["name"]);
}
function rolenode_submit_wrapper($form, $form_state) {
unset($form_state["values"]["name"]);
switch($form_state["values"]["op"]) {
if(!$form_state['values']['rid']) {
/* IMPORTANT: This will only work on role creation step .. */
}
$node = get_rolenode($form, $form_state);
$form_state["values"]["op"] = t("Save");
break;
$nid = rolenode_get_by_role($form_state["values"]["rid"]);
break;
}
}
function rolesignup_signup_roles() {
return $signuproles;
}
$result =
db_query("SELECT DISTINCT rid, nid FROM {rolenode} WHERE signup = 1 ORDER BY weight ");
$signuproles[$node->rid] = $node->nid;
}
return $signuproles;
}