diff --git a/modules/media_wysiwyg/includes/media_wysiwyg.features.inc b/modules/media_wysiwyg/includes/media_wysiwyg.features.inc
new file mode 100644
index 0000000..8bad2d7
--- /dev/null
+++ b/modules/media_wysiwyg/includes/media_wysiwyg.features.inc
@@ -0,0 +1,208 @@
+ array(
+ 'name' => t('Media WYSIWYG'),
+ 'feature_source' => TRUE,
+ 'default_hook' => 'media_wysiwyg_defaults',
+ 'default_file' => FEATURES_DEFAULTS_INCLUDED,
+ ),
+ );
+}
+
+/**
+ * Implements hook_features_export_options().
+ *
+ * Defines what shows up in the feature creation interface
+ */
+function media_wysiwyg_features_export_options() {
+ $options = array();
+ $entity_info = entity_get_info('file');
+ foreach ($entity_info['bundles'] as $file_type => $file_type_info) {
+ $file_type_label = check_plain($file_type_info['label']);
+ $options[$file_type . '_wysiwyg_view_mode'] =
+ t('@file_type WYSIWYG view mode', array('@file_type' => $file_type_label));
+
+ $view_mode_settings = field_view_mode_settings('file', $file_type);
+ foreach ($entity_info['view modes'] as $view_mode => $view_mode_info) {
+ if (!empty($view_mode_settings[$view_mode]['custom_settings'])) {
+ $options[$file_type . '_' . $view_mode . '_restrict_wysiwyg'] =
+ t('@file_type view mode restriction: @view_mode',
+ array('@file_type' => $file_type_label, '@view_mode' => $view_mode_info['label']));
+ }
+ }
+ // Add default option.
+ $options[$file_type . '_default_restrict_wysiwyg'] =
+ t('@file_type view mode restriction: Default', array(
+ '@file_type' => $file_type_label,
+ ));
+ }
+ return $options;
+}
+
+/**
+ * Implements hook_features_export().
+ */
+function media_wysiwyg_features_export($data, &$export, $module_name = '') {
+ $export['dependencies']['media_wysiwyg'] = 'media_wysiwyg';
+
+ $entity_info = entity_get_info('file');
+ foreach ($entity_info['bundles'] as $file_type => $file_type_info) {
+
+ // Export the wysiwyg view mode setting for the file type.
+ $mode_data_key = $file_type . '_wysiwyg_view_mode';
+ if (in_array($mode_data_key, $data, TRUE)) {
+ $view_mode = _media_wysiwyg_get_wysiwyg_mode($file_type);
+ $export['features']['media_wysiwyg'][$mode_data_key] = $mode_data_key;
+ }
+ // Export the restricted view modes for the file type.
+ $view_modes = array_keys($entity_info['view modes']);
+ array_push($view_modes, 'default');
+ foreach ($view_modes as $view_mode) {
+ $restrict_data_key = $file_type . '_' . $view_mode . '_restrict_wysiwyg';
+ if (in_array($restrict_data_key, $data, TRUE)) {
+ $export['features']['media_wysiwyg'][$restrict_data_key] = $restrict_data_key;
+ }
+ }
+ }
+}
+
+/**
+ * Implements hook_features_export_render().
+ */
+function media_wysiwyg_features_export_render($module_name = '', $data, $export = NULL) {
+ $code = array();
+ $code[] = ' $media_wysiwyg = array();';
+ $code[] = '';
+
+ $entity_info = entity_get_info('file');
+ foreach ($entity_info['bundles'] as $file_type => $file_type_info) {
+
+ // Render the wysiwyg view mode setting for the file type.
+ $mode_data_key = $file_type . '_wysiwyg_view_mode';
+ if (array_key_exists($mode_data_key, $data) || in_array($mode_data_key, $data, TRUE)) {
+ $view_mode = _media_wysiwyg_get_wysiwyg_mode($file_type);
+ $view_mode_export = (!empty($view_mode) ? features_var_export($view_mode) : "'none'");
+ $code[] = " // WYSIWYG view mode for $file_type files.";
+ $code[] = " \$media_wysiwyg['{$mode_data_key}'] = {$view_mode_export};";
+ $code[] = "";
+ }
+
+ // Export the restricted view modes for the file type.
+ $restriction_code = array();
+ $restricted_view_modes = _media_wysiwyg_get_restricted_modes($file_type);
+ $view_modes = array_keys($entity_info['view modes']);
+ array_push($view_modes, 'default');
+ foreach ($view_modes as $view_mode) {
+ $restrict_data_key = $file_type . '_' . $view_mode . '_restrict_wysiwyg';
+ if (array_key_exists($restrict_data_key, $data) || in_array($restrict_data_key, $data, TRUE)) {
+ $displays_export = in_array($view_mode, $restricted_view_modes) ? 'TRUE' : 'FALSE';
+ $restriction_code[] = " \$media_wysiwyg['{$restrict_data_key}'] = {$displays_export};";
+ }
+ }
+ if (!empty($restriction_code)) {
+ array_unshift($restriction_code, " // Restricted view modes for $file_type files.");
+ $restriction_code[] = "";
+ $code = array_merge($code, $restriction_code);
+ }
+ }
+
+ $code[] = ' return $media_wysiwyg;';
+ $code = implode("\n", $code);
+
+ return array('media_wysiwyg_defaults' => $code);
+}
+
+/**
+ * Implements hook_features_revert().
+ */
+function media_wysiwyg_features_revert($module) {
+ if ($defaults = features_get_default('media_wysiwyg', $module)) {
+
+ $entity_info = entity_get_info('file');
+ foreach ($entity_info['bundles'] as $file_type => $file_type_info) {
+
+ $mode_data_key = $file_type . '_wysiwyg_view_mode';
+ if (isset($defaults[$mode_data_key])) {
+ $view_mode = $defaults[$mode_data_key];
+ db_delete('media_view_mode_wysiwyg')
+ ->condition('type', $file_type)
+ ->execute();
+ if ($view_mode != 'none') {
+ $record = array('type' => $file_type, 'view_mode' => $view_mode);
+ drupal_write_record('media_view_mode_wysiwyg', $record);
+ }
+ }
+
+ $view_modes = array_keys($entity_info['view modes']);
+ array_push($view_modes, 'default');
+ foreach ($view_modes as $view_mode) {
+ $restrict_data_key = $file_type . '_' . $view_mode . '_restrict_wysiwyg';
+ if (isset($defaults[$restrict_data_key])) {
+ db_delete('media_restrict_wysiwyg')
+ ->condition('type', $file_type)
+ ->condition('display', $view_mode)
+ ->execute();
+ if ($defaults[$restrict_data_key]) {
+ $record = array(
+ 'type' => $file_type,
+ 'display' => $view_mode);
+ drupal_write_record('media_restrict_wysiwyg', $record);
+ }
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Implements hook_features_rebuild().
+ */
+function media_wysiwyg_features_rebuild($module) {
+ media_wysiwyg_features_revert($module);
+}
+
+/**
+ * Implements hook_features_enable_feature().
+ */
+function media_wysiwyg_features_enable_feature($module) {
+ media_wysiwyg_features_revert($module);
+}
+
+/**
+ * Retrieve the WYSIWYG view mode for the specified file type.
+ *
+ * @param string $file_type
+ * The machine name of the file type.
+ */
+function _media_wysiwyg_get_wysiwyg_mode($file_type) {
+ $view_mode = db_query(
+ 'SELECT view_mode FROM {media_view_mode_wysiwyg} WHERE type = :type',
+ array(':type' => $file_type))
+ ->fetchField();
+ return $view_mode;
+}
+
+/**
+ * Retrieve a list of view modes that should not be available in the WYSIWYG for
+ * the specified file type.
+ *
+ * @param string $file_type
+ * The machine name of the file type.
+ */
+function _media_wysiwyg_get_restricted_modes($file_type) {
+ $restricted_view_modes = db_query(
+ 'SELECT display FROM {media_restrict_wysiwyg} WHERE type = :type',
+ array(':type' => $file_type))
+ ->fetchCol();
+ return $restricted_view_modes;
+}
diff --git a/modules/media_wysiwyg/includes/media_wysiwyg.filter.inc b/modules/media_wysiwyg/includes/media_wysiwyg.filter.inc
index f92498a..7d66f9c 100644
--- a/modules/media_wysiwyg/includes/media_wysiwyg.filter.inc
+++ b/modules/media_wysiwyg/includes/media_wysiwyg.filter.inc
@@ -196,11 +196,21 @@ function media_wysiwyg_token_to_markup($match, $wysiwyg = FALSE, $langcode = NUL
if ($wysiwyg) {
$settings['wysiwyg'] = $wysiwyg;
+
+ // Render file in WYSIWYG using appropriate view mode.
+ $view_mode = db_query('SELECT view_mode FROM {media_view_mode_wysiwyg} WHERE type = :type', array(
+ ':type' => $file->type,
+ ))
+ ->fetchField();
+ if (empty($view_mode)) {
+ $view_mode = $tag_info['view_mode'];
+ }
+
// If sending markup to a WYSIWYG, we need to pass the file information so
// that an inline macro can be generated when the WYSIWYG is detached.
// The WYSIWYG plugin is expecting this information in the
// Drupal.settings.mediaDataMap variable.
- $element = media_wysiwyg_get_file_without_label($file, $tag_info['view_mode'], $settings, $langcode);
+ $element = media_wysiwyg_get_file_without_label($file, $view_mode, $settings, $langcode);
$data = array(
'type' => 'media',
'fid' => $file->fid,
@@ -238,13 +248,13 @@ function media_wysiwyg_token_to_markup($match, $wysiwyg = FALSE, $langcode = NUL
}
if (count(element_children($element['content'])) > 1) {
// Add surrounding divs to group them together.
- // We dont want divs when there are no additional fields to allow files
+ // We don't want divs when there are no additional fields to allow files
// to display inline with text, without breaking p tags.
$element['content']['#type'] = 'container';
$element['content']['#attributes']['class'] = array(
'media',
'media-element-container',
- 'media-' . $element['content']['file']['#view_mode']
+ 'media-' . $element['content']['file']['#view_mode'],
);
}
@@ -396,12 +406,23 @@ function media_wysiwyg_get_wysiwyg_allowed_view_modes($file) {
}
$view_modes = $enabled_view_modes[$file->type];
+ media_wysiwyg_wysiwyg_allowed_view_modes_restrict($view_modes, $file);
drupal_alter('media_wysiwyg_allowed_view_modes', $view_modes, $file);
// Invoke the deprecated/misspelled alter hook as well.
drupal_alter('media_wysiwyg_wysiwyg_allowed_view_modes', $view_modes, $file);
return $view_modes;
}
-
+/**
+ * Do not show restricted view modes.
+ */
+function media_wysiwyg_wysiwyg_allowed_view_modes_restrict(&$view_modes, &$file) {
+ $restricted_view_modes = db_query('SELECT display FROM {media_restrict_wysiwyg} WHERE type = :type', array(':type' => $file->type))->fetchCol();
+ foreach ($restricted_view_modes as $restricted_view_mode) {
+ if (array_key_exists($restricted_view_mode, $view_modes)) {
+ unset($view_modes[$restricted_view_mode]);
+ }
+ }
+}
/**
* #pre_render callback: Modify the element if the render cache is filtered.
*/
diff --git a/modules/media_wysiwyg/includes/media_wysiwyg.pages.inc b/modules/media_wysiwyg/includes/media_wysiwyg.pages.inc
index 4f30d8a..482947d 100644
--- a/modules/media_wysiwyg/includes/media_wysiwyg.pages.inc
+++ b/modules/media_wysiwyg/includes/media_wysiwyg.pages.inc
@@ -97,6 +97,9 @@ function media_wysiwyg_format_form($form, &$form_state, $file) {
$form['options']['fields'][$field_name]['#access'] = $allow;
}
+ // Add view mode preview.
+ media_wysiwyg_format_form_view_mode($form, $form_state, $file);
+
// Similar to a form_alter, but we want this to run first so that
// media.types.inc can add the fields specific to a given type (like alt tags
// on media). If implemented as an alter, this might not happen, making other
@@ -110,3 +113,77 @@ function media_wysiwyg_format_form($form, &$form_state, $file) {
return $form;
}
+
+/**
+ * Add ajax preview when selecting view mode in wysiwyg editor.
+ */
+function media_wysiwyg_format_form_view_mode(&$form, $form_state, $file) {
+ // Check to see if a view mode ("format") has already been specified for
+ // this media item. First, check for a standard form-submitted value.
+ if (!empty($form_state['values']['format'])) {
+ $view_mode = $form_state['values']['format'];
+ }
+ // Second, check the request for a JSON-encoded value.
+ elseif (isset($_GET['fields'])) {
+ $query_fields = drupal_json_decode($_GET['fields']);
+ if (isset($query_fields['format'])) {
+ $view_mode = $query_fields['format'];
+ }
+ }
+ // If we were unable to determine a view mode, or we found a view mode
+ // that does not exist in the list of format options presented on this
+ // form, use the default view mode.
+ if (!isset($view_mode) || !array_key_exists($view_mode, $form['options']['format']['#options'])) {
+ $view_mode = variable_get('media_wysiwyg_wysiwyg_default_view_mode', 'full');
+ }
+
+ $form['preview'] = array();
+ $form['preview']['#prefix'] = '
';
+ $form['preview']['thumbnail'] = file_view_file($file, $view_mode);
+ $form['preview']['thumbnail']['#prefix'] = '';
+ $form['preview']['thumbnail']['#suffix'] = '
';
+
+ if (!isset($form['options']['format']['#default_value'])) {
+ $form['options']['format']['#default_value'] = $view_mode;
+ }
+ $form['options']['format']['#ajax'] = array(
+ 'callback' => 'media_wysiwyg_format_form_preview',
+ 'wrapper' => 'media-preview',
+ );
+
+ $wysiwyg_view_mode = db_query('SELECT view_mode FROM {media_view_mode_wysiwyg} WHERE type = :type', array(':type' => $file->type))->fetchField();
+ $view_modes = media_wysiwyg_get_wysiwyg_allowed_view_modes($file);
+ $formats = $options = array();
+
+ foreach ($view_modes as $view_mode => $view_mode_info) {
+ $options[$view_mode] = $view_mode_info['label'];
+
+ if (!empty($wysiwyg_view_mode)) {
+ $element = media_wysiwyg_get_file_without_label($file, $wysiwyg_view_mode, array('wysiwyg' => TRUE));
+ }
+ else {
+ $element = media_wysiwyg_get_file_without_label($file, $view_mode, array('wysiwyg' => TRUE));
+ }
+
+ $formats[$view_mode] = drupal_render($element);
+ }
+
+ $form['#formats'] = $formats;
+ $form['options']['format']['#options'] = $options;
+}
+
+/**
+ * AJAX callback to select the portion of the format form to be updated with a preview.
+ *
+ * @param array $form
+ * An associative array containing the structure of the form.
+ * @param array $form_state
+ * An associative array containing the current state of the form.
+ *
+ * @return array
+ * The preview form item.
+ */
+function media_wysiwyg_format_form_preview($form, $form_state) {
+ return $form['preview']['thumbnail'];
+}
diff --git a/modules/media_wysiwyg/media_wysiwyg.install b/modules/media_wysiwyg/media_wysiwyg.install
index d02a3b2..34d30c2 100644
--- a/modules/media_wysiwyg/media_wysiwyg.install
+++ b/modules/media_wysiwyg/media_wysiwyg.install
@@ -5,6 +5,52 @@
* Install, update and uninstall functions for the Media WYSIWYG module.
*/
+ /**
+ * Implements hook_schema().
+ */
+function media_wysiwyg_schema() {
+ $schema['media_restrict_wysiwyg'] = array(
+ 'description' => 'Stores media displays restricted in wysiwyg.',
+ 'fields' => array(
+ 'type' => array(
+ 'description' => 'The machine name of the file type.',
+ 'type' => 'varchar',
+ 'length' => 255,
+ 'not null' => TRUE,
+ 'default' => '',
+ ),
+ 'display' => array(
+ 'description' => 'The restricted display.',
+ 'type' => 'varchar',
+ 'length' => '255',
+ 'not null' => TRUE,
+ 'default' => '',
+ ),
+ ),
+ );
+ $schema['media_view_mode_wysiwyg'] = array(
+ 'description' => 'Maps WYSIWYG view modes to file types.',
+ 'fields' => array(
+ 'type' => array(
+ 'description' => 'The machine name of the file type.',
+ 'type' => 'varchar',
+ 'length' => 255,
+ 'not null' => TRUE,
+ 'default' => '',
+ ),
+ 'view_mode' => array(
+ 'description' => 'WYSIWYG view mode mapped to this file type.',
+ 'type' => 'varchar',
+ 'length' => 255,
+ 'not null' => TRUE,
+ 'default' => '',
+ ),
+
+ ),
+ );
+ return $schema;
+}
+
/**
* Implements hook_install().
*/
@@ -106,3 +152,49 @@ function media_wysiwyg_update_7204() {
));
}
}
+
+/**
+ * Install {media_restrict_wysiwyg} and {media_view_mode_wysiwyg}.
+ *
+ * Remove variables media_wysiwyg_view_mode_%.
+ *
+ * Uninstall media_wysiwyg_view_mode module.
+ */
+function media_wysiwyg_update_7205() {
+ $schema = media_wysiwyg_schema();
+
+ if (!db_table_exists('media_restrict_wysiwyg')) {
+ db_create_table('media_restrict_wysiwyg', $schema['media_restrict_wysiwyg']);
+ db_create_table('media_view_mode_wysiwyg', $schema['media_view_mode_wysiwyg']);
+ }
+
+ db_delete('variable')->condition('name', "media_wysiwyg_view_mode_%", "LIKE")->execute();
+
+ // Disable and uninstall View Mode module.Since the view mode module is
+ // deleted, this copies from module_disable() and drupal_uninstall_modules().
+ // Disable first.
+ $module = 'media_wysiwyg_view_mode';
+ db_update('system')
+ ->fields(array('status' => 0))
+ ->condition('type', 'module')
+ ->condition('name', $module)
+ ->execute();
+ system_list_reset();
+ module_list(TRUE);
+ module_implements('', FALSE, TRUE);
+ entity_info_cache_clear();
+ // Invoke hook_modules_disabled before disabling modules,
+ // so we can still call module hooks to get information.
+ module_invoke_all('modules_disabled', array($module));
+ // Update the registry to remove the newly-disabled module.
+ registry_update();
+ _system_update_bootstrap_status();
+ // Update the theme registry to remove the newly-disabled module.
+ drupal_theme_rebuild();
+
+ // Now uninstall.
+ drupal_uninstall_schema($module);
+ drupal_set_installed_schema_version($module, SCHEMA_UNINSTALLED);
+
+ module_invoke_all('modules_uninstalled', array($module));
+}
diff --git a/modules/media_wysiwyg/media_wysiwyg.module b/modules/media_wysiwyg/media_wysiwyg.module
index 23a2660..0842270 100644
--- a/modules/media_wysiwyg/media_wysiwyg.module
+++ b/modules/media_wysiwyg/media_wysiwyg.module
@@ -14,6 +14,9 @@ require_once dirname(__FILE__) . '/includes/media_wysiwyg.filter.inc';
// Functions for UUID support to embedded media.
require_once dirname(__FILE__) . '/includes/media_wysiwyg.uuid.inc';
+// Functions for features integration.
+require_once dirname(__FILE__) . '/includes/media_wysiwyg.features.inc';
+
/**
* Implements hook_hook_info().
*/
@@ -523,3 +526,114 @@ function media_wysiwyg_file_displays_alter(&$displays, $file, $view_mode) {
}
}
}
+
+/**
+ * Implements hook_entity_info_alter().
+ *
+ * Add a file type named 'WYSIWYG'.
+ */
+function media_wysiwyg_entity_info_alter(&$entity_info) {
+ $entity_info['file']['view modes'] += array(
+ 'wysiwyg' => array(
+ 'label' => t('WYSIWYG'),
+ 'custom settings' => TRUE,
+ ),
+ );
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter().
+ *
+ * Add select when editing file types to set wysiwyg view mode.
+ */
+function media_wysiwyg_form_file_entity_file_type_form_alter(&$form, &$form_state) {
+ $options = array();
+
+ // Add an option allowing users not to use a view mode.
+ $options['none'] = t('None');
+
+ // Add the default view mode by default.
+ $options['default'] = t('Default');
+
+ $entity_info = entity_get_info('file');
+ foreach ($entity_info['view modes'] as $view_mode => $view_mode_info) {
+ $options[$view_mode] = check_plain($view_mode_info['label']);
+ }
+
+ $file_type = $form['#file_type']->type;
+ $view_mode = db_query('SELECT view_mode FROM {media_view_mode_wysiwyg} WHERE type = :type', array(':type' => $file_type))->fetchField();
+ $view_mode = empty($view_mode) ? 'none' : $view_mode;
+
+ $form['file_wysiwyg_view_mode'] = array(
+ '#type' => 'select',
+ '#title' => t('WYSIWYG view mode'),
+ '#options' => $options,
+ '#default_value' => $view_mode,
+ '#description' => t('View mode to be used when displaying files inside of the WYSIWYG editor.'),
+ );
+
+ // Move submit after our select box. There might be a better way to do this.
+ $form['submit']['#weight'] = 1;
+
+ array_unshift($form['#submit'], 'media_wysiwyg_form_file_entity_file_type_form_alter_submit');
+}
+
+/**
+ * Custom submit handler.
+ *
+ * Save wysiwyg view mode.
+ *
+ * @see media_wysiwyg_form_file_entity_file_type_form_alter().
+ */
+function media_wysiwyg_form_file_entity_file_type_form_alter_submit(&$form, &$form_state) {
+ $file_type = $form['#file_type']->type;
+ $view_mode = $form_state['values']['file_wysiwyg_view_mode'];
+ db_delete('media_view_mode_wysiwyg')->condition('type', $file_type)->execute();
+ if ($view_mode != 'none') {
+ $record = array('type' => $file_type, 'view_mode' => $view_mode);
+ drupal_write_record('media_view_mode_wysiwyg', $record);
+ }
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter().
+ *
+ * Add checkbox to restrict file type view mode availability in wysiwyg.
+ */
+function media_wysiwyg_form_file_entity_file_display_form_alter(&$form, &$form_state) {
+ $file_type = $form['#file_type'];
+ $view_mode = $form['#view_mode'];
+
+ if ($view_mode != 'none') {
+ $restricted = db_query(
+ 'SELECT 1 FROM {media_restrict_wysiwyg} WHERE type = :type and display = :display',
+ array(':type' => $file_type, ':display' => $view_mode)
+ )->fetchField();
+ $form['restrict_wysiwyg'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Restrict in WYSIWYG'),
+ '#description' => t('If checked, then this mode will not be allowed from the WYSIWYG.'),
+ '#default_value' => !empty($restricted),
+ );
+ array_unshift($form['#submit'], 'media_wysiwyg_form_file_entity_file_display_form_alter_submit');
+ }
+
+ return $form;
+}
+
+/**
+ * Custom submit handler.
+ *
+ * Save restricted wysiwyg file types.
+ *
+ * @see media_wysiwyg_form_file_entity_file_display_form_alter().
+ */
+function media_wysiwyg_form_file_entity_file_display_form_alter_submit(&$form, &$form_state) {
+ $file_type = $form['#file_type'];
+ $view_mode = $form['#view_mode'];
+ db_delete('media_restrict_wysiwyg')->condition('type', $file_type)->condition('display', $view_mode)->execute();
+ if (!empty($form_state['values']['restrict_wysiwyg'])) {
+ $record = array('type' => $file_type, 'display' => $view_mode);
+ drupal_write_record('media_restrict_wysiwyg', $record);
+ }
+}
diff --git a/modules/media_wysiwyg/media_wysiwyg.test b/modules/media_wysiwyg/media_wysiwyg.test
index b66dc68..6b0aaa3 100644
--- a/modules/media_wysiwyg/media_wysiwyg.test
+++ b/modules/media_wysiwyg/media_wysiwyg.test
@@ -99,3 +99,89 @@ abstract class MediaWYSIWYGTestHelper extends DrupalWebTestCase {
}
}
+
+/**
+ * Defines base class for media_wysiwyg_view_mode test cases.
+ */
+class MediaWYSIWYGViewModeTestHelper extends MediaWYSIWYGTestHelper {
+ function setUp() {
+ parent::setUp();
+
+ $web_user = $this->drupalCreateUser(array('access administration pages', 'administer file types', 'view files', 'use media wysiwyg'));
+ $this->drupalLogin($web_user);
+ }
+}
+
+/**
+ * Test configuring view modes available on the format form.
+ */
+class FormatFormViewModesTest extends MediaWYSIWYGViewModeTestHelper {
+ public static function getInfo() {
+ return array(
+ 'name' => 'Format Form WYSIWYG View Modes',
+ 'description' => 'Test configuring view modes available on the format form.',
+ 'group' => 'Media WYSIWYG',
+ );
+ }
+
+ function setUp() {
+ parent::setUp();
+ }
+
+ /**
+ * Configure format form view mode restrictions and ensure that they are followed.
+ */
+ function testAllowedFormatFormViewModes() {
+ // Create an image file to test with.
+ $files = $this->drupalGetTestFiles('image');
+ $files[0]->status = FILE_STATUS_PERMANENT;
+ $file = file_save($files[0]);
+ $fid = $file->fid;
+
+ // Teaser view mode should be selectable.
+ $this->drupalGet('media/' . $fid . '/format-form');
+ $this->assertResponse(200);
+ $this->assertOption('edit-format', 'teaser');
+
+ // Restrict the use of the default view mode.
+ $this->drupalGet('admin/structure/file-types/manage/image/file-display/teaser');
+ $this->assertResponse(200);
+ $edit = array(
+ 'restrict_wysiwyg' => 1,
+ );
+ $this->drupalPost(NULL, $edit, t('Save configuration'));
+ $this->assertResponse(200);
+
+ // Teaser view mode should be restricted.
+ $this->drupalGet('media/' . $fid . '/format-form');
+ $this->assertResponse(200);
+ $this->assertNoOption('edit-format', 'teaser');
+ }
+
+ /**
+ * Assert that a select option in the current page exists.
+ *
+ * @param $id
+ * id of select field to assert.
+ * @param $option
+ * Option to assert.
+ */
+ function assertOption($id, $option, $message = '', $group = 'Browser') {
+ $options = $this->xpath('//select[@id=:id]/option[@value=:option]', array(':id' => $id, ':option' => $option));
+ return $this->assertTrue(isset($options[0]), $message ? $message : t('Option @option for field @id exists.', array('@option' => $option, '@id' => $id)));
+ }
+
+ /**
+ * Assert that a select option in the current page does not exist.
+ *
+ * @param $id
+ * id of select field to assert.
+ * @param $option
+ * Option to assert.
+ */
+ function assertNoOption($id, $option, $message = '', $group = 'Browser') {
+ $options = $this->xpath('//select[@id=:id]/option[@value=:option]', array(':id' => $id, ':option' => $option));
+ return $this->assertFalse(isset($options[0]), $message ? $message : t('Option @option for field @id does not exist.', array('@option' => $option, '@id' => $id)));
+ }
+
+}
diff --git a/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.info b/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.info
deleted file mode 100644
index be52310..0000000
--- a/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Media WYSIWYG View Mode
-description = Enables files inside of the WYSIWYG editor to be displayed using a separate view mode.
-package = Media
-core = 7.x
-dependencies[] = media_wysiwyg
-files[] = media_wysiwyg_view_mode.test
diff --git a/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.install b/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.install
deleted file mode 100644
index 56b706f..0000000
--- a/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.install
+++ /dev/null
@@ -1,15 +0,0 @@
-condition('name', "media_wysiwyg_view_mode_%", "LIKE")
- ->execute();
-}
diff --git a/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.module b/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.module
deleted file mode 100644
index 997f1c5..0000000
--- a/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.module
+++ /dev/null
@@ -1,155 +0,0 @@
- array(
- 'label' => t('WYSIWYG'),
- 'custom settings' => TRUE,
- ),
- );
-}
-
-/**
- * Implements hook_media_wysiwyg_allowed_view_modes_alter().
- */
-function media_wysiwyg_view_mode_media_wysiwyg_allowed_view_modes_alter(&$view_modes, &$file) {
- if (variable_get("media_wysiwyg_view_mode_{$file->type}_wysiwyg_restricted_view_modes_status")) {
- $restricted_view_modes = variable_get("media_wysiwyg_view_mode_{$file->type}_wysiwyg_restricted_view_modes", array());
- foreach ($restricted_view_modes as $restricted_view_mode) {
- if (array_key_exists($restricted_view_mode, $view_modes)) {
- unset($view_modes[$restricted_view_mode]);
- }
- }
- }
-}
-
-/**
- * Implements hook_entity_view_mode_alter().
- */
-function media_wysiwyg_view_mode_entity_view_mode_alter(&$view_mode, $context) {
- if ($context['entity_type'] == 'file' && !empty($context['entity']->override['wysiwyg'])) {
- if (variable_get("media_wysiwyg_view_mode_{$context['entity']->type}_file_wysiwyg_view_mode_status")) {
- $view_mode = variable_get("media_wysiwyg_view_mode_{$context['entity']->type}_file_wysiwyg_view_mode", 'wysiwyg');
- }
- }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- */
-function media_wysiwyg_view_mode_form_media_wysiwyg_format_form_alter(&$form, $form_state) {
- // Check to see if a view mode ("format") has already been specified for
- // this media item. First, check for a standard form-submitted value.
- if (!empty($form_state['values']['format'])) {
- $view_mode = $form_state['values']['format'];
- }
- // Second, check the request for a JSON-encoded value.
- elseif (isset($_GET['fields'])) {
- $query_fields = drupal_json_decode($_GET['fields']);
- if (isset($query_fields['format'])) {
- $view_mode = $query_fields['format'];
- }
- }
- // If we were unable to determine a view mode, or we found a view mode
- // that does not exist in the list of format options presented on this
- // form, use the default view mode.
- if (!isset($view_mode) || !array_key_exists($view_mode, $form['options']['format']['#options'])) {
- $view_mode = $form['options']['format']['#default_value'];
- }
-
- // Display an actual preview instead of media_get_thumbnail_preview().
- // @todo Should this code be merged up to media_wysiwyg_format_form?
- $form['preview']['#prefix'] = '';
- $form['preview']['#suffix'] = '
';
- $form['preview']['#markup'] = $form_state['storage']['view_mode_previews'][$view_mode];
-
- // Change the preview when the user changes the format.
- $form['options']['format']['#ajax'] = array(
- 'callback' => 'media_wysiwyg_view_mode_form_media_wysiwyg_format_form_preview',
- 'wrapper' => 'preview',
- );
-}
-
-/**
- * AJAX callback to select the portion of the format form to be updated with a preview.
- *
- * @param array $form
- * An associative array containing the structure of the form.
- * @param array $form_state
- * An associative array containing the current state of the form.
- *
- * @return array
- * The preview form item.
- */
-function media_wysiwyg_view_mode_form_media_wysiwyg_format_form_preview($form, $form_state) {
- return $form['preview'];
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- */
-function media_wysiwyg_view_mode_form_file_entity_file_type_form_alter(&$form, $form_state) {
- $type = $form_state['build_info']['args'][0];
- $view_mode_options = media_wysiwyg_get_file_type_view_mode_options($type->type);
-
- $form['media_wysiwyg_view_mode'] = array(
- '#type' => 'fieldset',
- '#title' => t('Media WYSIWYG View Modes'),
- '#collapsible' => TRUE,
- '#collapsed' => TRUE,
- '#tree' => TRUE,
- );
-
- $form['media_wysiwyg_view_mode']["media_wysiwyg_view_mode_{$type->type}_wysiwyg_restricted_view_modes_status"] = array(
- '#type' => 'checkbox',
- '#title' => t('Restrict allowed view modes when embedding with the WYSIWYG', array('%type' => $type->label)),
- '#default_value' => variable_get("media_wysiwyg_view_mode_{$type->type}_wysiwyg_restricted_view_modes_status", FALSE),
- );
- $form['media_wysiwyg_view_mode']["media_wysiwyg_view_mode_{$type->type}_wysiwyg_restricted_view_modes"] = array(
- '#type' => 'checkboxes',
- '#title' => t('Select which view modes cannot be selected'),
- '#options' => $view_mode_options,
- '#default_value' => variable_get("media_wysiwyg_view_mode_{$type->type}_wysiwyg_restricted_view_modes", array()),
- '#states' => array(
- 'visible' => array(
- ':input[name="media_wysiwyg_view_mode[media_wysiwyg_view_mode_' . $type->type . '_wysiwyg_restricted_view_modes_status]"]' => array('checked' => TRUE),
- ),
- ),
- );
- $form['media_wysiwyg_view_mode']["media_wysiwyg_view_mode_{$type->type}_file_wysiwyg_view_mode_status"] = array(
- '#type' => 'checkbox',
- '#title' => t('Use a specific view mode when the file is previewed in the WYSIWYG'),
- '#default_value' => variable_get("media_wysiwyg_view_mode_{$type->type}_file_wysiwyg_view_mode_status", 0),
- );
- $form['media_wysiwyg_view_mode']["media_wysiwyg_view_mode_{$type->type}_file_wysiwyg_view_mode"] = array(
- '#type' => 'select',
- '#title' => t('View mode to always use in the WYSIWYG'),
- '#options' => $view_mode_options,
- '#default_value' => variable_get("media_wysiwyg_view_mode_{$type->type}_file_wysiwyg_view_mode", 'wysiwyg'),
- '#states' => array(
- 'visible' => array(
- ':input[name="media_wysiwyg_view_mode[media_wysiwyg_view_mode_' . $type->type . '_file_wysiwyg_view_mode_status]"]' => array('checked' => TRUE),
- ),
- ),
- );
-
- $form['#submit'][] = 'media_wysiwyg_view_mode_form_file_entity_file_type_form_submit';
-}
-
-function media_wysiwyg_view_mode_form_file_entity_file_type_form_submit($form, $form_state) {
- $values = $form_state['values']['media_wysiwyg_view_mode'];
- foreach ($values as $key => $value) {
- if (is_array($value)) {
- $value = array_filter($value);
- }
- variable_set($key, $value);
- }
-}
diff --git a/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.test b/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.test
deleted file mode 100644
index 0609e18..0000000
--- a/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.test
+++ /dev/null
@@ -1,56 +0,0 @@
-drupalCreateUser(array('view files', 'use media wysiwyg', 'administer file types'));
- $this->drupalLogin($web_user);
- }
-}
-
-/**
- * Test configuring view modes available on the format form.
- */
-class FormatFormViewModesTest extends MediaWYSIWYGViewModeTestHelper {
- public static function getInfo() {
- return array(
- 'name' => 'Format Form WYSIWYG View Modes',
- 'description' => 'Test configuring view modes available on the format form.',
- 'group' => 'Media WYSIWYG View Mode',
- );
- }
-
- /**
- * Configure format form view mode restrictions and ensure that they are followed.
- */
- function testAllowedFormatFormViewModes() {
- // Create an image file to test with.
- $files = $this->drupalGetTestFiles('image');
- $files[0]->status = FILE_STATUS_PERMANENT;
- $file = file_save($files[0]);
- $fid = $file->fid;
-
- // The default view mode should be selected by default.
- $this->drupalGet('media/' . $fid . '/format-form');
- $this->assertOptionSelected('edit-format', 'default');
-
- $edit = array(
- 'media_wysiwyg_view_mode[media_wysiwyg_view_mode_image_wysiwyg_restricted_view_modes_status]' => TRUE,
- 'media_wysiwyg_view_mode[media_wysiwyg_view_mode_image_wysiwyg_restricted_view_modes][default]' => TRUE,
- );
- $this->drupalPost('admin/structure/file-types/manage/image/edit', $edit, 'Save');
-
- // The teaser view mode should now be selected by default.
- $this->drupalGet('media/' . $fid . '/format-form');
- $this->assertOptionSelected('edit-format', 'teaser');
- }
-}