Improve integration with entity form button-level and form-level submit handlers, form/entity (re-)building, and previews

Created on 8 May 2011, about 14 years ago
Updated 14 July 2023, almost 2 years ago

There are modules which try to integrate with all (entity) forms and want to store data for a newly created entity upon form submission.

Node module's node_form() uses both button-level and form-level submit handlers, because it needs to take the "Preview" case into account, which does not create a new entity upon submit.

When hitting "Submit" (not Preview), then the button-level submit handler invokes all form-level submit handlers first. This means that the new node has not been saved yet, so form-level submit handlers do not have a 'nid' or $node to work with.

For example:

@@ -658,7 +658,18 @@ function mollom_form_alter(&$form, &$form_state, $form_id) {
      // Append a submit handler to store Mollom session data. Requires that
      // the primary submit handler has run already, so a potential 'post_id'
      // mapping can be retrieved from $form_state['values'].
      // @todo Core: node_form_submit() uses a button-level submit handler,
      //   which invokes form-level submit handlers before the node/entity is
      //   saved, so $form_state does not contain the new node ID yet. There is
      //   no #post_submit property or form processing phase, we could rely on.
      //   Potentially applies to other contrib entities, too.
      if (isset($form_state['build_info']['base_form_id']) && $form_state['build_info']['base_form_id'] == 'node_form') {
        $form_submit_key = &$form['actions']['submit'];
      }
      else {
        $form_submit_key = &$form;
      }
      $form_submit_key['#submit'][] = 'mollom_form_submit';

This is a can of worms.

There are various kinds of submit handlers:

  1. Submit handlers that want to tack submitted form values onto the $entity. Those should use #entity_builders instead.
  2. Submit handlers that must not run for previews.
  3. Submit handlers that want to run before the entity is saved, in order to adjust/manipulate whatever they need to do.
  4. Submit handlers that need to run after the entity was saved, in order to process or save corresponding data.
πŸ“Œ Task
Status

Postponed: needs info

Version

9.5

Component
FormΒ  β†’

Last updated 3 days ago

Created by

πŸ‡©πŸ‡ͺGermany sun Karlsruhe

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

Not all content is available!

It's likely this issue predates Contrib.social: some issue and comment data are missing.

  • πŸ‡ΊπŸ‡ΈUnited States smustgrave

    Wonder after 12 years if still a valid task ?

  • Status changed to Closed: outdated about 1 month ago
  • πŸ‡³πŸ‡ΏNew Zealand quietone

    There has been no work on this task for about 14 years. It is likely that it is no longer needed or has been implemented. Therefor, closing.

    If there is work to do here, then either re-open the issue and add a comment or open a new issue and reference this one.

Production build 0.71.5 2024