Index: date_api.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/date/date_api.module,v
retrieving revision 1.64.2.5.2.71
diff -u -r1.64.2.5.2.71 date_api.module
--- date_api.module	17 Feb 2009 14:37:14 -0000	1.64.2.5.2.71
+++ date_api.module	19 Feb 2009 19:53:02 -0000
@@ -1731,7 +1731,18 @@
     $_date_formats = _date_formats_build();
   }
 
-  return $type ? (isset($_date_formats[$type]) ? $_date_formats[$type] : FALSE) : $_date_formats;
+  //Only keep formats of the type wanted.
+  if (!empty($type)) {
+    $_date_formats_trimmed = array();
+    foreach ($_date_formats as $format => $info) {
+      if ($info['type'] == $type) {
+        $_date_formats_trimmed[$info['format']] = $info;
+      }
+    }
+    $_date_formats = $_date_formats_trimmed;
+  }
+
+  return $_date_formats;
 }
 
 /**
@@ -1785,10 +1796,8 @@
 function date_formats_rebuild() {
   $date_formats = date_get_formats(NULL, TRUE);
 
-  foreach ($date_formats as $format_type => $formats) {
-    foreach ($formats as $format => $info) {
-      date_format_save($info);
-    }
+  foreach ($date_formats as $format => $info) {
+    date_format_save($info);
   }
 
   // Rebuild configured date formats locale list.
@@ -1973,30 +1982,23 @@
     if (!in_array($module_format['type'], array_keys($types))) {
       continue;
     }
-    if (!isset($date_formats[$module_format['type']])) {
-      $date_formats[$module_format['type']] = array();
-    }
 
     // If another module already set this format, merge in the new settings.
-    if (isset($date_formats[$module_format['type']][$module_format['format']])) {
-      $date_formats[$module_format['type']][$module_format['format']] = array_merge_recursive($date_formats[$module_format['type']][$module_format['format']], $format);
+    if (isset($date_formats[$module_format['format']])) {
+      $date_formats[$module_format['format']] = array_merge_recursive($date_formats[$module_format['format']], $format);
     }
     else {
       // This setting will be overridden later if it already exists in the db.
       $module_format['is_new'] = TRUE;
-      $date_formats[$module_format['type']][$module_format['format']] = $module_format;
+      $date_formats[$module_format['format']] = $module_format;
     }
   }
 
   // Get custom formats added to the database by the end user.
   $result = db_query('SELECT df.dfid, df.format, df.type, df.locked, dfl.language FROM {date_format} df LEFT JOIN {date_format_types} dft ON df.type = dft.type LEFT JOIN {date_format_locale} dfl ON df.format = dfl.format AND df.type = dfl.type ORDER BY df.type, df.format');
   while ($object = db_fetch_object($result)) {
-    // If this format type isn't set, initialise the array.
-    if (!isset($date_formats[$object->type])) {
-      $date_formats[$object->type] = array();
-    }
     // If this format not already present, add it to the array.
-    if (!isset($date_formats[$object->type][$object->format])) {
+    if (!isset($date_formats[$object->format])) {
       // We don't set 'is_new' as it is already in the db.
       $format = array();
       $format['module'] = '';
@@ -2005,7 +2007,7 @@
       $format['type'] = $object->type;
       $format['locked'] = $object->locked;
       $format['locales'] = array($object->language);
-      $date_formats[$object->type][$object->format] = $format;
+      $date_formats[$object->format] = $format;
     }
     // Format already present, so merge in settings.
     else {
@@ -2013,12 +2015,7 @@
       $format['is_new'] = FALSE; // It's in the db, so override this setting.
       $format['dfid'] = $object->dfid;
       $format['format'] = $object->format;
-      $format['type'] = $object->type;
-      $format['locked'] = $object->locked;
-      if (!empty($object->language)) {
-        $format['locales'] = array_merge($date_formats[$object->type][$object->format]['locales'], array($object->language));
-      }
-      $date_formats[$object->type][$object->format] = array_merge($date_formats[$object->type][$object->format], $format);
+      $date_formats[$object->format] = array_merge($date_formats[$object->format], $format);
     }
   }
 
@@ -2084,17 +2081,15 @@
     $options = array();
     $now = date_example_date();
     if (!empty($now)) {
-      foreach ($formats as $type => $format_types) {
-        foreach ($format_types as $format => $format_attributes) {
-          // Create an option that shows date only without time, along with the
-          // default string which has both date and time.
-          $no_time = date_limit_format($format, array('month', 'day', 'year'));
-          $zones = array('', 'O', 'P', 'e');
-          foreach ($zones as $zone) {
-            $time_format = !empty($zone) ? $format .' '. $zone : $format;
-            $options[$no_time] = date_format_date($now, 'custom', $no_time);
-            $options[$time_format] = date_format_date($now, 'custom', $time_format);
-          }
+      foreach ($formats as $format => $format_attributes) {
+        // Create an option that shows date only without time, along with the
+        // default string which has both date and time.
+        $no_time = date_limit_format($format, array('month', 'day', 'year'));
+        $zones = array('', 'O', 'P', 'e');
+        foreach ($zones as $zone) {
+          $time_format = !empty($zone) ? $format .' '. $zone : $format;
+          $options[$no_time] = date_format_date($now, 'custom', $no_time);
+          $options[$time_format] = date_format_date($now, 'custom', $time_format);
         }
       }
       asort($options);

