You are here

function user_readonly_admin_settings in User Read-Only 7

Same name and namespace in other branches
  1. 5 user_readonly.module \user_readonly_admin_settings()
  2. 6 user_readonly.module \user_readonly_admin_settings()

Configuration form for setting default restrictions.

Return value

array

1 string reference to 'user_readonly_admin_settings'
user_readonly_menu in ./user_readonly.module
Implements hook_menu().

File

./user_readonly.module, line 65
This module provides restrictions on user account/profile fields.

Code

function user_readonly_admin_settings() {
  global $user;

  // Build the list of fields that we can configure from user_profile_form().
  $fields = array();
  $form = array();
  $form_state = array();
  $account = user_load($user->uid);
  module_load_include('inc', 'user', 'user.pages');
  $user_edit = user_profile_form($form, $form_state, $account);
  foreach (element_children($user_edit) as $element_name) {
    $element = $user_edit[$element_name];
    foreach (element_children($element) as $element_value_name) {
      if (isset($element[$element_value_name][0])) {
        $element_values = $element[$element_value_name][0];
        $element_value_name = $element[$element_value_name][0]["#field_name"];
        $fields[$element_value_name] = $element_value_name;
      }
      elseif (isset($element[$element_value_name]["#field_name"])) {
        $element_values = $element[$element_value_name];
        $element_value_name = $element[$element_value_name]["#field_name"];
        $fields[$element_value_name] = $element_value_name;
      }
      else {
        $element_values = $element[$element_value_name];
        $fields[$element_value_name] = $element_value_name;
      }
    }
  }

  // Tell Drupal to keep the tree structure of the form so we can save values per form element.
  $form = array(
    '#tree' => TRUE,
  );
  $settings = _user_readonly_get();
  $roles = user_roles(TRUE);
  $modes = array(
    'deny' => t('Only <strong>DENY</strong> changes to users with these roles.'),
    'allow' => t('Only <strong>ALLOW</strong> changes to users with these roles.'),
  );
  $actions = array(
    'disable' => t('Disable the fields.'),
    'hide' => t('Hide the fields.'),
  );

  // Create the default settings form.
  if (empty($settings['user_readonly']['mode'])) {
    $settings['user_readonly']['mode'] = 0;
  }
  if (empty($settings['user_readonly']['action'])) {
    $settings['user_readonly']['action'] = 0;
  }
  $form['user_readonly'] = array(
    '#title' => t('Default settings for all fields'),
    '#type' => 'fieldset',
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
  );
  $form['user_readonly']['mode'] = array(
    '#type' => 'radios',
    '#title' => t('Restrictions mode'),
    '#default_value' => $settings['user_readonly']['mode'],
    '#options' => $modes,
    '#description' => t('Define the restriction rules. ' . 'To deny all changes, choose ALLOW, but do not select any fields below.'),
  );
  $form['user_readonly']['roles'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Roles'),
    '#default_value' => $settings['user_readonly']['roles'],
    '#options' => $roles,
  );
  $form['user_readonly']['action'] = array(
    '#type' => 'radios',
    '#title' => t('When restrictions apply'),
    '#default_value' => $settings['user_readonly']['action'],
    '#options' => $actions,
    '#description' => t('Disabling fields greys them out but users can still see the fields. ' . 'Hiding fields removes them from the form. ' . 'This option is independent from the above restriction rule setting.'),
  );
  $modes['default'] = t('Use the default role settings.');
  $actions['default'] = t('Use the default settings.');

  // Create fieldsets for each identified profile element
  foreach ($fields as $fid => $fname) {
    $is_collapsed = TRUE;
    if (!empty($settings[$fid]['mode']) && $settings[$fid]['mode'] != 'default' || !empty($settings[$fid]['action']) && $settings[$fid]['action'] != 'default') {
      $is_collapsed = FALSE;
    }
    if (empty($settings[$fid]['mode'])) {
      $settings[$fid]['mode'] = 'default';
    }
    if (empty($settings[$fid]['action'])) {
      $settings[$fid]['action'] = 'default';
    }
    if (empty($settings[$fid]['roles'])) {
      $settings[$fid]['roles'] = array();
    }
    $form[$fid] = array(
      '#title' => $fname,
      '#type' => 'fieldset',
      '#collapsible' => TRUE,
      '#collapsed' => $is_collapsed,
    );
    $form[$fid]['mode'] = array(
      '#type' => 'radios',
      '#title' => t('Restrictions mode'),
      '#default_value' => $settings[$fid]['mode'],
      '#options' => $modes,
      '#description' => t('Define the restriction rules. ' . 'To deny all changes, choose ALLOW, but do not select any fields below.'),
    );
    $form[$fid]['roles'] = array(
      '#type' => 'checkboxes',
      '#title' => t('Roles'),
      '#default_value' => $settings[$fid]['roles'],
      '#options' => $roles,
    );
    $form[$fid]['action'] = array(
      '#type' => 'radios',
      '#title' => t('When restrictions apply'),
      '#default_value' => $settings[$fid]['action'],
      '#options' => $actions,
      '#description' => t('Disabling fields greys them out but users can still see the fields. ' . 'Hiding fields removes them from the form. ' . 'This option is independent from the above restriction rule setting.'),
    );
  }
  $form['user_readonly_submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save configuration'),
    '#weight' => 3000,
  );

  // We do not use system_settings_form() because the config is stored as an array of role settings.
  return $form;
}