diff --git a/core/modules/media/config/install/media.settings.yml b/core/modules/media/config/install/media.settings.yml index a1b32c58f6..32c0935743 100644 --- a/core/modules/media/config/install/media.settings.yml +++ b/core/modules/media/config/install/media.settings.yml @@ -1,4 +1,4 @@ icon_base_uri: 'public://media-icons/generic' iframe_domain: '' oembed_providers_url: 'https://oembed.com/providers.json' -standalone_media_url: false +standalone_url: false diff --git a/core/modules/media/config/schema/media.schema.yml b/core/modules/media/config/schema/media.schema.yml index 4357489672..3fa37b5655 100644 --- a/core/modules/media/config/schema/media.schema.yml +++ b/core/modules/media/config/schema/media.schema.yml @@ -11,9 +11,9 @@ media.settings: oembed_providers_url: type: uri label: 'The URL of the oEmbed providers database in JSON format' - standalone_media_url: + standalone_url: type: boolean - label: 'Standalone Media URL' + label: 'Allow media entities to be viewed at media/ID' media.type.*: type: config_entity diff --git a/core/modules/media/media.module b/core/modules/media/media.module index 50e741b792..f877a47025 100644 --- a/core/modules/media/media.module +++ b/core/modules/media/media.module @@ -352,7 +352,7 @@ function _media_get_add_url($allowed_bundles) { * Implements hook_entity_type_alter(). */ function media_entity_type_alter(array &$entity_types) { - if (\Drupal::config('media.settings')->get('standalone_media_url')) { + if (\Drupal::config('media.settings')->get('standalone_url')) { /** @var \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type */ $entity_type = $entity_types['media']; $entity_type->setLinkTemplate('canonical', '/media/{media}'); diff --git a/core/modules/media/media.post_update.php b/core/modules/media/media.post_update.php index c6e7b6f8ce..fca9fbc82e 100644 --- a/core/modules/media/media.post_update.php +++ b/core/modules/media/media.post_update.php @@ -20,11 +20,11 @@ function media_post_update_storage_handler() { } /** - * Keeps canonical routes for Media entities enabled on existing sites. + * Keeps the standalone URL for Media entities enabled on existing sites. */ -function media_post_update_enable_canonical_routes() { +function media_post_update_enable_standalone_url() { \Drupal::configFactory() ->getEditable('media.settings') - ->set('standalone_media_url', TRUE) + ->set('standalone_url', TRUE) ->save(TRUE); } diff --git a/core/modules/media/src/EventSubscriber/MediaConfigSubscriber.php b/core/modules/media/src/EventSubscriber/MediaConfigSubscriber.php index fec467a569..e8648d9acb 100644 --- a/core/modules/media/src/EventSubscriber/MediaConfigSubscriber.php +++ b/core/modules/media/src/EventSubscriber/MediaConfigSubscriber.php @@ -10,7 +10,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** - * A subscriber triggering a route rebuild when certain configuration changes. + * Listens to the config save event for media.settings. */ class MediaConfigSubscriber implements EventSubscriberInterface { @@ -53,14 +53,17 @@ public function __construct(RouteBuilderInterface $router_builder, CacheTagsInva } /** - * Informs the router builder a rebuild is needed when necessary. + * This method is executed on all config save events. + * + * Informs the router builder a rebuild is needed and clears the entity types + * cache when necessary. * * @param \Drupal\Core\Config\ConfigCrudEvent $event - * The Event to process. + * The ConfigCrudEvent to process. */ public function onSave(ConfigCrudEvent $event) { $saved_config = $event->getConfig(); - if ($saved_config->getName() === 'media.settings' && $event->isChanged('standalone_media_url')) { + if ($saved_config->getName() === 'media.settings' && $event->isChanged('standalone_url')) { $this->cacheTagsInvalidator->invalidateTags([ // The configuration change triggers entity type definition changes, // which in turn triggers routes to appear or disappear. diff --git a/core/modules/media/src/Form/MediaSettingsForm.php b/core/modules/media/src/Form/MediaSettingsForm.php index 173e347641..8e7f868c01 100644 --- a/core/modules/media/src/Form/MediaSettingsForm.php +++ b/core/modules/media/src/Form/MediaSettingsForm.php @@ -103,11 +103,11 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#description' => $this->t('Enter a different domain from which to serve oEmbed content, including the http:// or https:// prefix. This domain needs to point back to this site, or existing oEmbed content may not display correctly, or at all.'), ]; - $form['security']['standalone_media_url'] = [ + $form['security']['standalone_url'] = [ '#prefix' => '
', '#type' => 'checkbox', '#title' => $this->t('Standalone media URL'), - '#default_value' => $this->config('media.settings')->get('standalone_media_url'), + '#default_value' => $this->config('media.settings')->get('standalone_url'), '#description' => $this->t("Allow users to access @media-entities on media/{id}.", ['@media-entities' => $this->entityTypeManager->getDefinition('media')->getPluralLabel()]), ]; return parent::buildForm($form, $form_state); @@ -119,7 +119,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { public function submitForm(array &$form, FormStateInterface $form_state) { $this->config('media.settings') ->set('iframe_domain', $form_state->getValue('iframe_domain')) - ->set('standalone_media_url', $form_state->getValue('standalone_media_url')) + ->set('standalone_url', $form_state->getValue('standalone_url')) ->save(); parent::submitForm($form, $form_state); diff --git a/core/modules/media/src/Plugin/Derivative/DynamicLocalTasks.php b/core/modules/media/src/Plugin/Derivative/DynamicLocalTasks.php index b7d5ba8429..ddf48a53db 100644 --- a/core/modules/media/src/Plugin/Derivative/DynamicLocalTasks.php +++ b/core/modules/media/src/Plugin/Derivative/DynamicLocalTasks.php @@ -62,8 +62,7 @@ public static function create(ContainerInterface $container, $base_plugin_id) { * {@inheritdoc} */ public function getDerivativeDefinitions($base_plugin_definition) { - // The canonical has to be always there as a base task. Without a standalone - // media URL this task is labeled 'Edit'. + // Provide an edit_form task if standalone media URLs are enabled. $this->derivatives["entity.media.canonical"] = [ 'route_name' => "entity.media.canonical", 'title' => $this->t('Edit'), @@ -71,9 +70,7 @@ public function getDerivativeDefinitions($base_plugin_definition) { 'weight' => 1, ] + $base_plugin_definition; - // With a standalone media URL the canonical task has to be re-labeled to - // 'Title' and a dedicated edit task has to be added. - if ($this->config->get('standalone_media_url')) { + if ($this->config->get('standalone_url')) { $this->derivatives["entity.media.canonical"]['title'] = $this->t('View'); $this->derivatives["entity.media.edit_form"] = [ diff --git a/core/modules/media/src/Routing/MediaRouteProvider.php b/core/modules/media/src/Routing/MediaRouteProvider.php index 63c3ebe909..d6a402a112 100644 --- a/core/modules/media/src/Routing/MediaRouteProvider.php +++ b/core/modules/media/src/Routing/MediaRouteProvider.php @@ -2,19 +2,49 @@ namespace Drupal\media\Routing; +use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Core\Entity\EntityFieldManagerInterface; use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\Routing\AdminHtmlRouteProvider; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Provides HTML routes for media pages. */ class MediaRouteProvider extends AdminHtmlRouteProvider { + /** + * The media settings config. + * + * @var \Drupal\Core\Config\ImmutableConfig + */ + protected $config; + + /** + * {@inheritdoc} + */ + public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, ConfigFactoryInterface $config_factory) { + parent::__construct($entity_type_manager, $entity_field_manager); + $this->config = $config_factory->get('media.settings'); + } + + /** + * {@inheritdoc} + */ + public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { + return new static( + $container->get('entity_type.manager'), + $container->get('entity_field.manager'), + $container->get('config.factory') + ); + } + /** * {@inheritdoc} */ protected function getCanonicalRoute(EntityTypeInterface $entity_type) { - if (\Drupal::config('media.settings')->get('standalone_media_url')) { + if ($this->config->get('standalone_url')) { return parent::getCanonicalRoute($entity_type); } else { diff --git a/core/modules/media/tests/src/Functional/FieldFormatter/OEmbedFormatterTest.php b/core/modules/media/tests/src/Functional/FieldFormatter/OEmbedFormatterTest.php index 354fb55171..eecc9cde5f 100644 --- a/core/modules/media/tests/src/Functional/FieldFormatter/OEmbedFormatterTest.php +++ b/core/modules/media/tests/src/Functional/FieldFormatter/OEmbedFormatterTest.php @@ -36,10 +36,10 @@ protected function setUp() { \Drupal::configFactory() ->getEditable('media.settings') - ->set('standalone_media_url', TRUE) + ->set('standalone_url', TRUE) ->save(TRUE); - $this->rebuildAll(); + $this->container->get('router.builder')->rebuild(); } /** diff --git a/core/modules/media/tests/src/Functional/MediaAccessTest.php b/core/modules/media/tests/src/Functional/MediaAccessTest.php index 14a8fcccbf..15659456ea 100644 --- a/core/modules/media/tests/src/Functional/MediaAccessTest.php +++ b/core/modules/media/tests/src/Functional/MediaAccessTest.php @@ -170,10 +170,10 @@ public function testCanonicalMediaAccess() { \Drupal::configFactory() ->getEditable('media.settings') - ->set('standalone_media_url', TRUE) + ->set('standalone_url', TRUE) ->save(TRUE); - $this->rebuildAll(); + $this->container->get('router.builder')->rebuild(); // Create media. $media = Media::create([ diff --git a/core/modules/media/tests/src/Functional/MediaCacheTagsTest.php b/core/modules/media/tests/src/Functional/MediaCacheTagsTest.php index 7275d68015..a2c3530abc 100644 --- a/core/modules/media/tests/src/Functional/MediaCacheTagsTest.php +++ b/core/modules/media/tests/src/Functional/MediaCacheTagsTest.php @@ -31,9 +31,9 @@ protected function setUp() { parent::setUp(); \Drupal::configFactory() ->getEditable('media.settings') - ->set('standalone_media_url', TRUE) + ->set('standalone_url', TRUE) ->save(TRUE); - $this->rebuildAll(); + $this->container->get('router.builder')->rebuild(); } /** diff --git a/core/modules/media/tests/src/Functional/MediaContextualLinksTest.php b/core/modules/media/tests/src/Functional/MediaContextualLinksTest.php index 0426d3b095..5eeaa95ce8 100644 --- a/core/modules/media/tests/src/Functional/MediaContextualLinksTest.php +++ b/core/modules/media/tests/src/Functional/MediaContextualLinksTest.php @@ -24,10 +24,10 @@ class MediaContextualLinksTest extends MediaFunctionalTestBase { public function testMediaContextualLinks() { \Drupal::configFactory() ->getEditable('media.settings') - ->set('standalone_media_url', TRUE) + ->set('standalone_url', TRUE) ->save(TRUE); - $this->rebuildAll(); + $this->container->get('router.builder')->rebuild(); // Create a media type. $mediaType = $this->createMediaType('test'); diff --git a/core/modules/media/tests/src/Functional/Rest/MediaResourceTestBase.php b/core/modules/media/tests/src/Functional/Rest/MediaResourceTestBase.php index 72f23004de..05e8503cc5 100644 --- a/core/modules/media/tests/src/Functional/Rest/MediaResourceTestBase.php +++ b/core/modules/media/tests/src/Functional/Rest/MediaResourceTestBase.php @@ -49,7 +49,7 @@ public function setUp() { \Drupal::configFactory() ->getEditable('media.settings') - ->set('standalone_media_url', TRUE) + ->set('standalone_url', TRUE) ->save(TRUE); $this->container->get('router.builder')->rebuild(); diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaDisplayTest.php b/core/modules/media/tests/src/FunctionalJavascript/MediaDisplayTest.php index 476cc0ffe6..7fcd0bc464 100644 --- a/core/modules/media/tests/src/FunctionalJavascript/MediaDisplayTest.php +++ b/core/modules/media/tests/src/FunctionalJavascript/MediaDisplayTest.php @@ -34,7 +34,7 @@ protected function setUp() { // This tests is going to test the display, so we need the canonical URL. \Drupal::configFactory() ->getEditable('media.settings') - ->set('standalone_media_url', TRUE) + ->set('standalone_url', TRUE) ->save(TRUE); $this->container->get('router.builder')->rebuild(); diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceTestBase.php b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceTestBase.php index 94fb03e7a0..bd029ca88e 100644 --- a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceTestBase.php +++ b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceTestBase.php @@ -21,7 +21,7 @@ protected function setUp() { // because every source test has to check the output on the view page. \Drupal::configFactory() ->getEditable('media.settings') - ->set('standalone_media_url', TRUE) + ->set('standalone_url', TRUE) ->save(TRUE); $this->container->get('router.builder')->rebuild();