Index: includes/content.crud.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/includes/Attic/content.crud.inc,v
retrieving revision 1.76.2.14
diff -u -r1.76.2.14 content.crud.inc
--- includes/content.crud.inc	7 Nov 2008 15:02:02 -0000	1.76.2.14
+++ includes/content.crud.inc	29 Mar 2009 04:22:51 -0000
@@ -42,9 +42,10 @@
     $field['active'] = 1;
   }
 
-  $field['columns'] = module_invoke($module, 'field_settings', 'database columns', $field);
+  $field['columns'] = (array) module_invoke($module, 'field_settings', 'database columns', $field);
+  drupal_alter('field_settings', $field['columns'], 'database columns', $field);
   // Ensure columns always default to NULL values.
-  foreach ((array) $field['columns'] as $column_name => $column) {
+  foreach ($field['columns'] as $column_name => $column) {
     $field['columns'][$column_name]['not null'] = FALSE;
   }
 
@@ -53,11 +54,10 @@
   $field['db_storage'] = CONTENT_DB_STORAGE_PER_CONTENT_TYPE;
 
   // Make sure field settings all have an index in the array.
-  $setting_names = module_invoke($module, 'field_settings', 'save', $field);
-  if (is_array($setting_names)) {
-    foreach ($setting_names as $setting) {
-      $field[$setting] = NULL;
-    }
+  $setting_names = (array) module_invoke($module, 'field_settings', 'save', $field);
+  drupal_alter('field_settings', $setting_names, 'save', $field);
+  foreach ($setting_names as $setting) {
+    $field[$setting] = NULL;
   }
   return $field;
 }
@@ -93,9 +93,10 @@
   }
 
   // Make sure widget settings all have an index in the array.
-  $settings_names = module_invoke($module, 'widget_settings', 'save', $widget);
+  $settings_names = (array) module_invoke($module, 'widget_settings', 'save', $widget);
+  drupal_alter('widget_settings', $settings_names, 'save', $widget);
   $widget['widget_settings'] = array();
