Obligatoriedad de campos

17/03/2016

En este snippet vamos a marcar los campos obligatorios presentes en un formulario como no obligatorios y será bajo la condición de que el usuario actual tenga un rol de administrador. Con este snippet también se podría realizar una operación inversa. Por ejemplo, no habilitar ningún campo como obligatorio y fijar una condición para marcar dichos campos como obligatorio.

/**
 * Implements hook_form_alter().
 */
function MY_MODULE_form_alter(&$form, &$form_state, $form_id) {
  switch ($form_id) {
    case 'user_profile_form':
      global $user;
      if (array_intersect(array('adminRol1', 'adminRol2'), $user->roles)) {
        $form['#after_build'][] = 'callback_set_fields_not_required';
      }
      break;
  }
}

/**
 * Mark all the fields in a form (which are required) as not required.
 *
 * Callback for MY_MODULE_form_alter().
 *
 * @param $element
 *   Form to be processed.
 *
 * @return mixed
 *   Form with fields not required.
 *
 * @ingroup callbacks
 */
function callback_set_fields_not_required($element) {
  foreach (element_children($element) as $name) {
    $element[$name][LANGUAGE_NONE]['#required'] = FALSE;
    $element[$name][LANGUAGE_NONE][0]['#required'] = FALSE;
    $element[$name][LANGUAGE_NONE][0]['value']['#required'] = FALSE;
  }

  return $element;
}