This is totally bizarre.

I only want to use the City and State portions of the Address widget, so in my address field unchecked all the other sub fields.

When I go to submit new content, I get validation errors saying the address and zip code fields are are required.

So I added some code to print out what the required attribute is being set to for the form:

        $form[$field['field_name']][0]['street1'] = array(
          '#type' => 'textfield',
          '#title' => isset($field['field_names_street1']) ? $field['field_names_street1'] : t('Address'),
          '#default_value' => isset($items[0]['street1']) ? $items[0]['street1'] : $field['field_defaults_street1'],
          '#required' => $field['fielddisplay']['field_display_street1'] == 'field_display_street1' && $field['required'] == TRUE ? TRUE : FALSE,
          '#size' => 20,
          '#maxlength' => $field['max_length_street1'] ? $field['max_length_street1'] : NULL,
          '#prefix' => '<div class="cck-address-street1">',
          '#suffix' => '</div>',
        );


        print "field_display_street1: " . $field['fielddisplay']['field_display_street1'];
        print "<br/>" ;
        $x = ($field['fielddisplay']['field_display_street1'] == 'field_display_street1') ? TRUE : FALSE; 
        print "(field_display_street1=='field_display_street1'): " . $x;
        print "<br/>" ;
        print "required: " . $field['required'];

Look what's get printed:

field_display_street1: 0
(field_display_street1=='field_display_street1'): 1
required: 1

Somehow even though field_display_street1 is not equal to the text 'field_display_street1', it still is evaluating to TRUE!

I'm not a super PHP whiz, but this really doesn't make sense.

Has this been encountered before?

Thanks,
-- Jason

Comments

rconstantine’s picture

Do me a favor and try changing both the original and your test's == into === and see if that does the trick. Sorry I don't have time to check this out myself right now.

jsm174’s picture

Thanks! I made the suggested changes and it works fine. I tested both the checked and unchecked settings.

Initially I thought about === but used strcmp. (For some reason === always confuses me.)

Anyway, along with your suggestion, I read that === works pretty much like strcmp in these kind of situations. Plus it keeps the code cleaner.

It looks like it needs to be changed in 11 places:

1401c1401
<           '#required' => $field['fielddisplay']['field_display_street1'] == 'field_display_street1' && $field['required'] == TRUE ? TRUE : FALSE,
---
>           '#required' => $field['fielddisplay']['field_display_street1'] === 'field_display_street1' && $field['required'] == TRUE ? TRUE : FALSE,
1412c1412
<           '#required' => $field['fielddisplay']['field_display_street2'] == 'field_display_street2' && $field['required'] == TRUE ? TRUE : FALSE,
---
>           '#required' => $field['fielddisplay']['field_display_street2'] === 'field_display_street2' && $field['required'] == TRUE ? TRUE : FALSE,
1424c1424
<           '#required' => $field['fielddisplay']['field_display_city'] == 'field_display_city' && $field['required'] == TRUE ? TRUE : FALSE,
---
>           '#required' => $field['fielddisplay']['field_display_city'] === 'field_display_city' && $field['required'] == TRUE ? TRUE : FALSE,
1434c1434
<           '#required' => $field['fielddisplay']['field_display_zip'] == 'field_display_zip' && $field['required'] == TRUE ? TRUE : FALSE,
---
>           '#required' => $field['fielddisplay']['field_display_zip'] === 'field_display_zip' && $field['required'] == TRUE ? TRUE : FALSE,
1455c1455
<           '#required' => $field['fielddisplay']['field_display_street1'] == 'field_display_street1' && $field['required'] == TRUE ? TRUE : FALSE,
---
>           '#required' => $field['fielddisplay']['field_display_street1'] === 'field_display_street1' && $field['required'] == TRUE ? TRUE : FALSE,
1491c1491
<           '#required' => $field['fielddisplay']['field_display_city'] == 'field_display_city' && $field['required'] == TRUE ? TRUE : FALSE,
---
>           '#required' => $field['fielddisplay']['field_display_city'] === 'field_display_city' && $field['required'] == TRUE ? TRUE : FALSE,
1507c1507
<             '#required' => $field['fielddisplay']['field_display_state'] == 'field_display_state' && $field['required'] == TRUE ? TRUE : FALSE,
---
>             '#required' => $field['fielddisplay']['field_display_state'] === 'field_display_state' && $field['required'] == TRUE ? TRUE : FALSE,
1521c1521
<             '#required' => $field['fielddisplay']['field_display_state'] == 'field_display_state' && $field['required'] == TRUE ? TRUE : FALSE,
---
>             '#required' => $field['fielddisplay']['field_display_state'] === 'field_display_state' && $field['required'] == TRUE ? TRUE : FALSE,
1533c1533
<           '#required' => $field['fielddisplay']['field_display_zip'] == 'field_display_zip' && $field['required'] == TRUE ? TRUE : FALSE,
---
>           '#required' => $field['fielddisplay']['field_display_zip'] === 'field_display_zip' && $field['required'] == TRUE ? TRUE : FALSE,
1546c1546
<             '#required' => $field['fielddisplay']['field_display_country'] == 'field_display_country' && $field['required'] == TRUE ? TRUE : FALSE,
---
>             '#required' => $field['fielddisplay']['field_display_country'] === 'field_display_country' && $field['required'] == TRUE ? TRUE : FALSE,
1563c1563
<             '#required' => $field['fielddisplay']['field_display_country'] == 'field_display_country' && $field['required'] == TRUE ? TRUE : FALSE,
---
>             '#required' => $field['fielddisplay']['field_display_country'] === 'field_display_country' && $field['required'] == TRUE ? TRUE : FALSE,

-- Jason

rconstantine’s picture

Status: Active » Needs review

Cool. Thanks for that. I personally only tried leaving off the 'Other', 'Country' and 'State' fields, so I didn't even think people wouldn't want to use the other "end" of the address field list.

The third equal sign, IIRC, means that you want the values to be identical, not equivalent; there's no real trick there. Thanks for finding the bug and helping test the solution. I'll review it one more time on my setup before committing the changes to a release.

NewZeal’s picture

Status: Needs review » Closed (fixed)

Issue more than 6 months old