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();