diff --git a/core/modules/field_ui/field_ui.services.yml b/core/modules/field_ui/field_ui.services.yml index 2580287..10752b0 100644 --- a/core/modules/field_ui/field_ui.services.yml +++ b/core/modules/field_ui/field_ui.services.yml @@ -6,9 +6,11 @@ services: - { name: event_subscriber } access_check.field_ui.view_mode: class: Drupal\field_ui\Access\ViewModeAccessCheck + arguments: ['@entity.manager'] tags: - { name: access_check } access_check.field_ui.form_mode: class: Drupal\field_ui\Access\FormModeAccessCheck + arguments: ['@entity.manager'] tags: - { name: access_check } diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Access/FormModeAccessCheck.php b/core/modules/field_ui/lib/Drupal/field_ui/Access/FormModeAccessCheck.php index 92e3790..fb78f36 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Access/FormModeAccessCheck.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Access/FormModeAccessCheck.php @@ -8,6 +8,7 @@ namespace Drupal\field_ui\Access; use Drupal\Core\Access\StaticAccessCheckInterface; +use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Session\AccountInterface; use Symfony\Component\Routing\Route; use Symfony\Component\HttpFoundation\Request; @@ -18,6 +19,23 @@ class FormModeAccessCheck implements StaticAccessCheckInterface { /** + * The entity manager. + * + * @var \Drupal\Core\Entity\EntityManagerInterface + */ + protected $entityManager; + + /** + * Creates a new FormModeAccessCheck. + * + * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager + * The entity manager. + */ + public function __construct(EntityManagerInterface $entity_manager) { + $this->entityManager = $entity_manager; + } + + /** * {@inheritdoc} */ public function appliesTo() { @@ -29,17 +47,19 @@ public function appliesTo() { */ public function access(Route $route, Request $request, AccountInterface $account) { if ($entity_type = $request->attributes->get('entity_type')) { - $bundle = $request->attributes->get('bundle'); $form_mode = $request->attributes->get('mode'); - if ($form_mode == 'default') { - $visibility = TRUE; + if (!($bundle = $request->attributes->get('bundle'))) { + $entity_info = $this->entityManager->getDefinition($entity_type); + $bundle = $request->attributes->get('_raw_variables')->get($entity_info['bundle_entity_type']); } - elseif ($entity_form_display = entity_load('entity_form_display', $entity_type . '.' . $bundle . '.' . $form_mode)) { - $visibility = $entity_form_display->status(); + + $visibility = FALSE; + if (!$form_mode || $form_mode == 'default') { + $visibility = TRUE; } - else { - $visibility = FALSE; + elseif ($entity_display = $this->entityManager->getStorageController('entity_form_display')->load($entity_type . '.' . $bundle . '.' . $form_mode)) { + $visibility = $entity_display->status(); } if ($visibility) { diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Access/ViewModeAccessCheck.php b/core/modules/field_ui/lib/Drupal/field_ui/Access/ViewModeAccessCheck.php index 2fe350b..71ef1da 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Access/ViewModeAccessCheck.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Access/ViewModeAccessCheck.php @@ -8,6 +8,7 @@ namespace Drupal\field_ui\Access; use Drupal\Core\Access\StaticAccessCheckInterface; +use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Session\AccountInterface; use Symfony\Component\Routing\Route; use Symfony\Component\HttpFoundation\Request; @@ -18,6 +19,23 @@ class ViewModeAccessCheck implements StaticAccessCheckInterface { /** + * The entity manager. + * + * @var \Drupal\Core\Entity\EntityManagerInterface + */ + protected $entityManager; + + /** + * Creates a new ViewModeAccessCheck. + * + * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager + * The entity manager. + */ + public function __construct(EntityManagerInterface $entity_manager) { + $this->entityManager = $entity_manager; + } + + /** * {@inheritdoc} */ public function appliesTo() { @@ -29,18 +47,20 @@ public function appliesTo() { */ public function access(Route $route, Request $request, AccountInterface $account) { if ($entity_type = $request->attributes->get('entity_type')) { - $bundle = $request->attributes->get('bundle'); $view_mode = $request->attributes->get('mode'); - if ($view_mode == 'default') { + if (!($bundle = $request->attributes->get('bundle'))) { + $entity_info = $this->entityManager->getDefinition($entity_type); + $bundle = $request->attributes->get('_raw_variables')->get($entity_info['bundle_entity_type']); + } + + $visibility = FALSE; + if (!$view_mode || $view_mode == 'default') { $visibility = TRUE; } - elseif ($entity_display = entity_load('entity_display', $entity_type . '.' . $bundle . '.' . $view_mode)) { + elseif ($entity_display = $this->entityManager->getStorageController('entity_display')->load($entity_type . '.' . $bundle . '.' . $view_mode)) { $visibility = $entity_display->status(); } - else { - $visibility = FALSE; - } if ($visibility) { $permission = $route->getRequirement('_field_ui_view_mode_access'); diff --git a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php index b3cd6f7..0d68e77 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php @@ -23,7 +23,6 @@ class DisplayOverview extends DisplayOverviewBase { public static function create(ContainerInterface $container) { return new static( $container->get('entity.manager'), - $container->get('request'), $container->get('plugin.manager.field.field_type'), $container->get('plugin.manager.field.formatter') ); diff --git a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php index 6441431..c25bd43 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php @@ -14,7 +14,6 @@ use Drupal\field\FieldInstanceInterface; use Drupal\field_ui\OverviewBase; use Symfony\Component\DependencyInjection\ContainerInterface; -use Symfony\Component\HttpFoundation\Request; /** * Field UI display overview base class. @@ -40,15 +39,13 @@ * * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager * The entity manager. - * @param \Symfony\Component\HttpFoundation\Request $request - * The current request. * @param \Drupal\Core\Field\FieldTypePluginManager $field_type_manager * The field type manager. * @param \Drupal\Component\Plugin\PluginManagerBase $plugin_manager * The widget or formatter plugin manager. */ - public function __construct(EntityManagerInterface $entity_manager, Request $request, FieldTypePluginManager $field_type_manager, PluginManagerBase $plugin_manager) { - parent::__construct($entity_manager, $request); + public function __construct(EntityManagerInterface $entity_manager, FieldTypePluginManager $field_type_manager, PluginManagerBase $plugin_manager) { + parent::__construct($entity_manager); $this->fieldTypes = $field_type_manager->getConfigurableDefinitions(); $this->pluginManager = $plugin_manager; @@ -60,7 +57,6 @@ public function __construct(EntityManagerInterface $entity_manager, Request $req public static function create(ContainerInterface $container) { return new static( $container->get('entity.manager'), - $container->get('request'), $container->get('plugin.manager.field.field_type'), $container->get('plugin.manager.field.widget') ); diff --git a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php index 1c6d428..ec5a4c0 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php @@ -13,7 +13,6 @@ use Drupal\field_ui\OverviewBase; use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\field\Entity\Field; -use Symfony\Component\HttpFoundation\Request; /** * Field UI field overview form. @@ -39,15 +38,13 @@ class FieldOverview extends OverviewBase { * * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager * The entity manager. - * @param \Symfony\Component\HttpFoundation\Request $request - * The current request. * @param \Drupal\Core\Field\FieldTypePluginManager $field_type_manager * The field type manager * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler * The module handler to invoke hooks on. */ - public function __construct(EntityManagerInterface $entity_manager, Request $request, FieldTypePluginManager $field_type_manager, ModuleHandlerInterface $module_handler) { - parent::__construct($entity_manager, $request); + public function __construct(EntityManagerInterface $entity_manager, FieldTypePluginManager $field_type_manager, ModuleHandlerInterface $module_handler) { + parent::__construct($entity_manager); $this->fieldTypeManager = $field_type_manager; $this->moduleHandler = $module_handler; } @@ -58,7 +55,6 @@ public function __construct(EntityManagerInterface $entity_manager, Request $req public static function create(ContainerInterface $container) { return new static( $container->get('entity.manager'), - $container->get('request'), $container->get('plugin.manager.field.field_type'), $container->get('module_handler') ); diff --git a/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php index d9fbd9e..a1e8d8b 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php @@ -23,7 +23,6 @@ class FormDisplayOverview extends DisplayOverviewBase { public static function create(ContainerInterface $container) { return new static( $container->get('entity.manager'), - $container->get('request'), $container->get('plugin.manager.field.field_type'), $container->get('plugin.manager.field.widget') ); diff --git a/core/modules/field_ui/lib/Drupal/field_ui/OverviewBase.php b/core/modules/field_ui/lib/Drupal/field_ui/OverviewBase.php index 243d68b..8114efd 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/OverviewBase.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/OverviewBase.php @@ -10,7 +10,6 @@ use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Form\FormBase; use Symfony\Component\DependencyInjection\ContainerInterface; -use Symfony\Component\HttpFoundation\Request; /** * Abstract base class for Field UI overview forms. @@ -53,24 +52,13 @@ protected $entityManager; /** - * The current request. - * - * @var \Symfony\Component\HttpFoundation\Request - */ - protected $request; - - /** * Constructs a new OverviewBase. * * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager * The entity manager. - * @param \Symfony\Component\HttpFoundation\Request $request - * The current request. - */ - public function __construct(EntityManagerInterface $entity_manager, Request $request) { + public function __construct(EntityManagerInterface $entity_manager) { $this->entityManager = $entity_manager; - $this->request = $request; } /** @@ -78,8 +66,7 @@ public function __construct(EntityManagerInterface $entity_manager, Request $req */ public static function create(ContainerInterface $container) { return new static( - $container->get('entity.manager'), - $container->get('request') + $container->get('entity.manager') ); } @@ -91,7 +78,7 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL, $this->entity_type = $entity_type; if (!$bundle) { - $bundle = $this->request->attributes->get('_raw_variables')->get($entity_info['bundle_entity_type']); + $bundle = $this->getRequest()->attributes->get('_raw_variables')->get($entity_info['bundle_entity_type']); } $this->bundle = $bundle; $this->adminPath = $this->entityManager->getAdminPath($this->entity_type, $this->bundle); diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Plugin/Derivative/FieldUiLocalTask.php b/core/modules/field_ui/lib/Drupal/field_ui/Plugin/Derivative/FieldUiLocalTask.php index db7e499..eb77b7e 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Plugin/Derivative/FieldUiLocalTask.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Plugin/Derivative/FieldUiLocalTask.php @@ -137,7 +137,10 @@ public function getDerivativeDefinitions(array $base_plugin_definition) { foreach (entity_get_form_modes($entity_type) as $form_mode => $form_mode_info) { $this->derivatives['field_form_display_' . $form_mode . '_' . $entity_type] = array( 'title' => $form_mode_info['label'], - 'route_name' => "field_ui.form_display_overview_$entity_type" . '_' . $form_mode, + 'route_name' => "field_ui.form_display_overview_$entity_type", + 'route_parameters' => array( + 'mode' => $form_mode, + ), 'tab_root_id' => "field_ui.fields:overview_$entity_type", 'tab_parent_id' => "field_ui.fields:form_display_overview_$entity_type", 'weight' => $weight++, @@ -149,7 +152,10 @@ public function getDerivativeDefinitions(array $base_plugin_definition) { foreach (entity_get_view_modes($entity_type) as $view_mode => $form_mode_info) { $this->derivatives['field_display_' . $view_mode . '_' . $entity_type] = array( 'title' => $form_mode_info['label'], - 'route_name' => "field_ui.display_overview_$entity_type" . '_' . $view_mode, + 'route_name' => "field_ui.display_overview_$entity_type", + 'route_parameters' => array( + 'mode' => $view_mode, + ), 'tab_root_id' => "field_ui.fields:overview_$entity_type", 'tab_parent_id' => "field_ui.fields:display_overview_$entity_type", 'weight' => $weight++, diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php b/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php index 7bcc9a0..67de1ca 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php @@ -52,13 +52,7 @@ protected function routes(RouteCollection $collection) { foreach ($this->manager->getDefinitions() as $entity_type => $entity_info) { $defaults = array(); if ($entity_info['fieldable'] && isset($entity_info['links']['admin-form'])) { - try { - $path = $this->routeProvider->getRouteByName($entity_info['links']['admin-form'])->getPath(); - } - catch (\Exception $e) { - // Skip this entity type if the route was not found. - continue; - } + $path = $this->routeProvider->getRouteByName($entity_info['links']['admin-form'])->getPath(); $route = new Route( "$path/fields/{field_instance}", @@ -97,46 +91,26 @@ protected function routes(RouteCollection $collection) { $collection->add("field_ui.overview_$entity_type", $route); $route = new Route( - "$path/form-display", + "$path/form-display/{mode}", array( '_form' => '\Drupal\field_ui\FormDisplayOverview', '_title' => 'Manage form display', + 'mode' => NULL, ) + $defaults, - array('_permission' => 'administer ' . $entity_type . ' form display') + array('_field_ui_form_mode_access' => 'administer ' . $entity_type . ' form display') ); $collection->add("field_ui.form_display_overview_$entity_type", $route); - foreach (entity_get_form_modes($entity_type) as $form_mode => $form_mode_info) { - $route = new Route( - "$path/form-display/$form_mode", - array( - '_form' => '\Drupal\field_ui\FormDisplayOverview', - 'mode' => $form_mode, - ) + $defaults, - array('_field_ui_form_mode_access' => 'administer ' . $entity_type . ' form display')); - $collection->add("field_ui.form_display_overview_$entity_type" . '_'. $form_mode, $route); - } - $route = new Route( - "$path/display", + "$path/display/{mode}", array( '_form' => '\Drupal\field_ui\DisplayOverview', '_title' => 'Manage display', + 'mode' => NULL, ) + $defaults, - array('_permission' => 'administer ' . $entity_type . ' display') + array('_field_ui_view_mode_access' => 'administer ' . $entity_type . ' display') ); $collection->add("field_ui.display_overview_$entity_type", $route); - - foreach (entity_get_view_modes($entity_type) as $view_mode => $view_mode_info) { - $route = new Route( - "$path/display/$view_mode", - array( - '_form' => '\Drupal\field_ui\DisplayOverview', - 'mode' => $view_mode, - ) + $defaults, - array('_field_ui_view_mode_access' => 'administer ' . $entity_type . ' display')); - $collection->add("field_ui.display_overview_$entity_type" . '_' . $view_mode, $route); - } } } }