Issue #3081233 by phenaproxima, webchick, Wim Leers, oknate, xjm: The default display for new media types should only show the source field
parent
67dd0adb63
commit
9aa8a35cd2
|
@ -16,7 +16,6 @@ use Drupal\Core\Session\AccountInterface;
|
||||||
use Drupal\Core\Template\Attribute;
|
use Drupal\Core\Template\Attribute;
|
||||||
use Drupal\Core\Url;
|
use Drupal\Core\Url;
|
||||||
use Drupal\field\FieldConfigInterface;
|
use Drupal\field\FieldConfigInterface;
|
||||||
use Drupal\media\Plugin\media\Source\Image;
|
|
||||||
use Drupal\media\Plugin\media\Source\OEmbedInterface;
|
use Drupal\media\Plugin\media\Source\OEmbedInterface;
|
||||||
use Drupal\views\ViewExecutable;
|
use Drupal\views\ViewExecutable;
|
||||||
|
|
||||||
|
@ -517,36 +516,6 @@ function media_field_widget_form_alter(&$element, FormStateInterface $form_state
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Implements hook_form_FORM_ID_alter().
|
|
||||||
*/
|
|
||||||
function media_form_media_type_add_form_alter(array &$form, FormStateInterface $form_state, $form_id) {
|
|
||||||
$form['actions']['submit']['#submit'][] = '_media_type_add_form_submit';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Submit callback for media_type_add_form.
|
|
||||||
*/
|
|
||||||
function _media_type_add_form_submit(array &$form, FormStateInterface $form_state) {
|
|
||||||
$type = $form_state->getFormObject()->getEntity();
|
|
||||||
|
|
||||||
if (!is_a($type->getSource(), Image::class, TRUE)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load the default entity view display.
|
|
||||||
$display = \Drupal::service('entity_display.repository')
|
|
||||||
->getViewDisplay('media', $type->id());
|
|
||||||
|
|
||||||
// Remove all default components.
|
|
||||||
foreach (array_keys($display->getComponents()) as $name) {
|
|
||||||
$display->removeComponent($name);
|
|
||||||
}
|
|
||||||
$type->getSource()->prepareViewDisplay($type, $display);
|
|
||||||
|
|
||||||
$display->save();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implements hook_views_query_substitutions().
|
* Implements hook_views_query_substitutions().
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -339,7 +339,9 @@ abstract class MediaSourceBase extends PluginBase implements MediaSourceInterfac
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function prepareViewDisplay(MediaTypeInterface $type, EntityViewDisplayInterface $display) {
|
public function prepareViewDisplay(MediaTypeInterface $type, EntityViewDisplayInterface $display) {
|
||||||
$display->setComponent($this->getSourceFieldDefinition($type)->getName());
|
$display->setComponent($this->getSourceFieldDefinition($type)->getName(), [
|
||||||
|
'label' => 'visually_hidden',
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -363,6 +363,11 @@ class MediaTypeForm extends EntityForm {
|
||||||
}
|
}
|
||||||
if ($source_field->isDisplayConfigurable('view')) {
|
if ($source_field->isDisplayConfigurable('view')) {
|
||||||
$display = $this->entityDisplayRepository->getViewDisplay('media', $media_type->id());
|
$display = $this->entityDisplayRepository->getViewDisplay('media', $media_type->id());
|
||||||
|
|
||||||
|
// Remove all default components.
|
||||||
|
foreach (array_keys($display->getComponents()) as $name) {
|
||||||
|
$display->removeComponent($name);
|
||||||
|
}
|
||||||
$source->prepareViewDisplay($media_type, $display);
|
$source->prepareViewDisplay($media_type, $display);
|
||||||
$display->save();
|
$display->save();
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ class AudioFile extends File {
|
||||||
public function prepareViewDisplay(MediaTypeInterface $type, EntityViewDisplayInterface $display) {
|
public function prepareViewDisplay(MediaTypeInterface $type, EntityViewDisplayInterface $display) {
|
||||||
$display->setComponent($this->getSourceFieldDefinition($type)->getName(), [
|
$display->setComponent($this->getSourceFieldDefinition($type)->getName(), [
|
||||||
'type' => 'file_audio',
|
'type' => 'file_audio',
|
||||||
|
'label' => 'visually_hidden',
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -174,7 +174,6 @@ class Image extends File {
|
||||||
// set an image style.
|
// set an image style.
|
||||||
$field_name = $this->getSourceFieldDefinition($type)->getName();
|
$field_name = $this->getSourceFieldDefinition($type)->getName();
|
||||||
$component = $display->getComponent($field_name);
|
$component = $display->getComponent($field_name);
|
||||||
$component['label'] = 'visually_hidden';
|
|
||||||
$component['settings']['image_link'] = '';
|
$component['settings']['image_link'] = '';
|
||||||
$component['settings']['image_style'] = '';
|
$component['settings']['image_style'] = '';
|
||||||
if ($this->entityTypeManager->getStorage('image_style')->load('large')) {
|
if ($this->entityTypeManager->getStorage('image_style')->load('large')) {
|
||||||
|
|
|
@ -442,6 +442,7 @@ class OEmbed extends MediaSourceBase implements OEmbedInterface {
|
||||||
public function prepareViewDisplay(MediaTypeInterface $type, EntityViewDisplayInterface $display) {
|
public function prepareViewDisplay(MediaTypeInterface $type, EntityViewDisplayInterface $display) {
|
||||||
$display->setComponent($this->getSourceFieldDefinition($type)->getName(), [
|
$display->setComponent($this->getSourceFieldDefinition($type)->getName(), [
|
||||||
'type' => 'oembed',
|
'type' => 'oembed',
|
||||||
|
'label' => 'visually_hidden',
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ class VideoFile extends File {
|
||||||
public function prepareViewDisplay(MediaTypeInterface $type, EntityViewDisplayInterface $display) {
|
public function prepareViewDisplay(MediaTypeInterface $type, EntityViewDisplayInterface $display) {
|
||||||
$display->setComponent($this->getSourceFieldDefinition($type)->getName(), [
|
$display->setComponent($this->getSourceFieldDefinition($type)->getName(), [
|
||||||
'type' => 'file_video',
|
'type' => 'file_video',
|
||||||
|
'label' => 'visually_hidden',
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -62,8 +62,10 @@ class MediaSourceFileTest extends MediaSourceTestBase {
|
||||||
// Get the media entity view URL from the creation message.
|
// Get the media entity view URL from the creation message.
|
||||||
$this->drupalGet($this->assertLinkToCreatedMedia());
|
$this->drupalGet($this->assertLinkToCreatedMedia());
|
||||||
|
|
||||||
// Make sure the thumbnail is displayed.
|
// Make sure a link to the file is displayed.
|
||||||
$assert_session->elementAttributeContains('css', '.image-style-thumbnail', 'src', 'generic.png');
|
$assert_session->linkExists($test_filename);
|
||||||
|
// The thumbnail should not be displayed.
|
||||||
|
$assert_session->elementNotExists('css', '.image-style-thumbnail');
|
||||||
|
|
||||||
// Make sure checkbox changes the visibility of log message field.
|
// Make sure checkbox changes the visibility of log message field.
|
||||||
$this->drupalGet("media/1/edit");
|
$this->drupalGet("media/1/edit");
|
||||||
|
|
|
@ -141,8 +141,10 @@ class MediaSourceOEmbedVideoTest extends MediaSourceTestBase {
|
||||||
$this->assertSame('480', $session->evaluateScript("$inner_frame.getAttribute('width')"));
|
$this->assertSame('480', $session->evaluateScript("$inner_frame.getAttribute('width')"));
|
||||||
$this->assertLessThanOrEqual(240, $session->evaluateScript("$inner_frame.clientWidth"));
|
$this->assertLessThanOrEqual(240, $session->evaluateScript("$inner_frame.clientWidth"));
|
||||||
|
|
||||||
// Make sure the thumbnail is displayed from uploaded image.
|
// The oEmbed content iFrame should be visible.
|
||||||
$assert_session->elementAttributeContains('css', '.image-style-thumbnail', 'src', '/oembed_thumbnails/' . basename($thumbnail));
|
$assert_session->elementExists('css', 'iframe.media-oembed-content');
|
||||||
|
// The thumbnail should not be displayed.
|
||||||
|
$assert_session->elementNotExists('css', '.image-style-thumbnail');
|
||||||
|
|
||||||
// Load the media and check that all fields are properly populated.
|
// Load the media and check that all fields are properly populated.
|
||||||
$media = Media::load(1);
|
$media = Media::load(1);
|
||||||
|
|
|
@ -113,11 +113,14 @@ abstract class MediaSourceTestBase extends MediaJavascriptTestBase {
|
||||||
* The media source ID.
|
* The media source ID.
|
||||||
* @param array $provided_fields
|
* @param array $provided_fields
|
||||||
* (optional) An array of field machine names this type provides.
|
* (optional) An array of field machine names this type provides.
|
||||||
|
* @param string $source_label_visibility
|
||||||
|
* (optional) The visibility that the source field label is expected to
|
||||||
|
* have. Defaults to 'visually_hidden'.
|
||||||
*
|
*
|
||||||
* @return \Drupal\media\MediaTypeInterface
|
* @return \Drupal\media\MediaTypeInterface
|
||||||
* The created media type.
|
* The created media type.
|
||||||
*/
|
*/
|
||||||
public function doTestCreateMediaType($media_type_id, $source_id, array $provided_fields = []) {
|
public function doTestCreateMediaType($media_type_id, $source_id, array $provided_fields = [], $source_label_visibility = 'visually_hidden') {
|
||||||
$session = $this->getSession();
|
$session = $this->getSession();
|
||||||
$page = $session->getPage();
|
$page = $session->getPage();
|
||||||
$assert_session = $this->assertSession();
|
$assert_session = $this->assertSession();
|
||||||
|
@ -146,12 +149,27 @@ abstract class MediaSourceTestBase extends MediaJavascriptTestBase {
|
||||||
$this->drupalGet('admin/structure/media');
|
$this->drupalGet('admin/structure/media');
|
||||||
$assert_session->pageTextContains($media_type_id);
|
$assert_session->pageTextContains($media_type_id);
|
||||||
|
|
||||||
|
$media_type = MediaType::load($media_type_id);
|
||||||
|
|
||||||
|
// Assert that the default display of the media type only shows the source
|
||||||
|
// field.
|
||||||
|
$this->drupalGet("/admin/structure/media/manage/$media_type_id/display");
|
||||||
|
// There should be only one field with editable settings, and it should be
|
||||||
|
// the source field.
|
||||||
|
$assert_session->elementsCount('css', 'input[name$="_settings_edit"]', 1);
|
||||||
|
$source_field_name = $media_type->getSource()
|
||||||
|
->getSourceFieldDefinition($media_type)
|
||||||
|
->getName();
|
||||||
|
$assert_session->buttonExists("{$source_field_name}_settings_edit");
|
||||||
|
// Ensure the source field label is configured as expected.
|
||||||
|
$assert_session->fieldValueEquals("fields[$source_field_name][label]", $source_label_visibility);
|
||||||
|
|
||||||
// Bundle definitions are statically cached in the context of the test, we
|
// Bundle definitions are statically cached in the context of the test, we
|
||||||
// need to make sure we have updated information before proceeding with the
|
// need to make sure we have updated information before proceeding with the
|
||||||
// actions on the UI.
|
// actions on the UI.
|
||||||
\Drupal::service('entity_type.bundle.info')->clearCachedBundles();
|
\Drupal::service('entity_type.bundle.info')->clearCachedBundles();
|
||||||
|
|
||||||
return MediaType::load($media_type_id);
|
return $media_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue