notice: Undefined property: stdClass::$format in drupal-6.x-dev\modules\node\node.module on line 1037.

when node does not have a body field then the node preview shows a PHP notice

repro:
1. clean install
2. admin/content/node-type/page clear the "Body field label" and save
3. node/add/page fill Title with anything and click preview

Support from Acquia helps fund testing for Drupal Acquia logo

Comments

webmasterkai’s picture

Any word on this?

qutoz’s picture

Hi,
After making some researches and diving inside Drupal code, I got some ideas about what is happening there:

1- admin/content/node-type/page : clear the "Body field label" and save
2- node/add/page : "Input format" fieldset removed automatically, because it has nothing to do in case of "Body" field not there.
3- "Input format" fieldset contains 2 radio buttons (the name of radio group is "format").
4- When you click "Preview", actually the form is submitted, so the form values should be stored inside $form_state['values'] variable as array.
5- $form and $form_state variables are passed to node_form_build_preview function (in node.pages.inc), which passes them to node_form_submit_build_node function to build $node object, which passes them to node_submit function (defined in node.module), at this point exactly $node object is built and created with properties, according to those posted by the form, so it may or may not contain the "format" property.
6- After that, $node object is passed to series of functions, till it reaches "node_view" function (in node.module), where the error is happening due to line 1037:

  $node->body = check_markup($node->body, $node->format, FALSE);

where the $node->format does not exist.

Note: This is not happening in case of viewing the content type after submission, because $node object is loaded with "format" property by default.

Currently I have 3 suggestions

1- In case that there's no "Body field", Drupal should keep the "Input format" fieldset with its radio buttons.
2- Building $node object in a way that it always contains "format" property.
3- Preventing the submission of content type without "Body field" :)

If anyone of these suggestions, or even any other suggestions, is OK, I want to make the patch myself, if it is OK with you guys :)

Pasqualle’s picture

1. no - I don't need a format when I do not need the body
2. yes
3. no - I need a content type without body

qutoz’s picture

Hi,
Sorry for being late I just want to be sure that there are no new suggestions or comments.
Please take care that I added a new part in bold to my first comment.
So here is the patch and thanks for your patience.

swentel’s picture

Version: 6.x-dev » 7.x-dev
Status: Active » Needs review
FileSize
728 bytes

Can confirm this, this is also present in D7, so changing version. Patch in #4 fixes D6 branch, attached in #5 is for drupal head.

qutoz’s picture

Thanks swentel for your attention. :)

swentel’s picture

Chasing HEAD

swentel’s picture

Issue tags: +Quick fix

Tagging & bumping.

Damien Tournoud’s picture

Status: Needs review » Needs work
Issue tags: -Quick fix

A new argument for my "put body and format in a same element".

Format is an integer, this should be $node->format = 0;.

swentel’s picture

Status: Needs work » Needs review
FileSize
750 bytes
catch’s picture

Status: Needs review » Reviewed & tested by the community

Looks good the input format changes will likely change how this works anyway (and with tests), so RTBC.

webchick’s picture

Version: 7.x-dev » 6.x-dev
Issue tags: +Quick fix

Committed, thanks!

Moving down to 6.x.

Gábor Hojtsy’s picture

Status: Reviewed & tested by the community » Fixed

Thanks, committed to Drupal 6 as well.

Status: Fixed » Closed (fixed)
Issue tags: -Quick fix

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