[drupal-devel] [bug] De-selecting all content type options creates in_array() error

leafish_paul drupal-devel at drupal.org
Tue Mar 22 12:31:38 UTC 2005

Issue status update for http://drupal.org/node/17158

 Project:      Drupal
 Version:      cvs
 Component:    node system
 Category:     bug reports
 Priority:     normal
 Assigned to:  Anonymous
 Reported by:  samo
 Updated by:   leafish_paul
-Status:       active
+Status:       patch
 Attachment:   http://drupal.org/files/issues/node.module_fix_empty_node_options.patch (1.04 KB)

I was able to recreate this problem, and it seems that changing that
instance of 'edit' to 'node' seems to do the trick. Not sure why tho,
could someone check this patch?


Previous comments:

February 10, 2005 - 23:34 : samo

Using latest code from CVS; steps to replicate:
1) administer -> content -> configure (tab) -> content types (tab)
2) story -> configure
3) de-select all "Default options": Published, In Moderation Queue,
Promoted..., Sticky..., Create new revision
4) Save Configuration
5) create content -> story
I receive 4 in_array() errors at lines 1318,1319,1320,1321 of
warning: in_array(): Wrong datatype for second argument in
modules/node.module on line 1318.
Is variable_get() expected to return an array?
I added a quick line in node.module to get past the problem for now,
but I'm sure it is not the preferred solution:
if(!is_array($node_options) ) $node_options = array();


February 11, 2005 - 15:09 : samo

The use of a default in variable_get() calls seems dangerous when we
expect nothing back.
Line 1254:
variable_get('node_options_'. $edit->type, array('status', 'promote'));
What if the variable "node_options_story" is empty?  status and promote
are applied despite explicitly denying them when configuring content


February 11, 2005 - 15:19 : samo

Shouldn't line 1254 of node.module use $node->type instead of


February 14, 2005 - 17:29 : samo

I beg of someone, anyone: is line 1254 of node.module correct?  
The object $edit is not referenced anywhere in that function. I believe
$edit->type should be replaced with $node->type.


February 19, 2005 - 08:10 : robertDouglass

Changing status to critical. I have reproduced this error and am
investigating why in node_validate, there is a dead reference to $edit:

if (user_access('administer nodes')) {
  else {
    // Validate for normal users:
    $node->uid = $user->uid ? $user->uid : 0;
    // Force defaults in case people modify the form:
    // this line can never succeed: $edit is a dead reference.
    $node_options = variable_get('node_options_'. $edit->type,
array('status', 'promote'));
    $node->status = in_array('status', $node_options);
    $node->moderate = in_array('moderate', $node_options);
    $node->promote = in_array('promote', $node_options);
    $node->sticky = in_array('sticky', $node_options);
    $node->revision = in_array('revision', $node_options);


February 19, 2005 - 08:30 : robertDouglass

should this be $node instead of $edit?
$node_options = variable_get('node_options_'. $node->type,
array('status', 'promote'));

More information about the drupal-devel mailing list