Skip to content
GitLab
Explore
Sign in
project
drupal
Compare revisions
92f93a1cbc2b331e4427efe8ca7674fb503c33a3 to 8.0-alpha6
Hide whitespace changes
Inline
Side-by-side
core/modules/dblog/dblog.views.inc
View file @
172cd265
...
...
@@ -3,8 +3,6 @@
/**
* @file
* Provide views data for dblog.module.
*
* @ingroup views_module_handlers
*/
/**
...
...
core/modules/edit/edit.module
View file @
172cd265
...
...
@@ -17,6 +17,26 @@
use
Drupal\entity\Entity\EntityDisplay
;
use
Drupal\user\TempStoreFactory
;
/**
* Implements hook_menu().
*/
function
edit_menu
()
{
// @todo Remove these menu items in http://drupal.org/node/1954892 when theme
// callbacks are replaced with something else.
$items
[
'edit/metadata'
]
=
array
(
'route_name'
=>
'edit.metadata'
,
'theme callback'
=>
'ajax_base_page_theme'
,
'type'
=>
MENU_CALLBACK
,
);
$items
[
'edit/form/%/%/%/%/%'
]
=
array
(
'route_name'
=>
'edit.field_form'
,
'theme callback'
=>
'ajax_base_page_theme'
,
'type'
=>
MENU_CALLBACK
,
);
return
$items
;
}
/**
* Implements hook_permission().
*/
...
...
core/modules/edit/edit.routing.yml
View file @
172cd265
...
...
@@ -2,10 +2,9 @@ edit.metadata:
path
:
'
/edit/metadata'
defaults
:
_controller
:
'
\Drupal\edit\EditController::metadata'
options
:
_theme
:
ajax_base_page
requirements
:
_permission
:
'
access
in-place
editing'
edit.attachments
:
path
:
'
/edit/attachments'
defaults
:
...
...
@@ -17,9 +16,6 @@ edit.field_form:
path
:
'
/edit/form/{entity_type}/{entity}/{field_name}/{langcode}/{view_mode_id}'
defaults
:
_controller
:
'
\Drupal\edit\EditController::fieldForm'
options
:
_access_mode
:
'
ALL'
_theme
:
ajax_base_page
requirements
:
_permission
:
'
access
in-place
editing'
_access_edit_entity_field
:
'
TRUE'
...
...
core/modules/editor/editor.module
View file @
172cd265
...
...
@@ -139,6 +139,21 @@ function editor_library_info() {
return
$libraries
;
}
/**
* Implements hook_menu().
*/
function
editor_menu
()
{
// @todo Remove this menu item in http://drupal.org/node/1954892 when theme
// callbacks are replaced with something else.
$items
[
'editor/%/%/%/%/%'
]
=
array
(
'route_name'
=>
'editor.field_untransformed_text'
,
'theme callback'
=>
'ajax_base_page_theme'
,
'type'
=>
MENU_CALLBACK
,
);
return
$items
;
}
/**
* Implements hook_form_FORM_ID_alter().
*/
...
...
core/modules/editor/editor.routing.yml
View file @
172cd265
...
...
@@ -2,8 +2,6 @@ editor.field_untransformed_text:
path
:
'
/editor/{entity_type}/{entity}/{field_name}/{langcode}/{view_mode_id}'
defaults
:
_controller
:
'
\Drupal\editor\EditorController::getUntransformedText'
options
:
_theme
:
ajax_base_page
requirements
:
_permission
:
'
access
in-place
editing'
_access_edit_entity_field
:
'
TRUE'
...
...
core/modules/field/field.views.inc
View file @
172cd265
...
...
@@ -2,9 +2,7 @@
/**
* @file
* Provide Views data and handlers for field.module.
*
* @ingroup views_module_handlers
* Provide Views data for field.module.
*/
use
Drupal\Component\Utility\NestedArray
;
...
...
core/modules/field_ui/field_ui.local_tasks.yml
View file @
172cd265
...
...
@@ -2,3 +2,6 @@ field_ui.list:
title
:
Entities
route_name
:
field_ui.list
tab_root_id
:
field_ui.list
field_ui.fields
:
class
:
\Drupal\Core\Menu\LocalTaskDefault
derivative
:
\Drupal\field_ui\Plugin\Derivative\FieldUiLocalTask
core/modules/field_ui/field_ui.module
View file @
172cd265
...
...
@@ -7,6 +7,7 @@
use
Drupal\Core\Entity\EntityInterface
;
use
Drupal\entity\EntityViewModeInterface
;
use
Drupal\field_ui
\Plugin\Derivative\FieldUiLocalTask
;
/**
* Implements hook_help().
...
...
@@ -61,94 +62,6 @@ function field_ui_menu() {
'type'
=>
MENU_NORMAL_ITEM
,
);
// Create tabs for all possible bundles.
foreach
(
entity_get_info
()
as
$entity_type
=>
$entity_info
)
{
if
(
$entity_info
[
'fieldable'
]
&&
isset
(
$entity_info
[
'route_base_path'
]))
{
// Extract path information from the entity type.
$path
=
$entity_info
[
'route_base_path'
];
$default_path
=
preg_replace
(
'/{'
.
DRUPAL_PHP_FUNCTION_PATTERN
.
'}/'
,
'%'
,
$path
);
// This is the position of the %field_ui_instance placeholder in the
// items below.
$field_position
=
count
(
explode
(
'/'
,
$path
))
+
1
;
$items
[
"
$path
/fields"
]
=
array
(
'title'
=>
'Manage fields'
,
'type'
=>
MENU_LOCAL_TASK
,
'route_name'
=>
"field_ui.overview_
$entity_type
"
,
'weight'
=>
1
,
);
$items
[
"
$path
/fields/%"
]
=
array
(
'title callback'
=>
'entity_page_label'
,
'title arguments'
=>
array
(
$field_position
),
'route_name'
=>
"field_ui.instance_edit_
$entity_type
"
,
);
$items
[
"
$default_path
/fields/%/edit"
]
=
array
(
'title'
=>
'Edit'
,
'type'
=>
MENU_DEFAULT_LOCAL_TASK
,
);
$items
[
"
$path
/fields/%/field"
]
=
array
(
'title'
=>
'Field settings'
,
'type'
=>
MENU_LOCAL_TASK
,
'route_name'
=>
"field_ui.field_edit_
$entity_type
"
,
);
$items
[
"
$path
/fields/%/delete"
]
=
array
(
'title'
=>
'Delete'
,
'type'
=>
MENU_VISIBLE_IN_BREADCRUMB
,
'route_name'
=>
"field_ui.delete_
$entity_type
"
,
'weight'
=>
10
,
);
// 'Manage form display' tab.
$items
[
"
$path
/form-display"
]
=
array
(
'title'
=>
'Manage form display'
,
'type'
=>
MENU_LOCAL_TASK
,
'route_name'
=>
"field_ui.form_display_overview_
$entity_type
"
,
'weight'
=>
2
,
);
// 'Manage display' tab.
$items
[
"
$path
/display"
]
=
array
(
'title'
=>
'Manage display'
,
'type'
=>
MENU_LOCAL_TASK
,
'route_name'
=>
"field_ui.display_overview_
$entity_type
"
,
'weight'
=>
3
,
);
// View and form modes secondary tabs.
// The same base $path for the menu item (with a placeholder) can be
// used for all bundles of a given entity type; but depending on
// administrator settings, each bundle has a different set of view
// modes available for customisation. So we define menu items for all
// view modes, and use a route requirement to determine which ones are
// actually visible for a given bundle.
$items
[
"
$default_path
/form-display/default"
]
=
array
(
'title'
=>
t
(
'Default'
),
'type'
=>
MENU_DEFAULT_LOCAL_TASK
,
);
$items
[
"
$default_path
/display/default"
]
=
array
(
'title'
=>
t
(
'Default'
),
'type'
=>
MENU_DEFAULT_LOCAL_TASK
,
);
$weight
=
0
;
foreach
(
entity_get_form_modes
(
$entity_type
)
as
$form_mode
=>
$form_mode_info
)
{
$items
[
"
$path
/form-display/
$form_mode
"
]
=
array
(
'title'
=>
$form_mode_info
[
'label'
],
'type'
=>
MENU_LOCAL_TASK
,
'weight'
=>
$weight
++
,
'route_name'
=>
"field_ui.form_display_overview_
$entity_type
"
.
'_'
.
$form_mode
,
);
}
$weight
=
0
;
foreach
(
entity_get_view_modes
(
$entity_type
)
as
$view_mode
=>
$view_mode_info
)
{
$items
[
"
$path
/display/
$view_mode
"
]
=
array
(
'title'
=>
$view_mode_info
[
'label'
],
'type'
=>
MENU_LOCAL_TASK
,
'weight'
=>
$weight
++
,
'route_name'
=>
"field_ui.display_overview_
$entity_type
"
.
'_'
.
$view_mode
,
);
}
}
}
return
$items
;
}
...
...
@@ -334,12 +247,7 @@ function field_ui_entity_operation_alter(array &$operations, EntityInterface $en
*/
function
field_ui_form_node_type_form_submit
(
$form
,
&
$form_state
)
{
if
(
$form_state
[
'triggering_element'
][
'#parents'
][
0
]
===
'save_continue'
)
{
$form_state
[
'redirect_route'
]
=
array
(
'route_name'
=>
'field_ui.overview_node'
,
'route_parameters'
=>
array
(
'bundle'
=>
$form_state
[
'values'
][
'type'
],
),
);
$form_state
[
'redirect_route'
]
=
\Drupal
::
entityManager
()
->
getAdminRouteInfo
(
'node'
,
$form_state
[
'values'
][
'type'
]);
}
}
...
...
@@ -462,3 +370,11 @@ function theme_field_ui_table($variables) {
return
drupal_render
(
$table
);
}
/**
* Implements hook_local_tasks_alter().
*/
function
field_ui_local_tasks_alter
(
&
$local_tasks
)
{
$container
=
\Drupal
::
getContainer
();
$local_task
=
FieldUiLocalTask
::
create
(
$container
,
'field_ui.fields'
);
$local_task
->
alterLocalTasks
(
$local_tasks
);
}
core/modules/field_ui/field_ui.services.yml
View file @
172cd265
services
:
field_ui.subscriber
:
class
:
Drupal\field_ui\Routing\RouteSubscriber
arguments
:
[
'
@entity.manager'
]
arguments
:
[
'
@entity.manager'
,
'
@router.route_provider'
]
tags
:
-
{
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
}
core/modules/field_ui/lib/Drupal/field_ui/Access/FormModeAccessCheck.php
View file @
172cd265
...
...
@@ -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
;
...
...
@@ -17,6 +18,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}
*/
...
...
@@ -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'
);
$form_mode
=
$request
->
attributes
->
get
(
'form_mode_name'
);
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
;
else
if
(
$entity_display
=
$this
->
entityManager
->
getStorageController
(
'entity_form_display'
)
->
load
(
$entity_type
.
'.'
.
$bundle
.
'.'
.
$form_mode
))
{
$visibility
=
$entity_display
->
status
()
;
}
if
(
$visibility
)
{
...
...
core/modules/field_ui/lib/Drupal/field_ui/Access/ViewModeAccessCheck.php
View file @
172cd265
...
...
@@ -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
;
...
...
@@ -17,6 +18,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}
*/
...
...
@@ -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'
);
$view_mode
=
$request
->
attributes
->
get
(
'view_mode_name'
);
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'
);
...
...
core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php
View file @
172cd265
...
...
@@ -35,6 +35,17 @@ public function getFormId() {
return
'field_ui_display_overview_form'
;
}
/**
* {@inheritdoc}
*/
public
function
buildForm
(
array
$form
,
array
&
$form_state
,
$entity_type
=
NULL
,
$bundle
=
NULL
)
{
if
(
$this
->
getRequest
()
->
attributes
->
has
(
'view_mode_name'
))
{
$this
->
mode
=
$this
->
getRequest
()
->
attributes
->
get
(
'view_mode_name'
);
}
return
parent
::
buildForm
(
$form
,
$form_state
,
$entity_type
,
$bundle
);
}
/**
* {@inheritdoc}
*/
...
...
core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php
View file @
172cd265
...
...
@@ -82,10 +82,12 @@ public function getRegions() {
/**
* {@inheritdoc}
*/
public
function
buildForm
(
array
$form
,
array
&
$form_state
,
$entity_type
=
NULL
,
$bundle
=
NULL
,
$mode
=
NULL
)
{
public
function
buildForm
(
array
$form
,
array
&
$form_state
,
$entity_type
=
NULL
,
$bundle
=
NULL
)
{
parent
::
buildForm
(
$form
,
$form_state
,
$entity_type
,
$bundle
);
$this
->
mode
=
(
isset
(
$mode
)
?
$mode
:
'default'
);
if
(
empty
(
$this
->
mode
))
{
$this
->
mode
=
'default'
;
}
// Gather type information.
$instances
=
field_info_instances
(
$this
->
entity_type
,
$this
->
bundle
);
...
...
core/modules/field_ui/lib/Drupal/field_ui/Form/FieldDeleteForm.php
View file @
172cd265
...
...
@@ -79,12 +79,7 @@ public function submit(array $form, array &$form_state) {
drupal_set_message
(
$this
->
t
(
'There was a problem removing the %field from the %type content type.'
,
array
(
'%field'
=>
$this
->
entity
->
label
(),
'%type'
=>
$bundle_label
)),
'error'
);
}
$form_state
[
'redirect_route'
]
=
array
(
'route_name'
=>
'field_ui.overview_'
.
$this
->
entity
->
entity_type
,
'route_parameters'
=>
array
(
'bundle'
=>
$this
->
entity
->
bundle
,
)
);
$form_state
[
'redirect_route'
]
=
$this
->
entityManager
->
getAdminRouteInfo
(
$this
->
entity
->
entity_type
,
$this
->
entity
->
bundle
);
// Fields are purged on cron. However field module prevents disabling modules
// when field types they provided are used in a field until it is fully
...
...
core/modules/field_ui/lib/Drupal/field_ui/Form/FieldEditForm.php
View file @
172cd265
...
...
@@ -206,12 +206,7 @@ public function submitForm(array &$form, array &$form_state) {
$form_state
[
'redirect'
]
=
$next_destination
;
}
else
{
$form_state
[
'redirect_route'
]
=
array
(
'route_name'
=>
'field_ui.overview_'
.
$this
->
instance
->
entity_type
,
'route_parameters'
=>
array
(
'bundle'
=>
$this
->
instance
->
bundle
,
)
);
$form_state
[
'redirect_route'
]
=
$this
->
entityManager
->
getAdminRouteInfo
(
$this
->
instance
->
entity_type
,
$this
->
instance
->
bundle
);
}
}
catch
(
\Exception
$e
)
{
...
...
core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php
View file @
172cd265
...
...
@@ -193,12 +193,7 @@ public function submitForm(array &$form, array &$form_state) {
$form_state
[
'redirect'
]
=
$next_destination
;
}
else
{
$form_state
[
'redirect_route'
]
=
array
(
'route_name'
=>
'field_ui.overview_'
.
$this
->
instance
->
entity_type
,
'route_parameters'
=>
array
(
'bundle'
=>
$this
->
instance
->
bundle
,
)
);
$form_state
[
'redirect_route'
]
=
$this
->
entityManager
->
getAdminRouteInfo
(
$this
->
instance
->
entity_type
,
$this
->
instance
->
bundle
);
}
}
...
...
@@ -212,10 +207,11 @@ public function delete(array &$form, array &$form_state) {
$destination
=
drupal_get_destination
();
$request
->
query
->
remove
(
'destination'
);
}
$entity_info
=
$this
->
entityManager
->
getDefinition
(
$this
->
instance
->
entity_type
);
$form_state
[
'redirect_route'
]
=
array
(
'route_name'
=>
'field_ui.delete_'
.
$this
->
instance
->
entity_type
,
'route_parameters'
=>
array
(
'bundle'
=>
$this
->
instance
->
bundle
,
$entity_info
[
'bundle_entity_type'
]
=>
$this
->
instance
->
bundle
,
'field_instance'
=>
$this
->
instance
->
id
(),
),
'options'
=>
array
(
...
...
core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php
View file @
172cd265
...
...
@@ -35,6 +35,17 @@ public function getFormId() {
return
'field_ui_form_display_overview_form'
;
}
/**
* {@inheritdoc}
*/
public
function
buildForm
(
array
$form
,
array
&
$form_state
,
$entity_type
=
NULL
,
$bundle
=
NULL
)
{
if
(
$this
->
getRequest
()
->
attributes
->
has
(
'form_mode_name'
))
{
$this
->
mode
=
$this
->
getRequest
()
->
attributes
->
get
(
'form_mode_name'
);
}
return
parent
::
buildForm
(
$form
,
$form_state
,
$entity_type
,
$bundle
);
}
/**
* {@inheritdoc}
*/
...
...
core/modules/field_ui/lib/Drupal/field_ui/OverviewBase.php
View file @
172cd265
...
...
@@ -74,10 +74,16 @@ public static function create(ContainerInterface $container) {
* {@inheritdoc}
*/
public
function
buildForm
(
array
$form
,
array
&
$form_state
,
$entity_type
=
NULL
,
$bundle
=
NULL
)
{
$entity_info
=
$this
->
entityManager
->
getDefinition
(
$entity_type
);
if
(
!
isset
(
$form_state
[
'bundle'
]))
{
if
(
!
$bundle
)
{
$entity_info
=
$this
->
entityManager
->
getDefinition
(
$entity_type
);
$bundle
=
$this
->
getRequest
()
->
attributes
->
get
(
'_raw_variables'
)
->
get
(
$entity_info
[
'bundle_entity_type'
]);
}
$form_state
[
'bundle'
]
=
$bundle
;
}
$this
->
entity_type
=
$entity_type
;
$this
->
bundle
=
$bundle
;
$this
->
bundle
=
$
form_state
[
'
bundle
'
]
;
$this
->
adminPath
=
$this
->
entityManager
->
getAdminPath
(
$this
->
entity_type
,
$this
->
bundle
);
// When displaying the form, make sure the list of fields is up-to-date.
...
...
core/modules/field_ui/lib/Drupal/field_ui/Plugin/Derivative/FieldUiLocalTask.php
0 → 100644
View file @
172cd265
<?php
/**
* @file
* Contains \Drupal\field_ui\Plugin\Derivative\FieldUiLocalTask.
*/
namespace
Drupal\field_ui\Plugin\Derivative
;
use
Drupal\Component\Plugin\Derivative\DerivativeBase
;
use
Drupal\Core\Entity\EntityManagerInterface
;
use
Drupal\Core\Plugin\Discovery\ContainerDerivativeInterface
;
use
Drupal\Core\Routing\RouteProviderInterface
;
use
Drupal\Core\StringTranslation\TranslationInterface
;
use
Symfony\Component\DependencyInjection\ContainerInterface
;
/**
* Provides local task definitions for all entity bundles.
*/
class
FieldUiLocalTask
extends
DerivativeBase
implements
ContainerDerivativeInterface
{
/**
* The route provider.
*
* @var \Drupal\Core\Routing\RouteProviderInterface
*/
protected
$routeProvider
;
/**
* The entity manager
*
* @var \Drupal\Core\Entity\EntityManagerInterface
*/
protected
$entityManager
;
/**
* The translation manager service.
*
* @var \Drupal\Core\StringTranslation\TranslationInterface
*/
protected
$translationManager
;
/**
* Creates an FieldUiLocalTask object.
*
* @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
* The route provider.
* @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
* The entity manager.
* @param \Drupal\Core\StringTranslation\TranslationInterface $translation_manager
* The translation manager.
*/
public
function
__construct
(
RouteProviderInterface
$route_provider
,
EntityManagerInterface
$entity_manager
,
TranslationInterface
$translation_manager
)
{
$this
->
routeProvider
=
$route_provider
;
$this
->
entityManager
=
$entity_manager
;
$this
->
translationManager
=
$translation_manager
;
}
/**
* {@inheritdoc}
*/
public
static
function
create
(
ContainerInterface
$container
,
$base_plugin_id
)
{
return
new
static
(
$container
->
get
(
'router.route_provider'
),
$container
->
get
(
'entity.manager'
),
$container
->
get
(
'string_translation'
)
);
}
/**
* {@inheritdoc}
*/
public
function
getDerivativeDefinitions
(
array
$base_plugin_definition
)
{
$this
->
derivatives
=
array
();
foreach
(
$this
->
entityManager
->
getDefinitions
()
as
$entity_type
=>
$entity_info
)
{
if
(
$entity_info
[
'fieldable'
]
&&
isset
(
$entity_info
[
'links'
][
'admin-form'
]))
{
$this
->
derivatives
[
"overview_
$entity_type
"
]
=
array
(
'route_name'
=>
"field_ui.overview_
$entity_type
"
,
'weight'
=>
1
,
'title'
=>
$this
->
t
(
'Manage fields'
),
'tab_root_id'
=>
"field_ui.fields:overview_
$entity_type
"
,
);
// 'Manage form display' tab.
$this
->
derivatives
[
"form_display_overview_
$entity_type
"
]
=
array
(
'route_name'
=>
"field_ui.form_display_overview_
$entity_type
"
,
'weight'
=>
2
,
'title'
=>
$this
->
t
(
'Manage form display'
),
'tab_root_id'
=>
"field_ui.fields:overview_
$entity_type
"
,
);
// 'Manage display' tab.
$this
->
derivatives
[
"display_overview_
$entity_type
"
]
=
array
(
'route_name'
=>
"field_ui.display_overview_
$entity_type
"
,
'weight'
=>
3
,
'title'
=>
$this
->
t
(
'Manage display'
),
'tab_root_id'
=>
"field_ui.fields:overview_
$entity_type
"
,
);
// Field instance edit tab.
$this
->
derivatives
[
"instance_edit_
$entity_type
"
]
=
array
(
'route_name'
=>
"field_ui.instance_edit_
$entity_type
"
,
'title'
=>
$this
->
t
(
'Edit'
),
'tab_root_id'
=>
"field_ui.fields:instance_edit_
$entity_type
"
,
);
// Field settings tab.
$this
->
derivatives
[
"field_edit_
$entity_type
"
]
=
array
(
'route_name'
=>
"field_ui.field_edit_
$entity_type
"
,
'title'
=>
$this
->
t
(
'Field settings'
),
'tab_root_id'
=>
"field_ui.fields:instance_edit_
$entity_type
"
,
);
// View and form modes secondary tabs.
// The same base $path for the menu item (with a placeholder) can be
// used for all bundles of a given entity type; but depending on
// administrator settings, each bundle has a different set of view
// modes available for customisation. So we define menu items for all
// view modes, and use a route requirement to determine which ones are
// actually visible for a given bundle.
$this
->
derivatives
[
'field_form_display_default_'
.
$entity_type
]
=
array
(
'title'
=>
'Default'
,
'route_name'
=>
"field_ui.form_display_overview_
$entity_type
"
,
'tab_root_id'
=>
"field_ui.fields:overview_
$entity_type
"
,
'tab_parent_id'
=>
"field_ui.fields:form_display_overview_
$entity_type
"
,
);
$this
->
derivatives
[
'field_display_default_'
.
$entity_type
]
=
array
(
'title'
=>
'Default'
,
'route_name'
=>
"field_ui.display_overview_
$entity_type
"
,
'tab_root_id'
=>
"field_ui.fields:overview_
$entity_type
"
,
'tab_parent_id'
=>
"field_ui.fields:display_overview_
$entity_type
"
,
);
// One local task for each form mode.
$weight
=
0
;
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_form_mode_
$entity_type
"
,
'route_parameters'
=>
array
(
'form_mode_name'
=>
$form_mode
,
),
'tab_root_id'
=>
"field_ui.fields:overview_
$entity_type
"
,
'tab_parent_id'
=>
"field_ui.fields:form_display_overview_
$entity_type
"
,
'weight'
=>
$weight
++
,
);
}
// One local task for each view mode.
$weight
=
0
;
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_view_mode_
$entity_type
"
,
'route_parameters'
=>
array
(
'view_mode_name'
=>
$view_mode
,
),
'tab_root_id'
=>
"field_ui.fields:overview_
$entity_type
"
,
'tab_parent_id'
=>
"field_ui.fields:display_overview_
$entity_type
"
,
'weight'
=>
$weight
++
,
);
}
}
}
foreach
(
$this
->
derivatives
as
&
$entry
)
{
$entry
+=
$base_plugin_definition
;
}
return
$this
->
derivatives
;
}
/**
* Alters the tab_root_id definition for field_ui local tasks.
*
* @param array $local_tasks
* An array of local tasks plugin definitions, keyed by plugin ID.
*/
public
function
alterLocalTasks
(
&
$local_tasks
)
{
foreach
(
$this
->
entityManager
->
getDefinitions
()
as
$entity_type
=>
$entity_info
)
{
if
(
$entity_info
[
'fieldable'
]
&&
isset
(
$entity_info
[
'links'
][
'admin-form'
]))
{
if
(
$parent_task
=
$this
->
getPluginIdFromRoute
(
$entity_info
[
'links'
][
'admin-form'
],
$local_tasks
))
{
$local_tasks
[
"field_ui.fields:overview_
$entity_type
"
][
'tab_root_id'
]
=
$parent_task
;
$local_tasks
[
"field_ui.fields:form_display_overview_
$entity_type
"
][
'tab_root_id'
]
=
$parent_task
;
$local_tasks
[
"field_ui.fields:display_overview_
$entity_type
"
][
'tab_root_id'
]
=
$parent_task
;
$local_tasks
[
"field_ui.fields:field_form_display_default_
$entity_type
"
][
'tab_root_id'
]
=
$parent_task
;
$local_tasks
[
"field_ui.fields:field_display_default_
$entity_type
"
][
'tab_root_id'
]
=
$parent_task
;
foreach
(
entity_get_form_modes
(
$entity_type
)
as
$form_mode
=>
$form_mode_info
)
{
$local_tasks
[
'field_ui.fields:field_form_display_'
.
$form_mode
.
'_'
.
$entity_type
][
'tab_root_id'
]
=
$parent_task
;
}
foreach
(
entity_get_view_modes
(
$entity_type
)
as
$view_mode
=>
$form_mode_info
)
{
$local_tasks
[
'field_ui.fields:field_display_'
.
$view_mode
.
'_'
.
$entity_type
][
'tab_root_id'
]
=
$parent_task
;
}
}
}
}
}
/**
* Finds the local task ID of a route given the route name.
*
* @param string $route_name
* The route name.
* @param array $local_tasks
* An array of all local task definitions.
*
* @return string|null
* Returns the local task ID of the given route or NULL if none is found.
*/
protected
function
getPluginIdFromRoute
(
$route_name
,
&
$local_tasks
)
{
$local_task_id
=
NULL
;
foreach
(
$local_tasks
as
$plugin_id
=>
$local_task
)
{
if
(
$local_task
[
'route_name'
]
==
$route_name
)
{
$local_task_id
=
$plugin_id
;
break
;
}
}
return
$local_task_id
;
}
/**
* Translates a string to the current language or to a given language.
*
* See the t() documentation for details.
*/
protected
function
t
(
$string
,
array
$args
=
array
(),
array
$options
=
array
())
{
return
$this
->
translationManager
->
translate
(
$string
,
$args
,
$options
);
}
}
core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php
View file @
172cd265
...
...
@@ -8,7 +8,10 @@
namespace
Drupal\field_ui\Routing
;
use
Drupal\Core\Entity\EntityManagerInterface
;
use
Drupal\Core\Routing\RouteProviderInterface
;
use
Drupal\Core\Routing\RouteSubscriberBase
;
use
Drupal\Core\Routing\RoutingEvents
;
use
Symfony\Component\Routing\Exception\RouteNotFoundException
;
use
Symfony\Component\Routing\Route
;
use
Symfony\Component\Routing\RouteCollection
;
...
...
@@ -24,14 +27,24 @@ class RouteSubscriber extends RouteSubscriberBase {
*/
protected
$manager
;
/**
* The route provider.
*
* @var \Drupal\Core\Routing\RouteProviderInterface
*/
protected
$routeProvider
;
/**
* Constructs a RouteSubscriber object.
*
* @param \Drupal\Core\Entity\EntityManagerInterface $manager
* The entity type manager.
* @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
* The route provider.
*/
public
function
__construct
(
EntityManagerInterface
$manager
)
{
public
function
__construct
(
EntityManagerInterface
$manager
,
RouteProviderInterface
$route_provider
)
{
$this
->
manager
=
$manager
;
$this
->
routeProvider
=
$route_provider
;
}
/**
...
...
@@ -40,8 +53,20 @@ public function __construct(EntityManagerInterface $manager) {
protected
function
routes
(
RouteCollection
$collection
)
{
foreach
(
$this
->
manager
->
getDefinitions
()
as
$entity_type
=>
$entity_info
)
{
$defaults
=
array
();
if
(
$entity_info
[
'fieldable'
]
&&
isset
(
$entity_info
[
'route_base_path'
]))
{
$path
=
$entity_info
[
'route_base_path'
];
if
(
$entity_info
[
'fieldable'
]
&&
isset
(
$entity_info
[
'links'
][
'admin-form'
]))
{
// First try to get the route from the dynamic_routes collection.
if
(
!
$entity_route
=
$collection
->
get
(
$entity_info
[
'links'
][
'admin-form'
]))
{
// Then try to get the route from the route provider itself, checking
// all previous collections.
try
{
$entity_route
=
$this
->
routeProvider
->
getRouteByName
(
$entity_info
[
'links'
][
'admin-form'
]);
}
// If the route was not found, skip this entity type.
catch
(
RouteNotFoundException
$e
)
{
continue
;
}
}
$path
=
$entity_route
->
getPath
();
$route
=
new
Route
(
"
$path
/fields/
{
field_instance
}
"
,
...
...
@@ -85,20 +110,19 @@ protected function routes(RouteCollection $collection) {
'_form'
=>
'\Drupal\field_ui\FormDisplayOverview'
,
'_title'
=>
'Manage form display'
,
)
+
$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
/form-display/
{
form_mode_name
}
"
,
array
(
'_form'
=>
'\Drupal\field_ui\FormDisplayOverview'
,
'form_mode_name'
=>
NULL
,
)
+
$defaults
,
array
(
'_field_ui_form_mode_access'
=>
'administer '
.
$entity_type
.
' form display'
)
);
$collection
->
add
(
"field_ui.form_display_overview_form_mode_
$entity_type
"
,
$route
);
$route
=
new
Route
(
"
$path
/display"
,
...
...
@@ -106,22 +130,30 @@ protected function routes(RouteCollection $collection) {
'_form'
=>
'\Drupal\field_ui\DisplayOverview'
,
'_title'
=>
'Manage display'
,
)
+
$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
);
}
$route
=
new
Route
(
"
$path
/display/
{
view_mode_name
}
"
,
array
(
'_form'
=>
'\Drupal\field_ui\DisplayOverview'
,
'view_mode_name'
=>
NULL
,
)
+
$defaults
,
array
(
'_field_ui_view_mode_access'
=>
'administer '
.
$entity_type
.
' display'
)
);
$collection
->
add
(
"field_ui.display_overview_view_mode_
$entity_type
"
,
$route
);
}
}
}
/**
* {@inheritdoc}
*/
public
static
function
getSubscribedEvents
()
{
$events
=
parent
::
getSubscribedEvents
();
$events
[
RoutingEvents
::
DYNAMIC
]
=
array
(
'onDynamicRoutes'
,
-
100
);
return
$events
;
}
}
Prev
1
2
3
4
5
6
7
8
…
11
Next