From 62562def8f9c1cb7686afd524439b7e013c5b19a Mon Sep 17 00:00:00 2001 From: Eva Martinez Date: Mon, 20 Sep 2021 16:47:25 +0200 Subject: [PATCH 1/5] #3236712: Added new plugin block key to dashboard pane. --- modules/core/ui/dashboard/farm_ui_dashboard.api.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/core/ui/dashboard/farm_ui_dashboard.api.php b/modules/core/ui/dashboard/farm_ui_dashboard.api.php index 1454b867b8..6463f911da 100644 --- a/modules/core/ui/dashboard/farm_ui_dashboard.api.php +++ b/modules/core/ui/dashboard/farm_ui_dashboard.api.php @@ -35,6 +35,9 @@ function hook_farm_dashboard_panes() { // Specify a 'block' to automatically load a Block. 'block' => 'my_block', + // Specify a plugin block id to load custom Blocks. + 'plugin_block' => 'my_plugin_block_id', + // Optional arguments to pass to the view or block. // This is useful if the view or block can be used in different contexts. 'args' => [ From af786a9abcd4dcf697d11c260f94099f767934fe Mon Sep 17 00:00:00 2001 From: Eva Martinez Date: Mon, 20 Sep 2021 16:50:03 +0200 Subject: [PATCH 2/5] #3236712: Added functionality to render custom blocks in dashboard. --- .../src/Controller/DashboardController.php | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/modules/core/ui/dashboard/src/Controller/DashboardController.php b/modules/core/ui/dashboard/src/Controller/DashboardController.php index af1ec739f8..dd8067e5c0 100644 --- a/modules/core/ui/dashboard/src/Controller/DashboardController.php +++ b/modules/core/ui/dashboard/src/Controller/DashboardController.php @@ -2,8 +2,10 @@ namespace Drupal\farm_ui_dashboard\Controller; +use Drupal\Core\Block\BlockManagerInterface; use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Layout\LayoutPluginManagerInterface; +use Drupal\Core\Session\AccountInterface; use Drupal\views\Views; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -21,18 +23,38 @@ class DashboardController extends ControllerBase { */ protected $layoutPluginManager; + /** + * The block manager. + * + * @var \Drupal\Core\Block\BlockManagerInterface + */ + protected $blockManager; + + /** + * The current user. + * + * @var \Drupal\Core\Session\AccountInterface + */ + protected $currentUser; + /** * Class constructor. */ - public function __construct(LayoutPluginManagerInterface $layout_plugin_manager) { + public function __construct(LayoutPluginManagerInterface $layout_plugin_manager, BlockManagerInterface $block_manager, AccountInterface $current_user) { $this->layoutPluginManager = $layout_plugin_manager; + $this->blockManager = $block_manager; + $this->currentUser = $current_user; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { - return new static($container->get('plugin.manager.core.layout')); + return new static( + $container->get('plugin.manager.core.layout'), + $container->get('plugin.manager.block'), + $container->get('current_user'), + ); } /** @@ -124,6 +146,20 @@ public function dashboard() { $output = $this->entityTypeManager()->getViewBuilder('block')->view($block); } + // Or if a plugin block id is provided, display the block. + elseif (!empty($pane['plugin_block'])) { + // Render plugin block if is set. + $plugin_block = $this->blockManager->createInstance($pane['plugin_block'], $args); + if ($plugin_block) { + // Check block access. + $access_result = $plugin_block->access($this->currentUser); + if (is_object($access_result) && $access_result->isAllowed() || is_bool($access_result) && $access_result) { + // Builds renderable array of the block. + $output = $plugin_block->build(); + } + } + } + // If a specific title was provided, use it. if (!empty($pane['title'])) { $title = $pane['title']; From ddefa1e2c9a712befcb5dbe75e394e8c66dd6661 Mon Sep 17 00:00:00 2001 From: Eva Martinez Date: Mon, 20 Sep 2021 17:28:14 +0200 Subject: [PATCH 3/5] #3236712: Rename new dashboard pane key. --- modules/core/ui/dashboard/farm_ui_dashboard.api.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/core/ui/dashboard/farm_ui_dashboard.api.php b/modules/core/ui/dashboard/farm_ui_dashboard.api.php index 6463f911da..b3237c9ddf 100644 --- a/modules/core/ui/dashboard/farm_ui_dashboard.api.php +++ b/modules/core/ui/dashboard/farm_ui_dashboard.api.php @@ -35,8 +35,8 @@ function hook_farm_dashboard_panes() { // Specify a 'block' to automatically load a Block. 'block' => 'my_block', - // Specify a plugin block id to load custom Blocks. - 'plugin_block' => 'my_plugin_block_id', + // Specify a block plugin id to load custom Blocks. + 'block_plugin' => 'my_block_plugin_id', // Optional arguments to pass to the view or block. // This is useful if the view or block can be used in different contexts. From 3ea20c1d633abd0db3d2dd9dc570bed067a3a55e Mon Sep 17 00:00:00 2001 From: Eva Martinez Date: Mon, 20 Sep 2021 17:32:48 +0200 Subject: [PATCH 4/5] #3236712: Renamed block plugin variable and use the renamed dashboard pane key and simplify block access check. --- .../dashboard/src/Controller/DashboardController.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/core/ui/dashboard/src/Controller/DashboardController.php b/modules/core/ui/dashboard/src/Controller/DashboardController.php index dd8067e5c0..0327967ef9 100644 --- a/modules/core/ui/dashboard/src/Controller/DashboardController.php +++ b/modules/core/ui/dashboard/src/Controller/DashboardController.php @@ -147,15 +147,15 @@ public function dashboard() { } // Or if a plugin block id is provided, display the block. - elseif (!empty($pane['plugin_block'])) { + elseif (!empty($pane['block_plugin'])) { // Render plugin block if is set. - $plugin_block = $this->blockManager->createInstance($pane['plugin_block'], $args); - if ($plugin_block) { + $block_plugin = $this->blockManager->createInstance($pane['block_plugin'], $args); + if ($block_plugin) { // Check block access. - $access_result = $plugin_block->access($this->currentUser); - if (is_object($access_result) && $access_result->isAllowed() || is_bool($access_result) && $access_result) { + $access_result = $block_plugin->access($this->currentUser); + if ($access_result == TRUE) { // Builds renderable array of the block. - $output = $plugin_block->build(); + $output = $block_plugin->build(); } } } From 7092a0830f02c42c1a503bb997db7872ff205011 Mon Sep 17 00:00:00 2001 From: Michael Stenta Date: Wed, 22 Sep 2021 15:12:07 -0400 Subject: [PATCH 5/5] Refactor dashboard block handling to always expect block plugin ID. --- .../ui/dashboard/farm_ui_dashboard.api.php | 5 +-- .../src/Controller/DashboardController.php | 33 ++++--------------- .../install/block.block.dashboard_test.yml | 12 ------- .../farm_ui_dashboard_test.module | 2 +- .../tests/src/Functional/DashboardTest.php | 1 - .../install/block.block.dashboard_map.yml | 23 ------------- modules/core/ui/map/farm_ui_map.module | 5 ++- .../install/block.block.farm_metrics.yml | 19 ----------- .../core/ui/metrics/farm_ui_metrics.module | 2 +- 9 files changed, 13 insertions(+), 89 deletions(-) delete mode 100644 modules/core/ui/dashboard/tests/modules/dashboard_test/config/install/block.block.dashboard_test.yml delete mode 100644 modules/core/ui/map/config/install/block.block.dashboard_map.yml delete mode 100644 modules/core/ui/metrics/config/install/block.block.farm_metrics.yml diff --git a/modules/core/ui/dashboard/farm_ui_dashboard.api.php b/modules/core/ui/dashboard/farm_ui_dashboard.api.php index b3237c9ddf..a7a155ee11 100644 --- a/modules/core/ui/dashboard/farm_ui_dashboard.api.php +++ b/modules/core/ui/dashboard/farm_ui_dashboard.api.php @@ -32,12 +32,9 @@ function hook_farm_dashboard_panes() { 'view' => 'my_view', 'view_display_id' => 'block_1', - // Specify a 'block' to automatically load a Block. + // Specify a block plugin ID to automatically load a Block. 'block' => 'my_block', - // Specify a block plugin id to load custom Blocks. - 'block_plugin' => 'my_block_plugin_id', - // Optional arguments to pass to the view or block. // This is useful if the view or block can be used in different contexts. 'args' => [ diff --git a/modules/core/ui/dashboard/src/Controller/DashboardController.php b/modules/core/ui/dashboard/src/Controller/DashboardController.php index 0327967ef9..f6c0cb92d7 100644 --- a/modules/core/ui/dashboard/src/Controller/DashboardController.php +++ b/modules/core/ui/dashboard/src/Controller/DashboardController.php @@ -125,37 +125,16 @@ public function dashboard() { // Or if a block is provided, display the block. elseif (!empty($pane['block'])) { - /** @var \Drupal\block\Entity\Block $block */ - $block = $this->entityTypeManager()->getStorage('block')->load($pane['block']); - - // Set the block plugin config if provided. - if (!empty($args)) { - $block->getPlugin()->setConfiguration($args); - } - - // If the block plugin displays the label by default, set the title. - $block_config = $block->getPlugin()->getConfiguration(); - if ($block_config['label_display']) { - $title = $block->label(); - } - - // Use the block's weight by default. - $weight = $block->getWeight(); - - // Build the blocks renderable output. - $output = $this->entityTypeManager()->getViewBuilder('block')->view($block); - } - - // Or if a plugin block id is provided, display the block. - elseif (!empty($pane['block_plugin'])) { // Render plugin block if is set. - $block_plugin = $this->blockManager->createInstance($pane['block_plugin'], $args); - if ($block_plugin) { + $block = $this->blockManager->createInstance($pane['block'], $args); + if ($block) { + // Check block access. - $access_result = $block_plugin->access($this->currentUser); + $access_result = $block->access($this->currentUser); if ($access_result == TRUE) { + // Builds renderable array of the block. - $output = $block_plugin->build(); + $output = $block->build(); } } } diff --git a/modules/core/ui/dashboard/tests/modules/dashboard_test/config/install/block.block.dashboard_test.yml b/modules/core/ui/dashboard/tests/modules/dashboard_test/config/install/block.block.dashboard_test.yml deleted file mode 100644 index f991681a17..0000000000 --- a/modules/core/ui/dashboard/tests/modules/dashboard_test/config/install/block.block.dashboard_test.yml +++ /dev/null @@ -1,12 +0,0 @@ -langcode: en -status: true -id: dashboard_test -theme: claro -weight: 1000 -provider: null -plugin: dashboard_test_block -settings: - label: 'Dashboard test block label' - provider: farm_ui_dashboard_test - label_display: '1' -visibility: { } diff --git a/modules/core/ui/dashboard/tests/modules/dashboard_test/farm_ui_dashboard_test.module b/modules/core/ui/dashboard/tests/modules/dashboard_test/farm_ui_dashboard_test.module index 130e098c3b..07d23745d6 100644 --- a/modules/core/ui/dashboard/tests/modules/dashboard_test/farm_ui_dashboard_test.module +++ b/modules/core/ui/dashboard/tests/modules/dashboard_test/farm_ui_dashboard_test.module @@ -11,7 +11,7 @@ function farm_ui_dashboard_test_farm_dashboard_panes() { return [ 'dashboard_block' => [ - 'block' => 'dashboard_test', + 'block' => 'dashboard_test_block', ], 'dashboard_view' => [ 'view' => 'dashboard_test_view', diff --git a/modules/core/ui/dashboard/tests/src/Functional/DashboardTest.php b/modules/core/ui/dashboard/tests/src/Functional/DashboardTest.php index 980ad208ad..18a2ed1ce2 100644 --- a/modules/core/ui/dashboard/tests/src/Functional/DashboardTest.php +++ b/modules/core/ui/dashboard/tests/src/Functional/DashboardTest.php @@ -45,7 +45,6 @@ public function testDashboardBlock() { $this->assertSession()->statusCodeEquals(200); // Assert that the test block was added. - $this->assertSession()->pageTextContains('Dashboard test block label'); $this->assertSession()->pageTextContains('This is the dashboard test block.'); } diff --git a/modules/core/ui/map/config/install/block.block.dashboard_map.yml b/modules/core/ui/map/config/install/block.block.dashboard_map.yml deleted file mode 100644 index ae969b47f7..0000000000 --- a/modules/core/ui/map/config/install/block.block.dashboard_map.yml +++ /dev/null @@ -1,23 +0,0 @@ -langcode: en -status: false -dependencies: - enforced: - module: - - farm_ui_dashboard - module: - - farm_map - theme: - - claro -id: dashboard_map -theme: claro -region: content -weight: -100 -provider: null -plugin: map_block -settings: - id: dashboard_map - map_type: dashboard - label: 'Dashboard map' - provider: farm_ui_dashboard - label_display: '0' -visibility: { } diff --git a/modules/core/ui/map/farm_ui_map.module b/modules/core/ui/map/farm_ui_map.module index 9a4b7a3585..3b5a8c0525 100644 --- a/modules/core/ui/map/farm_ui_map.module +++ b/modules/core/ui/map/farm_ui_map.module @@ -15,7 +15,10 @@ use Drupal\Core\Link; function farm_ui_map_farm_dashboard_panes() { return [ 'dashboard_map' => [ - 'block' => 'dashboard_map', + 'block' => 'map_block', + 'args' => [ + 'map_type' => 'dashboard', + ], 'region' => 'top', ], ]; diff --git a/modules/core/ui/metrics/config/install/block.block.farm_metrics.yml b/modules/core/ui/metrics/config/install/block.block.farm_metrics.yml deleted file mode 100644 index d16ae3ff65..0000000000 --- a/modules/core/ui/metrics/config/install/block.block.farm_metrics.yml +++ /dev/null @@ -1,19 +0,0 @@ -langcode: en -status: false -dependencies: - module: - - farm_ui_metrics - theme: - - claro -id: farm_metrics -theme: claro -region: content -weight: 0 -provider: null -plugin: farm_metrics_block -settings: - id: farm_metrics_block - label: 'Metrics' - provider: farm_ui_metrics - label_display: '0' -visibility: { } diff --git a/modules/core/ui/metrics/farm_ui_metrics.module b/modules/core/ui/metrics/farm_ui_metrics.module index 2cf5528ba3..294ef51dd5 100644 --- a/modules/core/ui/metrics/farm_ui_metrics.module +++ b/modules/core/ui/metrics/farm_ui_metrics.module @@ -11,7 +11,7 @@ function farm_ui_metrics_farm_dashboard_panes() { return [ 'metrics' => [ - 'block' => 'farm_metrics', + 'block' => 'farm_metrics_block', 'title' => t('Metrics'), 'region' => 'second', ],