commit a0b4aab5fbe5de542b3d28cd0719bce9f7d2d8eb Author: Yves Chedemois Date: Sat Jun 15 23:53:13 2013 +0200 fix file prepare_view + formatter (minimal fix) diff --git a/core/modules/file/file.field.inc b/core/modules/file/file.field.inc index 0af47f7..7e8ee39 100644 --- a/core/modules/file/file.field.inc +++ b/core/modules/file/file.field.inc @@ -191,27 +191,23 @@ function file_field_prepare_view($entity_type, $entities, $field, $instances, $l $fids = array(); foreach ($entities as $id => $entity) { foreach ($items[$id] as $delta => $item) { - if (!file_field_displayed($item, $field)) { - unset($items[$id][$delta]); - } - elseif (!empty($item['fid'])) { + // @todo Fixes from http://drupal.org/node/2020677 + if (file_field_displayed($item, $field) && !empty($item['fid'])) { // Load the files from the files table. $fids[] = $item['fid']; } } - // Ensure consecutive deltas. - $items[$id] = array_values($items[$id]); } - $files = file_load_multiple($fids); - foreach ($entities as $id => $entity) { - foreach ($items[$id] as $delta => $item) { - // If the file does not exist, mark the entire item as empty. - if (empty($item['fid']) || !isset($files[$item['fid']])) { - $items[$id][$delta] = NULL; - } - else { - $items[$id][$delta]['entity'] = $files[$item['fid']]; + if ($fids) { + $files = file_load_multiple($fids); + + foreach ($entities as $id => $entity) { + foreach ($items[$id] as $delta => $item) { + // If the file does not exist, mark the entire item as empty. + if (!empty($item['fid'])) { + $items[$id][$delta]['entity'] = isset($files[$item['fid']]) ? $files[$item['fid']] : NULL; + } } } } diff --git a/core/modules/file/lib/Drupal/file/Plugin/field/formatter/GenericFileFormatter.php b/core/modules/file/lib/Drupal/file/Plugin/field/formatter/GenericFileFormatter.php index 3cb0eda..a6dbee1 100644 --- a/core/modules/file/lib/Drupal/file/Plugin/field/formatter/GenericFileFormatter.php +++ b/core/modules/file/lib/Drupal/file/Plugin/field/formatter/GenericFileFormatter.php @@ -33,11 +33,14 @@ public function viewElements(EntityInterface $entity, $langcode, array $items) { $elements = array(); foreach ($items as $delta => $item) { - $elements[$delta] = array( - '#theme' => 'file_link', - '#file' => $item['entity'], - '#description' => $item['description'], - ); + // @todo Fixes from http://drupal.org/node/2020677 + if ($item['display'] && $item['entity']) { + $elements[$delta] = array( + '#theme' => 'file_link', + '#file' => $item['entity'], + '#description' => $item['description'], + ); + } } return $elements;