-  foreach ((array) $settings_names as $name) {
+  foreach ($settings_names as $name) {
     $widget['widget_settings'][$name] = NULL;
   }
   return $widget;
@@ -240,6 +241,7 @@
 
   // Get a fresh copy of the column information whenever a field is created.
   $field['columns'] = (array) module_invoke($field['module'], 'field_settings', 'database columns', $field);
+  drupal_alter('field_settings', $field['columns'], 'database columns', $field);
 
   if (empty($prev_field['widget']) || $prior_instances < 1) {
     // If this is the first instance, create the field.
@@ -313,6 +315,7 @@
   // Changes in field values may affect columns, or column
   // information may have changed, get a fresh copy.
   $field['columns'] = (array) module_invoke($field['module'], 'field_settings', 'database columns', $field);
+  drupal_alter('field_settings', $field['columns'], 'database columns', $field);
 
   // If the database storage has changed, update the field and previous instances.
   $prior_instances = content_field_instance_read(array('field_name' => $field['field_name']));
@@ -364,14 +367,14 @@
 function _content_field_write($field, $op = 'update') {
   // Rearrange the data to create the global_settings array.
   $field['global_settings'] = array();
-  $setting_names = module_invoke($field['module'], 'field_settings', 'save', $field);
-  if (is_array($setting_names)) {
-    foreach ($setting_names as $setting) {
-      // Unlike _content_field_instance_write() and 'widget_settings', 'global_settings'
-      // is never preexisting, so we take no particular precautions here.
-      $field['global_settings'][$setting] = isset($field[$setting]) ? $field[$setting] : '';
-      unset($field[$setting]);
-    }
+  $setting_names = (array) module_invoke($field['module'], 'field_settings', 'save', $field);
+  drupal_alter('field_settings', $setting_names, 'save', $field);
+
+  foreach ($setting_names as $setting) {
+    // Unlike _content_field_instance_write() and 'widget_settings', 'global_settings'
+    // is never preexisting, so we take no particular precautions here.
+    $field['global_settings'][$setting] = isset($field[$setting]) ? $field[$setting] : '';
+    unset($field[$setting]);
   }
   // 'columns' is a reserved word in MySQL4, so our column is named 'db_columns'.
   $field['db_columns'] = $field['columns'];
@@ -400,16 +403,15 @@
   $field = content_field_instance_collapse($field);
 
   // Rearrange the data to create the widget_settings array.
-  $setting_names = module_invoke($field['widget_module'], 'widget_settings', 'save', $field);
-  if (is_array($setting_names)) {
-    foreach ($setting_names as $setting) {
-      // In some cases (when the updated $field was originally read from
-      // the db, as opposed to gathered from the values of a form), the values
-      // are already in the right place, we take care to not wipe them.
-      if (isset($field[$setting])) {
-        $field['widget_settings'][$setting] = $field[$setting];
-        unset($field[$setting]);
-      }
+  $setting_names = (array) module_invoke($field['widget_module'], 'widget_settings', 'save', $field);
+  drupal_alter('widget_settings', $setting_names, 'save', $field);
+  foreach ($setting_names as $setting) {
+    // In some cases (when the updated $field was originally read from
+    // the db, as opposed to gathered from the values of a form), the values
+    // are already in the right place, we take care to not wipe them.
+    if (isset($field[$setting])) {
+      $field['widget_settings'][$setting] = $field[$setting];
+      unset($field[$setting]);
     }
   }
 
Index: includes/content.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/includes/Attic/content.admin.inc,v
retrieving revision 1.181.2.67
diff -u -r1.181.2.67 content.admin.inc
--- includes/content.admin.inc	23 Mar 2009 23:22:37 -0000	1.181.2.67
+++ includes/content.admin.inc	29 Mar 2009 04:22:51 -0000
@@ -1022,10 +1022,11 @@
     '#type' => 'hidden',
     '#default_value' => $field['widget']['weight'],
   );
-  $additions = module_invoke($widget_type['module'], 'widget_settings', 'form', $field['widget']);
-  if (is_array($additions)) {
-    $form['widget'] = array_merge($form['widget'], $additions);
-  }
+
+  $additions = (array) module_invoke($widget_type['module'], 'widget_settings', 'form', $field['widget']);
+  drupal_alter('widget_settings', $additions, 'form', $field['widget']);
+  $form['widget'] = array_merge($form['widget'], $additions);
+
   $form['widget']['description'] = array(
     '#type' => 'textarea',
     '#title' => t('Help text'),
@@ -1141,10 +1142,9 @@
     '#value' => serialize($field),
   );
 
-  $additions = module_invoke($field_type['module'], 'field_settings', 'form', $field);
-  if (is_array($additions)) {
-    $form['field'] = array_merge($form['field'], $additions);
-  }
+  $additions = (array) module_invoke($field_type['module'], 'field_settings', 'form', $field);
+  drupal_alter('field_settings', $additions, 'form', $field);
+  $form['field'] = array_merge($form['field'], $additions);
 
   $form['submit'] = array(
     '#type' => 'submit',
Index: content.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/Attic/content.install,v
retrieving revision 1.85.2.30
diff -u -r1.85.2.30 content.install
--- content.install	7 Nov 2008 16:24:58 -0000	1.85.2.30
+++ content.install	29 Mar 2009 04:22:48 -0000
@@ -69,7 +69,8 @@
     if (!empty($field['module']) && !empty($field['widget_module'])) {
       $field['widget_settings'] = unserialize($field['widget_settings']);
       $field['display_settings'] = unserialize($field['display_settings']);
-      $field['columns'] = module_invoke($field['module'], 'field_settings', 'database columns', $field);
+      $field['columns'] = (array) module_invoke($field['module'], 'field_settings', 'database columns', $field);
+      drupal_alter('field_settings', $field['columns'], 'database columns', $field);
       $field = content_field_instance_expand($field);
       $fields[$field['type_name']][$field['field_name']] = $field;
     }
Index: content.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/Attic/content.module,v
retrieving revision 1.301.2.100
diff -u -r1.301.2.100 content.module
--- content.module	18 Mar 2009 19:20:52 -0000	1.301.2.100
+++ content.module	29 Mar 2009 04:22:50 -0000
@@ -605,7 +605,8 @@
   foreach ($types as $type_name => $fields) {
     foreach ($fields as $field) {
       if ($field['module'] == $module && !in_array($field['field_name'], $fields_set)) {
-        $columns = module_invoke($field['module'], 'field_settings', 'database columns', $field);
+        $columns = (array) module_invoke($field['module'], 'field_settings', 'database columns', $field);
+        drupal_alter('field_settings', $columns, 'database columns', $field);
         db_query("UPDATE {". content_field_tablename() ."} SET db_columns = '%s' WHERE field_name = '%s'", serialize($columns), $field['field_name']);
         $fields_set[] = $field['field_name'];
       }
Index: includes/views/content.views_convert.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/includes/views/Attic/content.views_convert.inc,v
retrieving revision 1.1.2.4
diff -u -r1.1.2.4 content.views_convert.inc
--- includes/views/content.views_convert.inc	6 Oct 2008 15:11:39 -0000	1.1.2.4
+++ includes/views/content.views_convert.inc	29 Mar 2009 04:22:51 -0000
@@ -22,7 +22,8 @@
     foreach ($types as $ctype) {
       foreach ($ctype['fields'] as $field) {
         $module = $field['module'];
-        $result = module_invoke($module, 'field_settings', 'views data', $field);
+        $result = (array) module_invoke($module, 'field_settings', 'views data', $field);
+        drupal_alter('field_settings', $result, 'views data', $field);
         if (empty($result)) {
           // The views field name had the column name appended,
           // like field_name_value or field_username_uid.
Index: includes/views/content.views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/includes/views/Attic/content.views.inc,v
retrieving revision 1.1.2.22
diff -u -r1.1.2.22 content.views.inc
--- includes/views/content.views.inc	14 Jan 2009 13:19:47 -0000	1.1.2.22
+++ includes/views/content.views.inc	29 Mar 2009 04:22:51 -0000
@@ -138,7 +138,8 @@
   $data = array();
   foreach (content_fields() as $field) {
     $module = $field['module'];
-    $result = module_invoke($module, 'field_settings', 'views data', $field);
+    $result = (array) module_invoke($module, 'field_settings', 'views data', $field);
+    drupal_alter('field_settings', $result, 'views data', $field);
     if (empty($result)) {
       $result = content_views_field_views_data($field);
     }
