From c33da192c13a357bf0c75bd556457da78f991a68 Mon Sep 17 00:00:00 2001
From: Dries Buytaert <dries@buytaert.net>
Date: Wed, 9 Sep 2009 21:21:54 +0000
Subject: [PATCH] - Patch #567092 by rcross, yched, bjaspan: merge
 hook_field_formatter_info() and hook_theme().

---
 modules/field/field.api.php                | 19 +++++++++++++++----
 modules/field/field.module                 | 10 ++++++++--
 modules/field/modules/list/list.module     | 14 --------------
 modules/field/modules/number/number.module | 14 ++++++++++----
 modules/field/modules/text/text.module     | 12 ------------
 modules/file/file.module                   |  9 ---------
 modules/taxonomy/taxonomy.module           |  6 ------
 7 files changed, 33 insertions(+), 51 deletions(-)

diff --git a/modules/field/field.api.php b/modules/field/field.api.php
index a06880d69ae8..47c2da25c788 100644
--- a/modules/field/field.api.php
+++ b/modules/field/field.api.php
@@ -663,14 +663,25 @@ function hook_field_widget_error($element, $error) {
  * of drupal_render() on the render structure built by field_attach_view().
  *
  * The name of the theme hook invoked when displaying the values is derived
- * from formatter type names, following the pattern:
- * field_formatter_FORMATTER_NAME
- * The module implementing the formatters needs to register those theme hooks
- * using hook_theme().
+ * from formatter type names, using the pattern field_formatter_FORMATTER_NAME.
+ * field.module takes care of exposing the corresponding theme functions
+ * through hook_theme().  Specifically, field.module defines the theme
+ * hook:
+ *
+ * @code
+ *   'field_formatter_FORMATTER_NAME' => array(
+ *     'arguments' => array('element' => NULL),
+ *   )
+ * @code
+ *
+ * If a formatter requires a different theme hook definition,
+ * implement hook_theme_registry_alter().
  *
  * @see hook_field_formatter_info().
  * @see hook_field_formatter_info_alter().
  * @see theme_field_formatter_FORMATTER_NAME().
+ * @see hook_theme().
+ * @see hook_theme_registry_alter().
  *
  * @return
  *   An array describing the formatter types implemented by the module.
diff --git a/modules/field/field.module b/modules/field/field.module
index 05ebb8488938..ef27a0618980 100644
--- a/modules/field/field.module
+++ b/modules/field/field.module
@@ -153,8 +153,7 @@ function field_help($path, $arg) {
  */
 function field_theme() {
   $path = drupal_get_path('module', 'field') . '/theme';
-
-  return array(
+  $items = array(
     'field' => array(
       'template' => 'field',
       'arguments' => array('element' => NULL),
@@ -164,6 +163,13 @@ function field_theme() {
       'arguments' => array('element' => NULL),
     ),
   );
+  $field_formatters = field_info_formatter_types(NULL);
+  foreach ($field_formatters as $key => $field_formatter) {
+	$items["field_formatter_$key"] = array(
+      'arguments' => array('element' => NULL),
+    );
+  }
+  return $items;
 }
 
 /**
diff --git a/modules/field/modules/list/list.module b/modules/field/modules/list/list.module
index f827272467c4..9f29b2161e8c 100644
--- a/modules/field/modules/list/list.module
+++ b/modules/field/modules/list/list.module
@@ -6,20 +6,6 @@
  * Defines list field types that can be used with the Options module.
  */
 
-/**
- * Implement hook_theme().
- */
-function list_theme() {
-  return array(
-    'field_formatter_list_default' => array(
-      'arguments' => array('element' => NULL),
-    ),
-    'field_formatter_list_key' => array(
-      'arguments' => array('element' => NULL),
-    ),
-  );
-}
-
 /**
  * Implement hook_field_info().
  */
diff --git a/modules/field/modules/number/number.module b/modules/field/modules/number/number.module
index c9d09428a9f8..dafe254cd29b 100644
--- a/modules/field/modules/number/number.module
+++ b/modules/field/modules/number/number.module
@@ -12,12 +12,18 @@
 function number_theme() {
   return array(
     'number' => array('arguments' => array('element' => NULL)),
-    'field_formatter_number_integer' => array('arguments' => array('element' => NULL), 'function' => 'theme_field_formatter_number'),
-    'field_formatter_number_decimal' => array('arguments' => array('element' => NULL), 'function' => 'theme_field_formatter_number'),
-    'field_formatter_number_unformatted' => array('arguments' => array('element' => NULL)),
   );
 }
 
+/**
+ * Implement hook_theme_alter().
+ */
+function number_theme_registry_alter(&$theme_registry) {
+  // The number_integer and number_decimal formatters use the same function.
+  $theme_registry['field_formatter_number_integer']['function'] = 'theme_field_formatter_number';
+  $theme_registry['field_formatter_number_decimal']['function'] = 'theme_field_formatter_number';
+}
+
 /**
  * Implement hook_field_info().
  */
@@ -204,7 +210,7 @@ function number_field_is_empty($item, $field) {
  */
 function number_field_formatter_info() {
   return array(
-    'number_integer' => array(
+    'number_default' => array(
       'label' => t('default'),
       'field types' => array('number_integer'),
       'settings' =>  array(
diff --git a/modules/field/modules/text/text.module b/modules/field/modules/text/text.module
index 5bbe8764227d..d6653d873c9e 100644
--- a/modules/field/modules/text/text.module
+++ b/modules/field/modules/text/text.module
@@ -17,18 +17,6 @@ function text_theme() {
     'text_textfield' => array(
       'arguments' => array('element' => NULL),
     ),
-    'field_formatter_text_default' => array(
-      'arguments' => array('element' => NULL),
-    ),
-    'field_formatter_text_plain' => array(
-      'arguments' => array('element' => NULL),
-    ),
-    'field_formatter_text_trimmed' => array(
-      'arguments' => array('element' => NULL),
-    ),
-    'field_formatter_text_summary_or_trimmed' => array(
-      'arguments' => array('element' => NULL),
-    ),
   );
 }
 
diff --git a/modules/file/file.module b/modules/file/file.module
index 4af5bae07dc8..23542942a320 100644
--- a/modules/file/file.module
+++ b/modules/file/file.module
@@ -85,15 +85,6 @@ function file_theme() {
     'file_upload_help' => array(
       'arguments' => array('upload_validators' => NULL),
     ),
-    'field_formatter_file_default' => array(
-      'arguments' => array('element' => NULL),
-    ),
-    'field_formatter_file_table' => array(
-      'arguments' => array('element' => NULL),
-    ),
-    'field_formatter_file_url_plain' => array(
-      'arguments' => array('element' => NULL),
-    ),
   );
 }
 
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index 6621361052d9..039b7bca03c6 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -91,12 +91,6 @@ function taxonomy_theme() {
     'taxonomy_overview_terms' => array(
       'arguments' => array('form' => array()),
     ),
-    'field_formatter_taxonomy_term_link' => array(
-      'arguments' => array('element' => NULL),
-    ),
-    'field_formatter_taxonomy_term_plain' => array(
-      'arguments' => array('element' => NULL),
-    ),
     'taxonomy_autocomplete' => array(
       'arguments' => array('element' => NULL),
     ),
-- 
GitLab