diff --git a/core/modules/layout/layout.admin.inc b/core/modules/layout/layout.admin.inc deleted file mode 100644 index 797c4c7..0000000 --- a/core/modules/layout/layout.admin.inc +++ /dev/null @@ -1,35 +0,0 @@ -getDefinition($key); - drupal_set_title(t('View template %name', array('%name' => $layout['title'])), PASS_THROUGH); - - // Render the layout in an admin context with region demonstrations. - $instance = layout_manager()->createInstance($key, array()); - $regions = $instance->getRegions(); - foreach ($regions as $region => $info) { - $regions[$region] = '
' . check_plain($info['label']) . '
'; - } - $build['demonstration'] = array( - '#type' => 'markup', - '#markup' => $instance->renderLayout(TRUE, $regions), - ); - $build['#attached']['css'][] = drupal_get_path('module', 'layout') . '/layout.admin.css'; - return $build; -} diff --git a/core/modules/layout/layout.module b/core/modules/layout/layout.module index 17acc6d..9c40b54 100644 --- a/core/modules/layout/layout.module +++ b/core/modules/layout/layout.module @@ -16,30 +16,12 @@ function layout_menu() { ); $items['admin/structure/templates/manage/%'] = array( 'title' => 'View template', - 'page callback' => 'layout_page_view', - 'page arguments' => array(4), - 'access callback' => 'layout_user_access', - 'access arguments' => array(4), - 'file' => 'layout.admin.inc', + 'route_name' => 'layout_page_view', ); return $items; } /** - * Access callback: Checks the existence of a layout. - * - * @param string $key - * The key of the page layout being requested. - * - * @return bool - * TRUE if the current user can access page layout menu items; FALSE - * otherwise. - */ -function layout_user_access($key) { - return (user_access('administer layouts') && layout_manager()->getDefinition($key)); -} - -/** * Implements hook_permission(). */ function layout_permission() { diff --git a/core/modules/layout/layout.routing.yml b/core/modules/layout/layout.routing.yml index d1cd540..886fa75 100644 --- a/core/modules/layout/layout.routing.yml +++ b/core/modules/layout/layout.routing.yml @@ -4,3 +4,9 @@ layout_page_list: _content: '\Drupal\layout\Controller\LayoutController::layoutPageList' requirements: _permission: 'administer layouts' +layout_page_view: + pattern: '/admin/structure/templates/manage/{key}' + defaults: + _content: '\Drupal\layout\Controller\LayoutController::layoutPageView' + requirements: + layout_user_access: 'TRUE' diff --git a/core/modules/layout/layout.services.yml b/core/modules/layout/layout.services.yml index d387b77..2fc5aa1 100644 --- a/core/modules/layout/layout.services.yml +++ b/core/modules/layout/layout.services.yml @@ -2,3 +2,8 @@ services: plugin.manager.layout: class: Drupal\layout\Plugin\Type\LayoutManager arguments: ['@container.namespaces'] + access_check.layout: + class: Drupal\layout\Access\LayoutAccessCheck + tags: + - { name: access_check } + diff --git a/core/modules/layout/lib/Drupal/layout/Controller/LayoutController.php b/core/modules/layout/lib/Drupal/layout/Controller/LayoutController.php index 848ec02..9be996f 100644 --- a/core/modules/layout/lib/Drupal/layout/Controller/LayoutController.php +++ b/core/modules/layout/lib/Drupal/layout/Controller/LayoutController.php @@ -76,4 +76,34 @@ public function layoutPageList() { t('module'); t('theme'); } + + /** + * Page callback: Demonstrates a layout template. + * + * @param string $key + * The key of the page layout being requested. + * + * @return array + * An array as expected by drupal_render(). + * + * @see layout_menu() + */ + public function layoutPageView($key) { + $layout = $this->layout_manager->getDefinition($key); + drupal_set_title(t('View template %name', array('%name' => $layout['title'])), PASS_THROUGH); + + // Render the layout in an admin context with region demonstrations. + $instance = $this->layout_manager->createInstance($key, array()); + $regions = $instance->getRegions(); + foreach ($regions as $region => $info) { + $regions[$region] = '
' . check_plain($info['label']) . '
'; + } + $build['demonstration'] = array( + '#type' => 'markup', + '#markup' => $instance->renderLayout(TRUE, $regions), + ); + $build['#attached']['css'][] = drupal_get_path('module', 'layout') . '/layout.admin.css'; + return $build; + } + }