Download & Extend

Form error reporting fallback does not respect Drupal documentation

Project:Drupal core
Version:7.x-dev
Component:field system
Category:bug report
Priority:normal
Assigned:Unassigned
Status:closed (fixed)

Issue Summary

In the function field_default_form_errors() (field.form.inc file), the following code is used for widgets that do not implement [widget]_field_widget_error() function:
form_error($error_element, $error['error']);

On the Drupal API for such function (http://api.drupal.org/api/drupal/modules!field!field.api.php/function/hook_field_widget_error/7), the given example uses form_error($element['value'], $error['message']);.

So there is a consistency issue there, where in the first case the $error['error'] value is used and in the standard case $error['message'].

This causes troubles for example in the Field validation module: http://drupal.org/node/1316368.

Comments

#1

Status:active» needs review

The patch below modifies the fallback error reporting, according to the specifications of the FieldValidationException class, where the errors array is clearly defined as:

An array of field validation errors, keyed by field name and
delta that contains two keys:

  • 'error': A machine-readable error code string, prefixed by the field module name. A field widget may use this code to decide how to report the error.
  • 'message': A human-readable error message such as to be passed to form_error() for the appropriate form element.

Question: is there a specific reason for using the 'error' key (portability? I may miss something)? If so, then the image widget should implement image_field_widget_error() function.

AttachmentSizeStatusTest resultOperations
field-form-error-reporting-fallback-is-wrong-1432732-1.patch588 bytesIdleFAILED: [[SimpleTest]]: [MySQL] Unable to apply patch field-form-error-reporting-fallback-is-wrong-1432732-1.patch. Unable to apply patch. See the log in the details link for more information.View details

#2

Status:needs review» reviewed & tested by the community

I agree with this patch entirely. The second argument to form_error should be human readable, so $error['message'] should be used, not $error['error'].

The example code of hook_field_widget_error() also demonstrates this.

#3

Version:7.x-dev» 8.x-dev
Status:reviewed & tested by the community» needs work

The sample body for hook_field_widget_error does contain a bug: $element['value'] should be $element, I made #1614468: hook_field_widget_error example implementation contains error for that.

Also, Drupal 8 also contains this bug so I guess a patch must be made for that version first.

#4

Status:needs work» needs review

Updated the patch for Drupal 8.

AttachmentSizeStatusTest resultOperations
formerrorskey-1432732-4.patch992 bytesIdlePASSED: [[SimpleTest]]: [MySQL] 36,701 pass(es).View details

#5

Status:needs review» reviewed & tested by the community

yup

#6

Status:reviewed & tested by the community» fixed

Committed to 8.x. Thanks.

#7

Version:8.x-dev» 7.x-dev
Status:fixed» patch (to be ported)

This was for Drupal 7 too, wasn't it?

#8

Yes, patch #1 is for Drupal 7.

#9

Status:patch (to be ported)» needs review

#1: field-form-error-reporting-fallback-is-wrong-1432732-1.patch queued for re-testing.

#10

Status:needs review» needs work

Looks like the patch no longer applies.

#11

Status:needs work» needs review

Here you go.

AttachmentSizeStatusTest resultOperations
formerrorskey-1432732-11.patch980 bytesIdlePASSED: [[SimpleTest]]: [MySQL] 39,131 pass(es).View details

#12

Status:needs review» reviewed & tested by the community

yup again

#13

Status:reviewed & tested by the community» fixed

Committed to 7.x - thanks! http://drupalcode.org/project/drupal.git/commit/0e89940

#14

Thanks for the commit.

#15

Status:fixed» closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.

nobody click here