You are here

function required_by_role_form_field_ui_field_edit_form_alter in Required by role 7.2

Same name and namespace in other branches
  1. 7 required_by_role.module \required_by_role_form_field_ui_field_edit_form_alter()

Implements hook_form_FORM_ID_alter().

File

./required_by_role.module, line 72
Allows certain user roles to be exempt from required fields

Code

function required_by_role_form_field_ui_field_edit_form_alter(&$form, $form_state) {
  $form['instance']['required']['#access'] = FALSE;
  $field_name = $form['#field']['field_name'];

  // Default value needs always to be NOT required.
  $default_value_widget =& $form['instance']['default_value_widget'][$field_name][LANGUAGE_NONE];
  if (isset($default_value_widget[0]['#required'])) {
    $default_value_widget[0]['#required'] = FALSE;
    if (isset($default_value_widget[0]['value']['#required'])) {
      $default_value_widget[0]['value']['#required'] = FALSE;
    }
  }
  else {
    $default_value_widget['#required'] = FALSE;
  }
  if (!empty($form_state['values']['instance']['settings']['required_plugin'])) {
    $plugin_id = $form_state['values']['instance']['settings']['required_plugin'];
  }
  else {
    $plugin_id = $form['#instance']['settings']['required_plugin'] ? $form['#instance']['settings']['required_plugin'] : 'core';
  }
  $plugins_options = required_by_role_get_plugins_as_options();
  if (empty($plugins_options)) {
    $form['message'] = array(
      '#markup' => t('Sorry no required plugins available in the system.'),
    );
  }
  $form['instance']['settings']['required_plugin'] = array(
    '#type' => 'radios',
    '#title' => t('Please choose the required strategy.'),
    '#options' => $plugins_options,
    '#limit_validation_errors' => array(),
    '#default_value' => $plugin_id,
    '#weight' => $form['instance']['required']['#weight'] - 1,
    '#ajax' => array(
      'callback' => 'require_by_role_element_ajax_callback',
      'wrapper' => 'required-ajax-wrapper',
      'effect' => 'fade',
      'speed' => 'fast',
    ),
    '#parents' => array(
      'instance',
      'settings',
      'required_plugin',
    ),
  );
  $plugin = _required_by_role_get_instance($plugin_id);
  $settings = $form['#instance']['settings'];
  $required_plugin = $settings['required_plugin'];
  $required_plugin_options = $settings['required_plugin_options'];

  // If the plugin have changed make sure the options are empty.
  if ($plugin_id != $required_plugin) {
    $required_plugin_options = array();
  }
  $form['instance']['settings']['required_plugin_options'] = $plugin
    ->form($required_plugin_options);
  $form['instance']['settings']['required_plugin_options']['#weight'] = $form['instance']['settings']['required_plugin']['#weight'] + 1;
}