From 4c708f4f812dddaadb6608409e137a7838a67635 Mon Sep 17 00:00:00 2001
From: heddn <lucashedding@1463982.no-reply.drupal.org>
Date: Tue, 30 Sep 2014 10:05:08 -0600
Subject: [PATCH] Issue #2104193 by sylus, dsnopek, westwesterson, mpotter,
 heddn: Fixed Default file entities are not exportable by features (Media File
 Entity Overridden).

---
 media.file_default_displays.inc | 61 -----------------------------------------
 media.install                   | 60 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+), 61 deletions(-)
 delete mode 100644 media.file_default_displays.inc

diff --git a/media.file_default_displays.inc b/media.file_default_displays.inc
deleted file mode 100644
index ec7a378..0000000
--- a/media.file_default_displays.inc
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-/**
- * @file
- * Default display configuration for the default file types.
- */
-
-/**
- * Implements hook_file_default_displays().
- */
-function media_file_default_displays() {
-  $file_displays = array();
-
-  // Audio previews should be displayed using a large filetype icon.
-  $file_display = new stdClass();
-  $file_display->api_version = 1;
-  $file_display->name = 'audio__preview__file_field_media_large_icon';
-  $file_display->weight = 50;
-  $file_display->status = TRUE;
-  $file_display->settings = '';
-  $file_displays['audio__preview__file_field_media_large_icon'] = $file_display;
-
-  // Document previews should be displayed using a large filetype icon.
-  $file_display = new stdClass();
-  $file_display->api_version = 1;
-  $file_display->name = 'document__preview__file_field_media_large_icon';
-  $file_display->weight = 50;
-  $file_display->status = TRUE;
-  $file_display->settings = '';
-  $file_displays['document__preview__file_field_media_large_icon'] = $file_display;
-
-  // Image previews should be displayed using a large filetype icon.
-  $file_display = new stdClass();
-  $file_display->api_version = 1;
-  $file_display->name = 'image__preview__file_field_media_large_icon';
-  $file_display->weight = 50;
-  $file_display->status = TRUE;
-  $file_display->settings = '';
-  $file_displays['image__preview__file_field_media_large_icon'] = $file_display;
-
-  // Video previews should be displayed using a large filetype icon.
-  $file_display = new stdClass();
-  $file_display->api_version = 1;
-  $file_display->name = 'video__preview__file_field_media_large_icon';
-  $file_display->weight = 50;
-  $file_display->status = TRUE;
-  $file_display->settings = '';
-  $file_displays['video__preview__file_field_media_large_icon'] = $file_display;
-
-  return $file_displays;
-}
-
-/**
- * Implements hook_file_default_displays_alter().
- */
-function media_file_default_displays_alter(&$file_displays) {
-  // Image previews should be displayed using the media image style.
-  if (isset($file_displays['image__preview__file_field_image'])) {
-    $file_displays['image__preview__file_field_image']->settings['image_style'] = 'media_thumbnail';
-  }
-}
diff --git a/media.install b/media.install
index 43a1745..95fee7c 100644
--- a/media.install
+++ b/media.install
@@ -22,6 +22,9 @@ function media_install() {
   catch (Exception $e) {
     watchdog_exception('media', $e);
   }
+
+  // Fix File Entity default displays issue with exports.
+  _media_default_displays();
 }
 
 /**
@@ -65,6 +68,16 @@ function media_uninstall() {
   variable_del('media_zindex');
   variable_del('media_backgroundcolor');
   variable_del('media_opacity');
+
+  // Revert to preview's default image_style.
+  $file_displays = file_displays_load('image', 'preview');
+  if (isset($file_displays['image__preview__file_field_image'])) {
+    // Only revert if the style is configured to use media's.
+    if ($file_displays['image__preview__file_field_image']->settings['image_style'] == 'media_thumbnail') {
+      $file_displays['image__preview__file_field_image']->settings['image_style'] = 'thumbnail';
+      file_display_save((object) $file_displays['image__preview__file_field_image']);
+    }
+  }
 }
 
 /**
@@ -1171,3 +1184,50 @@ function media_update_7226() {
     user_role_grant_permissions($rid, array('access media browser'));
   }
 }
+
+/**
+ * Fix overridden issues with File Displays
+ */
+function media_update_7227() {
+  _media_default_displays();
+}
+
+/**
+ * Instantiate the File Entity display overrides.
+ */
+function _media_default_displays() {
+  // Create initial display settings.
+  module_load_include('inc', 'file_entity', 'file_entity.file_api');
+  $default_image_styles = array(
+    'preview' => 'preview',
+  );
+  $default_types = array(
+    'audio' => 'audio',
+    'document' => 'document',
+    'video' => 'video',
+  );
+  foreach ($default_types as $types) {
+    foreach ($default_image_styles as $view_mode) {
+      $display_name = $types . '__' . $view_mode . '__file_field_media_large_icon';
+      $existing_display = file_displays_load($types, $view_mode);
+      if (empty($existing_display[$display_name])) {
+        $display = array(
+          'api_version' => 1,
+          'name' => $display_name,
+          'status' => 1,
+          'weight' => 50,
+          'settings' => NULL,
+          'export_type' => NULL,
+        );
+        file_display_save((object) $display);
+      }
+    }
+  }
+
+  // Switch to use media's preview rather than the default.
+  $file_displays = file_displays_load('image', 'preview');
+  if (isset($file_displays['image__preview__file_field_image'])) {
+    $file_displays['image__preview__file_field_image']->settings['image_style'] = 'media_thumbnail';
+    file_display_save((object) $file_displays['image__preview__file_field_image']);
+  }
+}
-- 
2.1.1

