Index: nodereference.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/nodereference.module,v
retrieving revision 1.43
diff -u -r1.43 nodereference.module
--- nodereference.module	10 Jan 2007 16:38:26 -0000	1.43
+++ nodereference.module	17 Jan 2007 22:19:01 -0000
@@ -239,7 +239,7 @@
                 '#type' => 'textfield',
                 '#title' => ($delta == 0) ? t($field['widget']['label']) : '',
                 '#autocomplete_path' => 'nodereference/autocomplete/'. $field['field_name'],
-                '#default_value' => $item['default node_name'],
+                '#default_value' => $item['default node_name'] ? $item['default node_name'] : content_default_value($field),
                 '#required' => ($delta == 0) ? $field['required'] : FALSE,
               );
               $delta++;
@@ -250,7 +250,7 @@
               '#type' => 'textfield',
               '#title' => ($delta == 0) ? t($field['widget']['label']) : '',
               '#autocomplete_path' => 'nodereference/autocomplete/'. $field['field_name'],
-              '#default_value' => '',
+              '#default_value' => content_default_value($field),
               '#required' => ($delta == 0) ? $field['required'] : FALSE,
             );
           }
@@ -260,7 +260,7 @@
             '#type' => 'textfield',
             '#title' => t($field['widget']['label']),
             '#autocomplete_path' => 'nodereference/autocomplete/'. $field['field_name'],
-            '#default_value' => $node_field[0]['default node_name'],
+            '#default_value' => $node_field[0]['default node_name'] ? $node_field[0]['default node_name'] : content_default_value($field),
             '#required' => $field['required'],
             '#description' => $field['widget']['description'],
           );
Index: number.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/number.module,v
retrieving revision 1.40
diff -u -r1.40 number.module
--- number.module	9 Jan 2007 15:44:05 -0000	1.40
+++ number.module	17 Jan 2007 22:13:41 -0000
@@ -116,7 +116,6 @@
 
     case 'validate':
       $allowed_values = number_allowed_values($field);
