'Whywebs',
'description' => 'Whywebs Registration',
'weight' => -99,
'page callback' => 'system_admin_menu_block_page',
'access arguments' => array('access administration pages'),
'file' => 'system.admin.inc',
'file path' => drupal_get_path('module', 'system'),
'position' => 'left',
);
// Settings for authorization.
$menu['admin/config/whywebs/redirect'] = array(
'title' => 'Whywebs widget options',
'description' => 'Whywebs Registration module redirect after login.',
'page callback' => 'drupal_get_form',
'page arguments' => array('whywebs_multistep_registration_settings_form'),
'type' => MENU_NORMAL_ITEM,
'access arguments' => array('administer site configuration'),
);
// Settings for authorization.
$items['403redirect'] = array(
'page callback' => 'whywebs_multistep_registration_403_redirect',
'access callback' => 'whywebs_multistep_registration_403_access',
'type' => MENU_CALLBACK,
);
return $menu;
}
/**
* Whywebs_multistep_registration_settings_form()
*
* @return form
*
* System_settings_form($form)
*/
function whywebs_multistep_registration_settings_form() {
// Set a default text_format form field value.
$default_var = array('value' => '', 'format' => NULL);
// Define widget settings.
$form['whywebs'] = array(
'#type' => 'fieldset',
'#title' => t('Whywebs Login/Logout and registration widget options'),
'#weight' => 0,
);
$form['whywebs']['whywebs_after_login_redirect'] = array(
'#type' => 'textfield',
'#title' => t('Whywebs redirect after login'),
'#description' => t('Whywebs redirect after login.'),
'#default_value' => variable_get('whywebs_after_login_redirect', FALSE),
'#size' => 60,
'#maxlength' => 255,
);
$form['whywebs']['whywebs_after_logout_redirect'] = array(
'#type' => 'textfield',
'#title' => t('Whywebs redirect after logout'),
'#description' => t('Whywebs redirect after logout.'),
'#default_value' => variable_get('whywebs_after_logout_redirect', FALSE),
'#size' => 60,
'#maxlength' => 255,
);
$form['whywebs']['whywebs_registration_password_strength'] = array(
'#type' => 'checkbox',
'#title' => t('Show the password strength'),
'#description' => t('Do you like to Show the password strength in registration form'),
'#default_value' => variable_get('whywebs_registration_password_strength', FALSE),
'#options' => array(1 => t('Show'), 0 => t('Donnot show')),
);
return system_settings_form($form);
}
/**
* Whywebs_multistep_registration_403_redirect()
*
* Redirect 403
*/
function whywebs_multistep_registration_403_redirect() {
header('Location: ' . url(variable_get('whywebs_after_logout_redirect', FALSE), array('absolute' => TRUE)), TRUE, 302);
}
/**
* Whywebs_multistep_registration_403_access()
*
* @return bool
*
* true or false
*/
function whywebs_multistep_registration_403_access() {
return TRUE;
}
/**
* Implements hook_form_FORM_ID_alter().
*/
function whywebs_multistep_registration_form_user_register_form_alter(&$form, &$form_state) {
// Make this a multi-step form.
if (!empty($form_state['step']) && $form_state['step'] == 2) {
whywebs_multistep_registration_register_alter_page_two($form, $form_state);
}
else {
// Otherwise we build page 1.
whywebs_multistep_registration_register_alter_page_one($form, $form_state);
}
}
/**
* Implement form_alter()
*/
function whywebs_multistep_registration_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'user_login_block' || $form_id == 'user_login') {
if ($op == 'login') {
$form['#action'] = whywebs_multistep_registration_user_login();
}
}
}
/**
* Implements hook_form_FORM_ID_user().
*/
function whywebs_multistep_registration_user($op, &$edit, &$account, $category = NULL) {
global $user;
switch ($op) {
case 'logout':
drupal_goto(variable_get('whywebs_after_logout_redirect', FALSE));
break;
}
}
/**
* Hook_permission.
*
* @return array
*
* Return a new admin role that can be used later
*/
function whywebs_multistep_registration_permission() {
return array(
'administer my multiple steps' => array(
'title' => t('Sdminister my multiple steps'),
'description' => t('Perform administration tasks multiple steps'),
),
);
}
/**
* Implements hook_form_FORM_ID_user_login().
*/
function whywebs_multistep_registration_user_login() {
// We want to redirect user on login.
drupal_goto(variable_get('whywebs_after_login_redirect', FALSE));
}
/**
* Form alter - Step 1 of user registration.
*/
function whywebs_multistep_registration_register_alter_page_one(&$form, &$form_state) {
// Set the step.
$form_state['step'] = 1;
// Add text for step 1.
$form['step'] = array(
'#markup' => '' . t('Step 1 of 2: Account information') . '',
'#weight' => -10,
);
// Hide the information for step 2.
$form['field_user_picture']['#access'] = FALSE;
$form['field_i_am_a']['#access'] = FALSE;
$form['field_user_type']['#access'] = FALSE;
$form['account']['name']['#access'] = FALSE;
$form['account']['pass'] = FALSE;
// Page 1 system reg fields.
$form['account']['mail']['#default_value'] = !empty($form_state['values']['mail']) ? $form_state['values']['mail'] : '';
$form['account']['mail']['#description'] = '';
// Fields page one.
$form['field_first_name'][['und']][0]['value']['#default_value'] = !empty($form_state['values']['field_first_name'][['und']][0]['value']) ? $form_state['values']['field_first_name'][['und']][0]['value'] : '';
$form['field_last_name'][['und']][0]['value']['#default_value'] = !empty($form_state['values']['field_last_name'][['und']][0]['value']) ? $form_state['values']['field_last_name'][['und']][0]['value'] : '';
// Add a next button.
$form['actions']['next'] = array(
'#type' => 'submit',
'#value' => 'Next >>',
'#submit' => array('whywebs_multistep_registration_register_next'),
);
// Remove the 'Create new account' button from step 1.
unset($form['actions']['submit']);
}
/**
* Form alter - Step 2 of user registration.
*/
function whywebs_multistep_registration_register_alter_page_two(&$form, &$form_state) {
// Add text for step 2.
$form['step'] = array(
'#markup' => '' . t('Step 2 of 2') . '',
'#weight' => -10,
);
// Hide the fields completed on step 1.
// page 1 system reg fields.
$form['account']['mail']['#default_value'] = !empty($form_state['values']['mail']) ? $form_state['values']['mail'] : '';
// Fields from page one.
$form['field_first_name'][['und']][0]['value']['#default_value'] = !empty($form_state['values']['field_first_name'][['und']][0]['value']) ? $form_state['values']['field_first_name'][['und']][0]['value'] : '';
$form['field_last_name'][['und']][0]['value']['#default_value'] = !empty($form_state['values']['field_last_name'][['und']][0]['value']) ? $form_state['values']['field_last_name'][['und']][0]['value'] : '';
$form['account']['name']['#type'] = 'hidden';
$form['account']['name']['#value'] = $form_state['values']['field_first_name'][['und']][0]['value'] . ' ' . $form_state['values']['field_last_name'][['und']][0]['value'];
// Hide the fields completed on step 1.
$form['uname'] = array(
'#markup' => $form_state['values']['mail'],
'#value' => $form_state['values']['mail'],
'#prefix' => '
Your Username is ',
'#required' => TRUE,
'#attributes' => array('class' => array('username')),
'#default_value' => $form_state['values']['field_first_name'][['und']][0]['value'] . ' ' . $form_state['values']['field_last_name'][['und']][0]['value'],
'#access' => TRUE,
'#weight' => -9,
);
$form['account']['mail']['#access'] = FALSE;
$form['field_first_name']['#access'] = FALSE;
$form['field_last_name']['#access'] = FALSE;
$form['account']['pass']['#access'] = TRUE;
$fields = array(
'field_i_am_a',
'realname',
);
foreach ($fields as $field) {
$form[$field][['und']]['#default_value'] = !empty($form_state['values'][$field]) ? $form_state['values'][$field] : '';
}
// Extra info.
$form['signature_settings']['signature'] = array(
'#type' => 'text_format',
'#default_value' => 'filtered_html',
'#format' => 'filtered_html',
);
$roles = array_map('check_plain', user_roles(TRUE));
// The disabled checkbox subelement for the 'authenticated user' role
// must be generated separately and added to the checkboxes element,
// because of a limitation in Form API not supporting a single disabled
// checkbox within a set of checkboxes.
$checkbox_authenticated = array(
'#type' => 'checkbox',
'#title' => $roles[DRUPAL_AUTHENTICATED_RID],
'#default_value' => TRUE,
'#disabled' => TRUE,
);
unset($roles[DRUPAL_AUTHENTICATED_RID]);
$form['account']['roles'] = array(
'#type' => 'checkboxes',
'#title' => t('Roles'),
'#default_value' => (!$register && !empty($account->roles) ? array_keys(array_filter($account->roles)) : array()),
'#options' => $roles,
'#access' => $roles && user_access('administer permissions'),
DRUPAL_AUTHENTICATED_RID => $checkbox_authenticated,
);
// Add a back button.
$form['actions']['back'] = array(
'#type' => 'submit',
'#value' => t('<< Back'),
'#submit' => array('whywebs_multistep_registration_register_back'),
'#limit_validation_errors' => array(),
);
// Adjust the submit button to come last.
$form['actions']['submit']['#weight'] = 100;
// Add our own validation handler.
$form['actions']['submit']['#validate'] = array('whywebs_multistep_registration_register_validate');
// Replace default submit value.
$form['actions']['submit']['#value'] = t('Join now');
// Add an additional submit handler to the whole form.
$form['#submit'][] = 'whywebs_multistep_registration_register_submit';
}
/**
* Validate handler.
*/
function whywebs_multistep_registration_register_validate(&$form, &$form_state) {
if ($form['#user_category'] == 'account' || $form['#user_category'] == 'register') {
$account = $form['#user'];
// Validate new or changing username.
if (isset($form_state['values']['name'])) {
if ($error = user_validate_name($form_state['values']['name'])) {
form_set_error('name', $error);
}
elseif ((bool) db_select('users')->fields('users', array('uid'))->condition('uid', $account->uid, '<>')->condition('name', db_like($form_state['values']['name']), 'LIKE')->range(0, 1)->execute()->fetchField()) {
form_set_error('name', t('The name %name is already taken.', array('%name' => $form_state['values']['name'])));
}
}
// Trim whitespace from mail, to prevent confusing 'e-mail not valid'
// warnings often caused by cutting and pasting.
$mail = trim($form_state['values']['mail']);
form_set_value($form['account']['mail'], $mail, $form_state);
// Validate the e-mail address, and check if it is taken by an
// existing user.
if ($error = user_validate_mail($form_state['values']['mail'])) {
form_set_error('mail', $error);
}
elseif ((bool) db_select('users')->fields('users', array('uid'))->condition('uid', $account->uid, '<>')->condition('mail', db_like($form_state['values']['mail']), 'LIKE')->range(0, 1)->execute()->fetchField()) {
// Format error message dependent on whether the user is logged in or not.
if ($GLOBALS['user']->uid) {
form_set_error('mail', t('The e-mail address %email is already taken.', array('%email' => $form_state['values']['mail'])));
}
else {
form_set_error('mail', t('The e-mail address %email is already registered. Have you forgotten your password?', array('%email' => $form_state['values']['mail'], '@password' => url('user/password'))));
}
}
// Make sure the signature isn't longer than the size of the database field.
// Signatures are disabled by default, so make sure it exists first.
if (isset($form_state['values']['signature'])) {
// Move text format for user signature into 'signature_format'.
$form_state['values']['signature_format'] = $form_state['values']['signature']['format'];
// Move text value for user signature into 'signature'.
$form_state['values']['signature'] = $form_state['values']['signature']['value'];
$user_schema = drupal_get_schema('users');
if (drupal_strlen($form_state['values']['signature']) > $user_schema['fields']['signature']['length']) {
form_set_error('signature', t('The signature is too long: it must be %max characters or less.', array('%max' => $user_schema['fields']['signature']['length'])));
}
}
}
}
/**
* Submit handler for user registration form.
*
* Namespace collision demands underscore.
*/
function whywebs_multistep_registration_register_submit(&$form, &$form_state) {
if ($form_state['values']['field_i_am_a'] == '3' || $form_state['values']['field_i_am_a'] == 'tutor' || $form_state['values']['field_i_am_a'] == 'Tutor') {
$role = user_role_load_by_name("Tutor");
}
if ($form_state['values']['field_i_am_a'] == '2' || $form_state['values']['field_i_am_a'] == 'student' || $form_state['values']['field_i_am_a'] == 'Student') {
$role = user_role_load_by_name("Student");
}
user_multiple_role_edit(array($user->uid), 'add_role', $role->rid);
}
/**
* Implements hook_element_info_alter().
*/
function whywebs_multistep_registration_element_info_alter(&$types) {
if (isset($types['password_confirm']['#process']) && (($position = array_search('user_form_process_password_confirm', $types['password_confirm']['#process'])) !== FALSE)) {
if (variable_get('whywebs_registration_password_strength', FALSE) != 1) {
unset($types['password_confirm']['#process'][$position]);
}
}
}
/**
* Submit handler for next button.
*
* Capture the values from page one and store them away so they can be used
* at final submit time.
*/
function whywebs_multistep_registration_register_next($form, &$form_state) {
// Save the page 1 values.
$form_state['page_values'][1] = $form_state['values'];
// Load the page 2 values.
if (!empty($form_state['page_values'][2])) {
$form_state['values'] = $form_state['page_values'][2];
}
// Set the step.
$form_state['step'] = 2;
// Rebuild the form.
$form_state['rebuild'] = TRUE;
}
/**
* Submit handler for back button.
*
* Since #limit_validation_errors = array() is set, values from page 2
* will be discarded.
*/
function whywebs_multistep_registration_register_back($form, &$form_state) {
// Load the page 1 values.
$form_state['values'] = $form_state['page_values'][1];
// Set the step.
$form_state['step'] = 1;
// Rebuild the form.
$form_state['rebuild'] = TRUE;
}