I'm working on a patch for the Login Disable module, and on the settings page, I want to have two mutually exclusive options so that when one is checked, the other is unchecked. Using the FAPI #states value, I have the following code:
function login_disable_settings_form($form, &$form_state) {
$form = array();
$form['all_users'] = array(
'#type' => 'fieldset',
'#title' => t('All Users'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['all_users']['login_disable_is_active'] = array(
'#type' => 'checkbox',
'#title' => 'Prevent user log in',
'#description' => t('When active the user login form will be disabled for everyone. For roles granted bypass rights they must use the access key defined below.'),
'#default_value' => (bool)variable_get('login_disable_is_active', FALSE),
'#states' => array(
'unchecked' => array(
':input[name="login_disable_individual"]' => array('checked' => TRUE),
),
),
);
$form['all_users']['login_disable_key'] = array(
'#title' => t('Access key (optional)'),
'#description' => t('For added security, a word can be required to be added to the URL.'),
'#type' => 'textfield',
'#size' => 10,
'#default_value' => variable_get('login_disable_key', 'admin'),
);
if (!empty($form['login_disable_key']['#default_value'])) {
$form['login_disable_key']['#description'] .= '<br />' . t('The URL to use to log in is: @url', array('@url' => url('user/login') . '?' . $form['login_disable_key']['#default_value']));
}
$form['all_users']['login_disable_message'] = array(
'#title' => t('End-user message when login is disabled'),
'#description' => t('The message to display to users when login has been disabled.'),
'#type' => 'textfield',
'#size' => 80,
'#default_value' => variable_get('login_disable_message', t('Member access has been temporarily disabled. Please try again later.')),
);
$form['individual'] = array(
'#type' => 'fieldset',
'#title' => t('Indivdual'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['individual']['login_disable_individual'] = array(
'#type' => 'checkbox',
'#title' => t('Disable on user profile'),
'#description' => t('Checking this box allows disabling individual logins on user profile pages.'),
'#states' => array(
'unchecked' => array(
':input[name="login_disable_is_active"]' => array('checked' => TRUE),
),
),
);
$form = system_settings_form($form);
return $form;
}
So as I see it, my code should just uncheck a checkbox when the other checkbox is checked. I also want the option that neither is checked. However, what's happening is that they are working as a toggle, in that if I uncheck one, the other one is being checked, which is prohibiting the third option of neither of them being checked. Can anyone tell me why I'm getting this effect?
Thanks.