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']['#suffix'] = '
'; + $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'); - } -}