diff --git a/includes/encrypt.admin.inc b/includes/encrypt.admin.inc index 735c171..91a0e42 100644 --- a/includes/encrypt.admin.inc +++ b/includes/encrypt.admin.inc @@ -202,10 +202,42 @@ function encrypt_config_form($form, &$form_state, $config = NULL) { '#required' => TRUE, '#options' => $method_options, '#default_value' => $config['method'], + '#ajax' => array( + 'method' => 'replace', + 'callback' => 'encrypt_encryption_methods_additional_settings_ajax', + 'wrapper' => 'encrypt-encryption-methods-additional-settings', + ), ); // Disable any method with dependency errors. _encrypt_admin_form_add_options($methods, $form['method_settings']['encrypt_encryption_method']); + $form['method_settings']['method_settings_wrapper'] = array( + '#type' => 'container', + '#prefix' => '
', + '#suffix' => '
', + ); + + if (isset($form_state['values']['encrypt_encryption_method'])) { + $method = $form_state['values']['encrypt_encryption_method']; + } + elseif (isset($config['method'])) { + $method = $config['method']; + } + else { + $method = NULL; + } + + if ($method) { + if ($method_settings_form = ctools_plugin_get_function($methods[$method], 'settings form')) { + $form['method_settings']['method_settings_wrapper']['method_settings'] = array( + '#type' => 'fieldset', + '#title' => t('Additional Encryption Method Settings'), + ); + + $form['method_settings']['method_settings_wrapper']['method_settings']['encrypt_encryption_methods_' . $method . '_settings'] = array('#tree' => TRUE) + call_user_func($method_settings_form, $config['method_settings']); + } + } + $form['provider_settings'] = array( '#type' => 'fieldset', '#title' => t('Key provider settings'), @@ -245,13 +277,13 @@ function encrypt_config_form($form, &$form_state, $config = NULL) { } if ($provider) { - if ($settings_form_method = ctools_plugin_get_function($providers[$provider], 'settings form')) { + if ($provider_settings_form = ctools_plugin_get_function($providers[$provider], 'settings form')) { $form['provider_settings']['key_settings_wrapper']['key_settings'] = array( '#type' => 'fieldset', '#title' => t('Additional Key Provider Settings'), ); - $form['provider_settings']['key_settings_wrapper']['key_settings']['encrypt_key_providers_' . $provider . '_settings'] = array('#tree' => TRUE) + call_user_func($settings_form_method, $config['provider_settings']); + $form['provider_settings']['key_settings_wrapper']['key_settings']['encrypt_key_providers_' . $provider . '_settings'] = array('#tree' => TRUE) + call_user_func($provider_settings_form, $config['provider_settings']); } } @@ -310,12 +342,18 @@ function encrypt_config_form_submit($form, &$form_state) { 'label' => (string) $form_state['values']['label'], 'description' => (string) $form_state['values']['description'], 'method' => (string) $form_state['values']['encrypt_encryption_method'], - 'method_settings' => '', 'provider' => (string) $form_state['values']['encrypt_key_provider'], 'enabled' => (int) $form_state['values']['enabled'], 'changed' => REQUEST_TIME, ); + if (empty($form_state['values']['encrypt_encryption_methods_' . $fields['method'] . '_settings'])) { + $fields['method_settings'] = ''; + } + else { + $fields['method_settings'] = serialize($form_state['values']['encrypt_encryption_methods_' . $fields['method'] . '_settings']); + } + if (empty($form_state['values']['encrypt_key_providers_' . $fields['provider'] . '_settings'])) { $fields['provider_settings'] = ''; } @@ -424,7 +462,14 @@ function encrypt_config_make_default($config) { } /** - * Callback for AJAX form re-rendering. + * Callback for AJAX form re-rendering for method additional settings. + */ +function encrypt_encryption_methods_additional_settings_ajax($form, $form_state) { + return $form['method_settings']['method_settings_wrapper']; +} + +/** + * Callback for AJAX form re-rendering for provider additional settings. */ function encrypt_key_providers_additional_settings_ajax($form, $form_state) { return $form['provider_settings']['key_settings_wrapper'];