? FIELD-TO-COLUMN-PARTIAL.patch
? Makefile
? constants.pl
? d6-50-nodes.sql.gz
? d7-50-nodes-new.sql.gz
? d7-50-nodes.sql.gz
? head.kpf
? patches
? modules/field/field.cron.inc
? modules/field/field.delete.inc
? modules/field/modules/combo
? scripts/OLD-generate-autoload.pl
? scripts/generate-autoload.pl
? sites/all/cck
? sites/all/modules/devel
? sites/all/modules/pbs
? sites/all/modules/taint
? sites/default/files
? sites/default/settings.php
Index: modules/field/field.crud.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.crud.inc,v
retrieving revision 1.16
diff -u -F^[fc] -r1.16 field.crud.inc
--- modules/field/field.crud.inc	24 Jun 2009 18:16:38 -0000	1.16
+++ modules/field/field.crud.inc	30 Jun 2009 21:22:52 -0000
@@ -273,6 +273,9 @@ function field_create_field($field) {
   // Clear caches
   field_cache_clear(TRUE);
 
+  // Invoke external hooks after the cache is cleared for API consistency.
+  module_invoke_all('field_create_field', $field);
+  
   return $field;
 }
 
Index: modules/field/field.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.test,v
retrieving revision 1.28
diff -u -F^[fc] -r1.28 field.test
--- modules/field/field.test	24 Jun 2009 18:16:38 -0000	1.28
+++ modules/field/field.test	30 Jun 2009 21:22:52 -0000
@@ -45,6 +45,11 @@ class FieldAttachTestCase extends Drupal
       )
     );
     field_create_instance($this->instance);
+
+    // Store a copy of the field and instance structures that will be
+    // passed by _field_invoke() to hook_field_$op so we can test them.
+    $this->invoke_field = field_info_field($this->field_name);
+    $this->invoke_instance = field_info_instance($this->field_name, $this->instance['bundle']);
   }
 
   /**
@@ -861,6 +866,26 @@ class FieldAttachTestCase extends Drupal
   }
 
   /**
+   * Test field_attach_presave().
+   *
+   * Field API performs no action for presave other than calling
+   * hook_field_presave() and hook_field_attach_presave().
+   */
+  function testFieldAttachPresave() {
+    $entity_type = 'test_entity';
+    $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
+    $values = $this->_generateTestFieldValues($this->field['cardinality']);
+    $entity->{$this->field_name} = $values;
+
+    field_test_memorize();
+    field_attach_presave($entity_type, $entity);
+    $mem = field_test_memorize();
+    
+    $this->assertIdentical($mem['field_test_field_presave'][0], array('test_entity', $entity, $this->invoke_field, $this->invoke_instance, $values, NULL, NULL), 'field_attach_presave calls hook_field_presave correctly');
+    $this->assertIdentical($mem['field_test_field_attach_presave'][0], array('test_entity', $entity), 'field_attach_presave calls hook_field_attach_presave');
+  }
+
+  /**
    * Generate random values for a field_test field.
    *
    * @param $cardinality
@@ -1320,8 +1345,10 @@ class FieldCrudTestCase extends DrupalWe
       'field_name' => 'field_2',
       'type' => 'test_field',
     );
+    field_test_memorize();
     $field_definition = field_create_field($field_definition);
-
+    $mem = field_test_memorize();
+    $this->assertEqual(count($mem['field_test_field_create_field']), 1, 'Called hook_field_create_field() in successful field_create_field() call.');
     $field = field_read_field($field_definition['field_name']);
 
     // Ensure that basic properties are preserved.
Index: modules/simpletest/tests/field_test.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/field_test.module,v
retrieving revision 1.9
diff -u -F^[fc] -r1.9 field_test.module
--- modules/simpletest/tests/field_test.module	27 May 2009 18:34:00 -0000	1.9
+++ modules/simpletest/tests/field_test.module	30 Jun 2009 21:22:53 -0000
@@ -365,6 +365,331 @@ function field_test_field_schema($field)
   );
 }
 
+function field_test_memorize($tag = NULL, $args = NULL) {
+  $memorize =& drupal_static(__FUNCTION__, NULL);
+
+  if (is_null($tag)) {
+    $ret = $memorize;
+    $memorize = array();
+    return $ret;
+  }
+  if (is_array($memorize)) {
+    $memorize[$tag][] = $args;
+  }
+}
+
+/**
+ * Memorize calls to hook_field_presave().
+ */
+function field_test_field_presave($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_insert().
+ */
+function field_test_field_insert($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_update().
+ */
+function field_test_field_update($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_delete().
+ */
+function field_test_field_delete($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_delete_revision().
+ */
+function field_test_field_delete_revision($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_prepare_translation().
+ */
+function field_test_field_prepare_translation($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_form().
+ */
+function field_test_field_attach_form($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_preload().
+ */
+function field_test_field_attach_preload($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_load().
+ */
+function field_test_field_attach_load($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_validate().
+ */
+function field_test_field_attach_validate($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_submit().
+ */
+function field_test_field_attach_submit($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_presave().
+ */
+function field_test_field_attach_presave($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_pre_insert().
+ */
+function field_test_field_attach_pre_insert($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_pre_update().
+ */
+function field_test_field_attch_pre_update($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_pre_query().
+ */
+function field_test_field_attach_pre_query($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_delete().
+ */
+function field_test_field_attach_delete($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_delete_revision().
+ */
+function field_test_field_attach_delete_revision($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_view_alter().
+ */
+function field_test_field_attach_view_alter($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_create_bundle().
+ */
+function field_test_field_attach_create_bundle($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_rename_bundle().
+ */
+function field_test_field_attach_rename_bundle($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_attach_delete_bundle().
+ */
+function field_test_field_attach_delete_bundle($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_storage_load().
+ */
+function field_test_field_storage_load($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_storage_write().
+ */
+function field_test_field_storage_write($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_storage_delete().
+ */
+function field_test_field_storage_delete($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_storage_delete_revision().
+ */
+function field_test_field_storage_delete_revision($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_storage_query().
+ */
+function field_test_field_storage_query($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_storage_create_bundle().
+ */
+function field_test_field_storage_create_bundle($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_storage_rename_bundle().
+ */
+function field_test_field_storage_rename_bundle($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_storage_create_field().
+ */
+function field_test_field_storage_create_field($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_storage_delete_field().
+ */
+function field_test_field_storage_delete_field($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_storage_delete_instance().
+ */
+function field_test_field_storage_delete_instance($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_create_field().
+ */
+function field_test_field_create_field($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_create_instance().
+ */
+function field_test_field_create_instance($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_delete_field().
+ */
+function field_test_field_delete_field($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_update_instance().
+ */
+function field_test_field_update_instance($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_delete_instance().
+ */
+function field_test_field_delete_instance($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_read_field().
+ */
+function field_test_field_read_field($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_read_instance().
+ */
+function field_test_field_read_instance($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
+ * Memorize calls to hook_field_access().
+ */
+function field_test_field_access($field) {
+  $args = func_get_args();
+  field_test_memorize(__FUNCTION__, $args);
+}
+
 /**
  * Implement hook_field_validate().
  *
