Skip to content
Snippets Groups Projects
Commit c2b3c16e authored by Yannick Pot's avatar Yannick Pot
Browse files

Issue #3346969: Allow users to set which plugins to use or not use

parent 346ed1cb
Branches 8.x-1.x
Tags 1.2.0
1 merge request!3Issue #3346969: Allow users to set which plugins to use or not use
structured_data_generator.settings:
langcode: en
disabled_plugins:
label: "Disabled plugins"
structured_data_generator.settings:
type: config_object
mapping:
disabled_plugins:
type: mapping
label: "Disabled plugins"
mapping:
plugin:
type: string
label: 'Plugin (system name)'
is_disabled:
type: boolean
label: 'Is disabled'
<?php
namespace Drupal\structured_data_generator\Form;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\RendererInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class StructuredDataGeneratorSettingsForm extends ConfigFormBase {
/**
* The renderer.
*
* @var \Drupal\Core\Render\RendererInterface
*/
protected $renderer;
/**
* Constructs a structured_data_generatorSettingsForm object.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The factory for configuration objects.
* @param \Drupal\Core\Render\RendererInterface $renderer
* The renderer.
*/
public function __construct(ConfigFactoryInterface $config_factory, RendererInterface $renderer) {
parent::__construct($config_factory);
$this->renderer = $renderer;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('config.factory'),
$container->get('renderer')
);
}
/**
* {@inheritdoc}
*/
public function getFormId(): string {
return 'structured_data_generator_settings_form';
}
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames(): array {
return ['structured_data_generator.settings'];
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state): array {
// $form['#attached']['library'][] = 'structured_data_generator/listener';
$config = $this->config('structured_data_generator.settings');
// Main description.
$form['sdg_description'] = [
'#markup' => $this->t('This module generates structured data based on plugins.'),
];
$form['sdg_plugin_settings'] = [
'#type' => 'details',
'#title' => $this->t('Plugin settings'),
'#collapsible' => TRUE,
'#tree' => TRUE,
'#open' => TRUE,
'#description' => $this->t('Options for the different plugins.'),
];
$form['sdg_plugin_settings']['disabled_plugins'] = [
'#type' => 'checkboxes',
'#title' => $this->t('Disabled plugins'),
'#description' => $this->t('All plugins selected will not generate their data.'),
'#multiple' => TRUE,
'#default_value' => $config->get('sdg_plugin_settings.disabled_plugins') ?? [],
'#options' => $this->getPluginIds()
];
return parent::buildForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function validateForm(array &$form, FormStateInterface $form_state): void {
// Set list of disabled plugins
$disabled_plugins = $form_state->getUserInput()['sdg_plugin_settings']['disabled_plugins'];
$plugins = array_keys($this->getPluginIds());
if ($disabled_plugins && count(array_intersect($plugins, array_keys($disabled_plugins))) !== count($plugins)) {
$args = [
'@list' => implode(',', array_intersect($plugins, array_keys($disabled_plugins))),
];
$form_state->setErrorByName('sdg_plugin_settings][disabled_plugins][list', $this->t('Non existent plugin selected: @list', $args));
}
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state): void {
$config = $this->config('structured_data_generator.settings');
$input = $form_state->getUserInput();
$disabled_plugins = $input['sdg_plugin_settings']['disabled_plugins'];
$config->set('sdg_plugin_settings.disabled_plugins', $disabled_plugins);
$config->save();
parent::submitForm($form, $form_state);
}
private function getPluginIds(): array {
/** @var \Drupal\structured_data_generator\StructuredDataGeneratorManager $plugin_manager */
$plugin_manager = \Drupal::service('plugin.manager.structured_data_generator');
$definitions = $plugin_manager->getDefinitions();
$ordered_definitions = [];
foreach ($definitions as $definition) {
// $ordered_definitions[$definition['provider']] = $definition['provider'];
$ordered_definitions[$definition['id']] = $definition['id'];
}
ksort($ordered_definitions);
return $ordered_definitions;
}
}
......@@ -22,6 +22,10 @@ class StructuredDataGeneratorAttachments {
*/
public function addAttachments(array &$attachments) {
foreach ($this->getProviders() as $provider) {
$settings = \Drupal::config('structured_data_generator.settings');
if ($settings->get('sdg_plugin_settings.disabled_plugins') && $settings->get('sdg_plugin_settings.disabled_plugins')[$provider->getPluginId()] !== NULL) {
continue;
}
$this->addToAttachments($attachments, $provider->getId(), $provider->getStucturedData());
}
}
......
<?php
/**
* Add empty object
*/
function structured_data_generator_update_9001(): void {
\Drupal::configFactory()->getEditable('structured_data_generator.settings')
->save();
}
structured_data_generator.admin:
title: 'Stuctured data generator settings'
description: 'Change structured data generator settings.'
parent: system.admin_config_development
route_name: structured_data_generator.settings
weight: 100
administer structured_data_generator:
title: 'Administer Structured Data Generator'
description: 'Configure structured data generator features of your Drupal installation.'
restrict access: true
structured_data_generator.settings:
path: '/admin/config/development/structured_data_generator'
defaults:
_title: 'Structured data generator settings'
_form: '\Drupal\structured_data_generator\Form\StructuredDataGeneratorSettingsForm'
requirements:
_permission: 'administer structured_data_generator'
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment