'. t('Create a new user. A notification e-mail will be sent to the e-mail address specified.') .'
'; } } /** * Implementation of hook_menu(). */ function ucreate_menu() { $items = array(); $items['user/add'] = array( 'page callback' => 'drupal_get_form', 'page arguments' => array('ucreate_user_form'), 'title' => 'Add user', 'description' => 'Add a user to this web site.', 'access arguments' => array('create users'), ); $items['admin/user/ucreate'] = array( 'page callback' => 'drupal_get_form', 'page arguments' => array('ucreate_settings_form'), 'title' => 'U create settings', 'description' => 'Configure default roles for users created by U create module.', 'access arguments' => array('administer site configuration'), ); $items['user/%user/block'] = array( 'page callback' => 'drupal_get_form', 'page arguments' => array('ucreate_block_form', 1, 'block'), 'title' => 'Suspend', 'description' => 'Suspend this user\'s account.', 'access callback' => 'ucreate_access_suspend', 'access arguments' => array('block users', 1, 'block'), 'type' => MENU_LOCAL_TASK, ); $items['user/%user/activate'] = array( 'page callback' => 'drupal_get_form', 'page arguments' => array('ucreate_block_form', 1, 'activate'), 'title' => 'Activate', 'description' => 'Activate this user\'s account.', 'access callback' => 'ucreate_access_suspend', 'access arguments' => array('block users', 1, 'activate'), 'type' => MENU_LOCAL_TASK, ); return $items; } /** * Implementation of hook_perm(). */ function ucreate_perm() { return array('create users', 'block users', 'assign user roles'); } /** * Implementation of hook_user(). */ function ucreate_user($op, &$edit, &$account, $category = NULL) { if ($op == 'login') { // On first login, welcome user and ask to reset password. // @todo: make user form multi step. if ($account->login == 0 && $account->uid) { // Unset destination requests - otherwise drupal_goto does not yield results. unset($_REQUEST['destination']); unset($_REQUEST['edit']['destination']); drupal_set_message(t('Welcome to !site, !name - please change your password', array('!site' => variable_get('site_name', 'Drupal'), '!name' => $account->name)), 'welcome'); drupal_goto('user/'. $account->uid .'/edit', 'destination='. variable_get('site_frontpage', 'node')); } } } /** * Access menu callback for block/activate user tabs */ function ucreate_access_suspend($access_rule, $account, $op) { global $user; if (user_access($access_rule)) { if ($account->uid >= 1) { // Don't provide links if userid is 1 or 0 if ($account->uid != $user->uid) { // User can not block themselves if (($op == 'activate' && $account->status == 0) || ($op == 'block' && $account->status == 1)) { // Only show if action is possible return true; } } } } return false; } /** * Menu callback for settings form. */ function ucreate_settings_form() { $options = user_roles(); unset($options[1]); unset($options[2]); $form['ucreate_default_roles'] = array( '#title' => t('Default roles'), '#description' => t('Roles a new user should be assigned.'), '#type' => 'checkboxes', '#options' => $options, '#default_value' => variable_get('ucreate_default_roles', array()), ); // @todo: personalize e-mail message. return system_settings_form($form); } /** * Break out form for creating users. */ function ucreate_user_form() { $form['name'] = array( '#type' => 'textfield', '#title' => t('User name'), '#required' => TRUE, ); $form['mail'] = array( '#type' => 'textfield', '#title' => t('E-mail'), '#required' => TRUE, ); $form['mail_confirm'] = array( '#type' => 'textfield', '#title' => t('E-mail (confirm)'), '#required' => TRUE, ); if (user_access('assign user roles') || user_access('administer users')) { $options = user_roles(); unset($options[1]); unset($options[2]); $form['roles'] = array( '#title' => t('User roles'), '#type' => 'checkboxes', '#options' => $options, '#default_value' => variable_get('ucreate_default_roles', array()), ); } else { $form['roles'] = array( '#type' => 'value', '#value' => drupal_map_assoc(variable_get('ucreate_default_roles', array())), ); } // The personal welcome message will be added to the top of the mail. // @todo: Ideal would be offering the full notification message for edit // * updated by ajax call back (we shouldn't show tokens to users) // * or in a second step of the form // Both approaches have ramifications for the use of the form in ajaxy popups. $form['welcome_message_body'] = array( '#type' => 'textarea', '#title' => t('Personal welcome message'), '#default_value' => '', '#description' => t('This welcome message will appear at the top of the e-mail notification sent to the new user.') ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Add'), '#weight' => 20, ); return $form; } /** * Validation handler for ucreate_user_form(). */ function ucreate_user_form_validate($form, &$form_state) { if ($account = user_load(array('name' => $form_state['values']['name']))) { $name = user_access('access user profiles') ? l($account->name, 'user/'. $account->uid) : $account->name; form_set_error('name', t('User !name already exists.', array('!name' => $name))); } if ($form_state['values']['mail'] != $form_state['values']['mail_confirm']) { form_set_error('email_confirm', t('E-mail addresses don\'t match')); } else if (user_load(array('mail' => $form_state['values']['mail']))) { form_set_error('mail', t('User with this e-mail address already exists.')); } } /** * Submit handler for ucreate_user_form(). */ function ucreate_user_form_submit($form, &$form_state) { // If user roles were handled through a UI element, process accordingly. // This sucks. See user_save() for why this is necessary. if ($form['roles']['#type'] != 'value') { $rids = array(); foreach ($form_state['values']['roles'] as $rid => $enabled) { if (!empty($enabled)) { $rids[$rid] = $rid; } } $form_state['values']['roles'] = $rids; } ucreate_user_create($form_state['values']); drupal_goto($_GET['q']); } /** * Block user confirm dialog. */ function ucreate_block_form($form, $user, $op) { if ($account = $user) { $path = $_GET['destination'] ? $_GET['destination'] : '