diff -upr scanner/scanner.module /Users/joe/work/launchpoker/launchpoker/sites/all/modules/scanner/scanner.module --- scanner/scanner.module 2009-03-05 14:28:56.000000000 -0600 +++ /Users/joe/work/launchpoker/launchpoker/sites/all/modules/scanner/scanner.module 2009-10-13 20:24:28.000000000 -0500 @@ -996,6 +996,7 @@ function scanner_admin_form() { '#collapsible' => TRUE, ); + $search_fields = variable_get('scanner_search_fields', array()); $table_map = _scanner_get_all_tables_map(); sort($table_map); foreach ($table_map as $item) { @@ -1003,7 +1004,7 @@ function scanner_admin_form() { $form['tables'][$key] = array( '#type' => 'checkbox', '#title' => ''. $item['type'] .': '. $item['field'], - '#default_value' => variable_get($key, FALSE), // default to not checked + '#default_value' => $search_fields[$key], // default to not checked ); } @@ -1014,9 +1015,50 @@ function scanner_admin_form() { '#description' => "one per row, field in table of type nodetype on vid or nid", ); - return system_settings_form($form); + $form['buttons']['submit'] = array('#type' => 'submit', '#value' => t('Save configuration')); + $form['buttons']['reset'] = array('#type' => 'submit', '#value' => t('Reset to defaults')); + + return $form; } +/** + * Submission handler for Search and Replace settings form. + * Based on system_settings_form_submit(). + */ +function scanner_admin_form_submit($form_id, $form_values) { + $op = isset($form_values['op']) ? $form_values['op'] : ''; + + // Depending on form operation, delete or update variables + if ($op == t('Reset to defaults')) { + variable_del('scanner_search_fields'); + foreach ($settings as $setting) { + variable_del($setting); + } + drupal_set_message(t('The configuration options have been reset to their default values.')); + } + else { + // Exclude unnecessary elements from form values. + unset($form_values['submit'], $form_values['reset'], $form_values['form_id'], $form_values['op'], $form_values['form_token']); + + // Define list of settings that should be saved individually. + $settings = array('scanner_mode', 'scanner_wholeword', 'scanner_regex', 'scanner_published', 'scanner_rebuild_teasers', 'scanner_vocabulary', 'scanner_custom'); + + // Consolidate other settings into array for scanner_search_fields + $search_fields = array(); + foreach ($form_values as $key => $value) { + if (!in_array($key, $settings) && $value) { + $search_fields[$key] = $value; + } + } + + // Save settings + variable_set('scanner_search_fields', $search_fields); + foreach ($settings as $setting) { + variable_set($setting, $form_values[$setting]); + } + drupal_set_message(t('The configuration options have been saved.')); + } +} // *************************************************************************** @@ -1074,10 +1116,11 @@ function _scanner_get_all_tables_map() { * @return map of selected fields and tables. */ function _scanner_get_selected_tables_map() { + $search_fields = variable_get('scanner_search_fields', array()); $tables_map = _scanner_get_all_tables_map(); foreach ($tables_map as $i => $item) { $key = 'scanner_'. $item['field'] .'_'. $item['table'] .'_'. $item['type']; - if (!variable_get($key, FALSE)) { + if (!$search_fields[$key]) { unset($tables_map[$i]); } }