Skip to content
Snippets Groups Projects

Disallow some blocks

Files
2
@@ -31,11 +31,10 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
#[Source(
id: 'block',
label: new TranslatableMarkup('Block'),
description: new TranslatableMarkup('instantiate a block'),
description: new TranslatableMarkup('A block plugin from a whitelist.'),
prop_types: ['slot']
)]
class BlockSource extends SourcePluginBase {
/**
* Block to be rendered.
*
@@ -150,16 +149,13 @@ class BlockSource extends SourcePluginBase {
'#executes_submit_callback' => FALSE,
'#empty_value' => '',
'#empty_option' => $this->t('- None -'),
'#required' => TRUE,
'#required' => FALSE,
];
$form["settings"] = [
'#type' => 'container',
'#attributes' => ["id" => $wrapper_id],
"#tree" => TRUE,
];
// @todo support block settings form validation.
// Ass seen from
// \Drupal\layout_builder\Form\ConfigureBlockFormBase::validateForm
$block = $this->getBlock($plugin_id);
if ($block) {
// Create a block entity.
@@ -273,14 +269,16 @@ class BlockSource extends SourcePluginBase {
protected function listBlockDefinitions() : array {
$context_for_block_discovery = $this->context;
$definitions = $this->blockManager->getFilteredDefinitions('ui_patterns', $context_for_block_discovery, []);
// Filter plugins based on the flag 'ui_patterns_compatibility'.
// @see function ui_patterns_plugin_filter_block__ui_patterns_alter
// from ui_patterns.module file
$definitions = array_filter($definitions, function ($definition, $plugin_id) {
return !isset($definition['_ui_patterns_compatible']) || $definition['_ui_patterns_compatible'];
}, ARRAY_FILTER_USE_BOTH);
// Filter based on contexts.
$definitions = $this->contextHandler->filterPluginDefinitionsByContexts($context_for_block_discovery, $definitions);
// Order by category, and then by admin label.
$definitions = $this->blockManager->getSortedDefinitions($definitions);
/*
// Filter out definitions that are not intended to be placed by the UI.
$definitions = array_filter($definitions, function (array $definition) {
return empty($definition['_block_ui_hidden']);
});*/
return $definitions;
}
Loading