SettingsForm.php in Lightning Layout 8
File
src/Form/SettingsForm.php
View source
<?php
namespace Drupal\lightning_layout\Form;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Block\BlockManagerInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\StringTranslation\TranslationInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class SettingsForm extends ConfigFormBase {
protected $entityTypeManager;
protected $blockManager;
protected $deriver;
public function __construct(ConfigFactoryInterface $config_factory, EntityTypeManagerInterface $entity_type_manager, BlockManagerInterface $block_manager, TranslationInterface $translator, $deriver = NULL) {
parent::__construct($config_factory);
$this->entityTypeManager = $entity_type_manager;
$this->blockManager = $block_manager;
$this
->setStringTranslation($translator);
$this->deriver = $deriver;
}
public static function create(ContainerInterface $container) {
$arguments = [
$container
->get('config.factory'),
$container
->get('entity_type.manager'),
$container
->get('plugin.manager.block'),
$container
->get('string_translation'),
];
$deriver = 'Drupal\\entity_block\\Plugin\\Derivative\\EntityBlock';
if (class_exists($deriver)) {
$arguments[] = call_user_func([
$deriver,
'create',
], $container, 'entity_block');
}
$reflector = new \ReflectionClass(static::class);
return $reflector
->newInstanceArgs($arguments);
}
protected function getEditableConfigNames() {
return [
'lightning_layout.settings',
];
}
public function getFormId() {
return 'lightning_layout_settings_form';
}
public function access() {
return AccessResult::allowedIf((bool) $this->deriver);
}
public function buildForm(array $form, FormStateInterface $form_state) {
$form['entity_blocks'] = [
'#type' => 'checkboxes',
'#title' => $this
->t('Entity types to expose as blocks'),
'#default_value' => $this
->config('lightning_layout.settings')
->get('entity_blocks'),
];
$available_types = array_intersect_key($this->entityTypeManager
->getDefinitions(), $this->deriver
->getDerivativeDefinitions([]));
foreach ($available_types as $id => $entity_type) {
$form['entity_blocks']['#options'][$id] = $entity_type
->getLabel();
}
return parent::buildForm($form, $form_state);
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$value = $form_state
->getValue('entity_blocks');
$value = array_filter($value);
$value = array_values($value);
$this
->config('lightning_layout.settings')
->set('entity_blocks', $value)
->save();
$this->blockManager
->clearCachedDefinitions();
parent::submitForm($form, $form_state);
}
}
Classes
Name |
Description |
SettingsForm |
The settings form for controlling Lightning Layout's behavior. |