-
       if (is_array($items)) {
         foreach ($items as $delta => $item) {
           $error_field = $field['field_name'].']['.$delta.'][value';
@@ -181,7 +180,6 @@
   switch ($op) {
     case 'form':
       $form = array();
-
       $form[$field['field_name']] = array('#tree' => TRUE);
 
       if ($field['multiple']) {
@@ -193,7 +191,7 @@
             $form[$field['field_name']][$delta]['value'] = array(
               '#type' => 'textfield',
               '#title' => ($delta == 0) ? t($field['widget']['label']) : '',
-              '#default_value' => $data['value'],
+              '#default_value' => $data['value'] ? $data['value'] : content_default_value($field),
               '#required' => ($delta == 0) ? $field['required'] : FALSE,
               '#maxlength' => 11,
             );
@@ -204,7 +202,7 @@
           $form[$field['field_name']][$delta]['value'] = array(
             '#type' => 'textfield',
             '#title' => ($delta == 0) ? t($field['widget']['label']) : '',
-            '#default_value' => '',
+            '#default_value' => content_default_value($field),
             '#required' => ($delta == 0) ? $field['required'] : FALSE,
             '#maxlength' => 11,
           );
@@ -214,7 +212,7 @@
         $form[$field['field_name']][0]['value'] = array(
           '#type' => 'textfield',
           '#title' => t($field['widget']['label']),
-          '#default_value' => isset($node_field[0]['value']) ? $node_field[0]['value'] : '',
+          '#default_value' => isset($node_field[0]['value']) ? $node_field[0]['value'] : content_default_value($field),
           '#required' => $field['required'],
           '#description' => $field['widget']['description'],
           '#maxlength' => 11,
Index: optionwidgets.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/optionwidgets.module,v
retrieving revision 1.14
diff -u -r1.14 optionwidgets.module
--- optionwidgets.module	10 Jan 2007 16:38:26 -0000	1.14
+++ optionwidgets.module	17 Jan 2007 22:17:25 -0000
@@ -75,7 +75,7 @@
             $form[$field['field_name']]['keys'] = array(
               '#type' => 'select',
               '#title' => t($field['widget']['label']),
-              '#default_value' => $node_field['default keys'],
+              '#default_value' => $node_field['default keys'] ? $node_field['default keys'] : content_default_value($field),
               '#multiple' => TRUE,
               '#size' => min(count($options), 6),
               '#options' => $options,
@@ -87,7 +87,7 @@
             $form[$field['field_name']]['key'] = array(
               '#type' => 'select',
               '#title' => t($field['widget']['label']),
-              '#default_value' => $node_field['default key'],
+              '#default_value' => $node_field['default key'] ? $node_field['default key'] : content_default_value($field),
               '#multiple' => FALSE,
               '#options' => $options,
               '#required' => $field['required'],
@@ -101,7 +101,7 @@
             $form[$field['field_name']]['keys'] = array(
               '#type' => 'checkboxes',
               '#title' => t($field['widget']['label']),
-              '#default_value' => $node_field['default keys'],
+              '#default_value' => $node_field['default keys'] ? $node_field['default keys'] : content_default_value($field),
               '#options' => $options,
               '#required' => $field['required'],
               '#description' => $field['widget']['description'],
@@ -112,7 +112,7 @@
             $form[$field['field_name']]['key'] = array(
               '#type' => 'radios',
               '#title' => t($field['widget']['label']),
-              '#default_value' => $node_field['default key'],
+              '#default_value' => $node_field['default key'] ? $node_field['default key'] : content_default_value($field),
               '#options' => $options,
               '#required' => $field['required'],
               '#description' => $field['widget']['description'],
Index: text.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/text.module,v
retrieving revision 1.46
diff -u -r1.46 text.module
--- text.module	9 Jan 2007 15:48:33 -0000	1.46
+++ text.module	17 Jan 2007 22:15:20 -0000
@@ -244,7 +244,7 @@
               $form[$field['field_name']][$delta]['value'] = array(
                 '#type' => 'textfield',
                 '#title' => ($delta == 0) ? t($field['widget']['label']) : '',
-                '#default_value' => $data['value'],
+                '#default_value' => $data['value'] ? $data['value'] : content_default_value($field),
                 '#required' => ($delta == 0) ? $field['required'] : FALSE,
                 '#maxlength' => $field['max_length'] ? $field['max_length'] : NULL,
                 '#weight' => $field['widget']['weight'],
@@ -254,7 +254,7 @@
               $form[$field['field_name']][$delta]['value'] = array(
                 '#type' => 'textarea',
                 '#title' => ($delta == 0) ? t($field['widget']['label']) : '',
-                '#default_value' => $data['value'],
+                '#default_value' => $data['value'] ? $data['value'] : content_default_value($field),
                 '#required' => ($delta == 0) ? $field['required'] : FALSE,
                 '#rows' => $field['widget']['rows'],
                 '#weight' => $field['widget']['weight'],
@@ -271,7 +271,7 @@
             $form[$field['field_name']][$delta]['value'] = array(
               '#type' => 'textfield',
               '#title' => ($delta == 0) ? t($field['widget']['label']) : '',
-              '#default_value' => '',
+              '#default_value' => content_default_value($field),
               '#required' => ($delta == 0) ? $field['required'] : FALSE,
               '#maxlength' => $field['max_length'] ? $field['max_length'] : NULL,
               '#weight' => $field['widget']['weight'],
@@ -281,7 +281,7 @@
             $form[$field['field_name']][$delta]['value'] = array(
               '#type' => 'textarea',
               '#title' => ($delta == 0) ? t($field['widget']['label']) : '',
-              '#default_value' => '',
+              '#default_value' => content_default_value($field),
               '#required' => ($delta == 0) ? $field['required'] : FALSE,
               '#rows' => $field['widget']['rows'],
               '#weight' => $field['widget']['weight'],
@@ -297,7 +297,7 @@
           $form[$field['field_name']][0]['value'] = array(
             '#type' => 'textfield',
             '#title' => t($field['widget']['label']),
-            '#default_value' => isset($items[0]['value']) ? $items[0]['value'] : '',
+            '#default_value' => isset($items[0]['value']) ? $items[0]['value'] : content_default_value($field),
             '#required' => $field['required'],
             '#description' => $field['widget']['description'],
             '#maxlength' => $field['max_length'] ? $field['max_length'] : NULL,
@@ -308,7 +308,7 @@
           $form[$field['field_name']][0]['value'] = array(
             '#type' => 'textarea',
             '#title' => t($field['widget']['label']),
-            '#default_value' => $items[0]['value'],
+            '#default_value' => $items[0]['value'] ? $items[0]['value'] : content_default_value($field),
             '#required' => $field['required'],
             '#rows' => $field['widget']['rows'],
             '#description' => $field['widget']['description'],
Index: userreference.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/userreference.module,v
retrieving revision 1.37
diff -u -r1.37 userreference.module
--- userreference.module	10 Jan 2007 16:38:26 -0000	1.37
+++ userreference.module	17 Jan 2007 22:20:33 -0000
@@ -142,7 +142,7 @@
         $form[$field['field_name']]['uids'] = array(
           '#type' => 'select',
           '#title' => t($field['widget']['label']),
-          '#default_value' => $node_field['default uids'],
+          '#default_value' => $node_field['default uids'] ? $node_field['default uids'] : content_default_value($field),
           '#multiple' => $field['multiple'],
           '#size' => min(count($options), 6),
           '#options' => $options,
@@ -194,7 +194,7 @@
                 '#type' => 'textfield',
                 '#title' => ($delta == 0) ? t($field['widget']['label']) : '',
                 '#autocomplete_path' => 'user/autocomplete',
-                '#default_value' => $item['default user_name'],
+                '#default_value' => $item['default user_name'] ? $item['default user_name'] : content_default_value($field),
                 '#required' => ($delta == 0) ? $field['required'] : FALSE,
               );
               $delta++;
@@ -205,7 +205,7 @@
               '#type' => 'textfield',
               '#title' => ($delta == 0) ? t($field['widget']['label']) : '',
               '#autocomplete_path' => 'user/autocomplete',
-              '#default_value' => '',
+              '#default_value' => content_default_value($field),
               '#required' => ($delta == 0) ? $field['required'] : FALSE,
             );
           }
@@ -215,7 +215,7 @@
             '#type' => 'textfield',
             '#title' => t($field['widget']['label']),
             '#autocomplete_path' => 'user/autocomplete',
-            '#default_value' => $node_field[0]['default user_name'],
+            '#default_value' => $node_field[0]['default user_name'] ? $node_field[0]['default user_name'] : content_default_value($field),
             '#required' => $field['required'],
             '#description' => $field['widget']['description'],
           );
Index: content.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/content.module,v
retrieving revision 1.112
diff -u -r1.112 content.module
--- content.module	17 Jan 2007 14:37:09 -0000	1.112
+++ content.module	17 Jan 2007 22:12:25 -0000
@@ -610,12 +610,12 @@
         if (is_array($result) && $op == 'form') {
           $result[$field['field_name']]['#weight'] = $field['widget']['weight'];
         }
-        if (is_array($result)) {
-          $return = array_merge($return, $result);
-        }
-        else if (isset($result)) {
-          $return[] = $result;
-        }
+      }
+      if (is_array($result)) {
+        $return = array_merge($return, $result);
+      }
+      else if (isset($result)) {
+        $return[] = $result;
       }
       // test for values in $node_field in case modules added items on insert
       if (is_object($node) && (isset($node->$field['field_name']) || count($node_field))) {
@@ -998,3 +998,24 @@
       return 'node_data_'.$name;
   }
 }
+
+/**
+ *  Helper function to return the correct default value for a field.
+ * 
+ *  @param $field
+ *    The field array.
+ *  
+ *  @return 
+ *    The default value for that field.
+ */
+function content_default_value($field) {
+  if (!isset($field['widget']['default_value']) || !isset($field['widget']['default_value_php'])) {
+    return '';
+  }
+  elseif (!empty($field['widget']['default_value_php'])) {
+    if ($result = drupal_eval($field['widget']['default_value_php'])) {
+      return $result;
+    }
+  }
+  return $field['widget']['default_value'];
+}
Index: content_admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/content_admin.inc,v
retrieving revision 1.45
diff -u -r1.45 content_admin.inc
--- content_admin.inc	17 Jan 2007 14:37:09 -0000	1.45
+++ content_admin.inc	17 Jan 2007 22:03:20 -0000
@@ -750,10 +750,35 @@
     '#type' => 'hidden',
     '#default_value' => $field['widget']['weight'],
   );
+  // Add handling for default value if not provided by field.
+  $callbacks = module_invoke($module, 'widget_settings', 'callbacks', $field);
+  if (!isset($callbacks['default_value']) || !$callbacks['default_value']) {
+    $form['widget']['default_value'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Default value'),
+      '#default_value' => $field['widget']['default_value'],
+    );
+    $form['widget']['advanced_options'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Php code'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+    );
+    $form['widget']['advanced_options']['default_value_php'] = array(
+      '#type' => 'textarea',
+      '#title' => t('Code'),
+      '#default_value' => $field['widget']['default_value_php'],
+      '#rows' => 6,
+      '#tree' => TRUE,
+      '#description' => t('Advanced Usage Only: PHP code that returns a default value. Must include &lt;?php ?&gt; delimiters. If this field is filled out, the value returned by this code will override any value in the textfield above.'),
+    );
+  }
+  
   $additions = module_invoke($widget_type['module'], 'widget_settings', 'form', $field['widget']);
   if (is_array($additions)) {
     $form['widget'] = array_merge($form['widget'], $additions);
   }
+  
   $form['widget']['description'] = array(
     '#type' => 'textarea',
     '#title' => t('Help text'),
@@ -820,6 +845,32 @@
 
   module_invoke($widget_type['module'], 'widget_settings', 'validate', array_merge($field, $form_values));
   module_invoke($field_type['module'], 'field_settings', 'validate', array_merge($field, $form_values));
+  
+  // If the content module is handling the default value, validate the result using the field validation.
+  $callbacks = module_invoke($field_type['module'], 'widget_settings', 'callbacks', $field);
+  if (isset($form_values['default_value_php']) && (!isset($callbacks['default_value']) || !$callbacks['default_value'])) {
+    if (trim($form_values['default_value_php'])) {
+      $form_values['default_value'] = drupal_eval($form_values['default_value_php']);
+    }
+    else {
+      $form_values['default_value'] = check_plain(trim($form_values['default_value']));
+    }
+    $node = array();
+    $node[$form_values['field_name']][0]['value'] = $form_values['default_value'];
+    $function = $field_type['module'] .'_field';
+    if (function_exists($function)) {
+      $result = $function('validate', $node, $field, $node[$form_values['field_name']], NULL, NULL);
+    }
+    // The field validation routine won't set an error on the right field, so set it here.
+    if (form_get_errors()) {
+      if (trim($form_values['default_value_php'])) {
+        form_set_error('default_value_php', t('The default value php code created @value which is invalid.', array('@value' => $form_values['default_value'])));
+      }
+      else {
+        form_set_error('default_value', t('The default value is invalid.'));
+      }
+    }
+  }
 }
 
 /**
@@ -834,6 +885,20 @@
   $widget_type = $widget_types[$form_values['widget_type']];
 
   $widget_settings = array();
+
+  // If the content module is handling the default value, store it in the widget settings.
+  $callbacks = module_invoke($field_type['module'], 'widget_settings', 'callbacks', $field);
+  if (!isset($callbacks['default_value']) || !$callbacks['default_value']) {
+    if (trim($form_values['default_value_php'])) {
+      $widget_settings['default_value_php'] = $form_values['default_value_php'];
+      $widget_settings['default_value'] = '';
+    }
+    else {
+      $widget_settings['default_value'] = check_plain(trim($form_values['default_value']));
+      $widget_settings['default_value_php'] = '';
+    }
+  }
+
   $setting_names = module_invoke($widget_type['module'], 'widget_settings', 'save', $field);
   if (is_array($setting_names)) {
     foreach ($setting_names as $setting) {
@@ -888,7 +953,6 @@
   return 'admin/content/types/'. $type['url_str'] .'/fields';
 }
 
-
 /**
  * Perform adds, alters, and drops as needed to synchronize the database with
  * new field definitions.
