Hi, I think it is another issue. I dont' know is ahah helper or core bug.

I'm using hook_form_alter, in a form with cck multiple checkbox field:

function mymodule_form_alter(&$form, $form_state, $form_id) {
   switch($form_id) {
   case 'cck_node_form':		  		  
      ahah_helper_register($form, $form_state);
      //mymodule_alter_form($form, $form_state);
      dsm($form['field_cck']['#default_value']);
      break;
   }
}

Note the commented line: I don't modify the form;
The ahah_helper_register set storage value in $form, then, drupal_get_form calls drupal_rebuild_form. The result is that the mymodule_form_alter is called 2 times.
I use dsm function from devel module to show the $from values.

The first dsm call, the $form['field_cck']['#default_value'] is an array
[0] => {['value'] => 'item1'}
[1] => {['value'] => 'item2'}
[2] => {['value'] => 'item3'}
...

The second dsm call, the $form['field_cck']['#default_value'] is an array
[value] => {'item1' => TRUE, 'item2' => TRUE, 'item3' => TRUE, ...}

The final result is that when form is shown, the values in checkboxes are not filled.
For your info, the cck field type is #type optionwidgets_buttons.

Is this a cck or core bug...?

Can I avoid the drupal_rebuild_form calling?

I must follow another way to do this?

Thanks for your patience.

Comments

getluky’s picture

I ran into this issue with a CCK custom date select field - it would blow out both default values and occasionally the date ranges on the second run through the form builder. Not sure why. Easy workaround was to modify ahah_helper.module as follows:

--- ahah_helper.module	2009-06-01 18:08:13.000000000 -0700
+++ ahah_helper.module.modified	2009-06-01 18:08:11.000000000 -0700
@@ -77,7 +77,7 @@
   $form['#cache'] = TRUE;
 
   // Register the file.
-  if (!isset($form_state['storage']['#ahah_helper']['file'])) {
+  if (isset($form_state['storage']) && !isset($form_state['storage']['#ahah_helper']['file'])) {
     $menu_item = menu_get_item();
     if ($menu_item['file']) {
       $form_state['storage']['#ahah_helper']['file'] = $menu_item['file'];

This prevents it from unnecessarily modifying the storage array when it doesn't even exist yet, which triggers the unnecessary rebuild. Not sure what side effects this might have, so YMMV.

grahamgilchrist’s picture

Thanks very much for this.
I had a similar situation using form_alter on the user_register form in the same way as you. Whenever I ran ahah_helper_register() it duplicated the form either from cache or by rebuilding or something such that it had the wrong form id (user-register-1 instead of user_register). Adding your code did the trick to solve my problem too.

Any chance this can be committed if it doesn't break anything else?

Cheers