Index: form_restore.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/form_restore/form_restore.module,v retrieving revision 1.2 diff -u -r1.2 form_restore.module --- form_restore.module 31 Jul 2006 11:12:28 -0000 1.2 +++ form_restore.module 1 Jul 2007 14:02:20 -0000 @@ -26,8 +26,9 @@ // Settings page $items[] = array( 'path' => 'admin/settings/form_restore/reset', - 'title' => t('empty stored form data'), - 'callback' => 'form_restore_reset_form', + 'title' => t('Empty stored form data'), + 'callback' => 'drupal_get_form', + 'callback arguments' => array('form_restore_reset_form'), 'access' => user_access('empty form_restore data'), 'type' => MENU_NORMAL_ITEM, ); @@ -36,16 +37,16 @@ } function form_restore_reset_form() { - return confirm_form('form_restore_reset_form', array(), t('Are you sure you want to empty all stored forms data?'), 'admin/settings', t('All filled in non-submitted data will be lost.'), t('Empty all')); + return confirm_form(array(), t('Are you sure you want to empty all stored forms data?'), 'admin/settings', t('All filled in non-submitted data will be lost.'), t('Empty all')); } function form_restore_reset_form_submit() { if (isset($_SESSION['post_stack'])) { unset($_SESSION['post_stack']); - drupal_set_message(t('all saved form data was emptied')); + drupal_set_message(t('All saved form data was emptied.')); } else { - drupal_set_message(t('there are no stored forms')); + drupal_set_message(t('There are no stored forms.')); } return 'admin/settings'; } @@ -57,7 +58,7 @@ if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) { if (!isset($_POST['op'])) { if (isset($_SESSION['post_stack'][$_REQUEST['q']]) - && _form_restore_set_default_values(&$form, $_SESSION['post_stack'][$_REQUEST['q']]['edit'])) { + && _form_restore_set_default_values($form, $_SESSION['post_stack'][$_REQUEST['q']])) { $_SESSION['post_stack'][$_REQUEST['q']]['restored'] = true; } } @@ -72,22 +73,20 @@ function _form_restore_set_default_values(&$form_item, $stored_item, $success = false) { if (is_array($form_item) && is_array($stored_item)) { - $keys = array_intersect(array_keys($form_item), array_keys($stored_item)); - if (!empty($keys)) { - foreach ($keys as $key) { - if (array_key_exists('#default_value', $form_item[$key])) { - if (is_array($stored_item[$key]) && !empty($stored_item[$key])) { - $form_item[$key]['#default_value'] = array_merge_recursive($form_item[$key]['#default_value'], $stored_item[$key]); - $success = true; - } - else if ($stored_item[$key] != '' && $form_item[$key]['#default_value'] != $stored_item[$key]) { - $form_item[$key]['#default_value'] = $stored_item[$key]; - } + $keys = element_children($form_item); + foreach ($keys as $key) { + if (array_key_exists('#default_value', $form_item[$key])) { + if (is_array($stored_item[$key]) && count($stored_item[$key]) > 0) { + $form_item[$key]['#default_value'] = array_merge_recursive($form_item[$key]['#default_value'], $stored_item[$key]); + $success = true; } - else { - $success = _form_restore_set_default_values($form_item[$key], $stored_item[$key], $success); + else if ($stored_item[$key] != '' && $form_item[$key]['#default_value'] != $stored_item[$key]) { + $form_item[$key]['#default_value'] = $stored_item[$key]; } } + else { + $success = _form_restore_set_default_values($form_item[$key], !empty($form_item[$key]['#tree']) ? $stored_item[$key] : $stored_item, $success); + } } } return $success;