View source
<?php
namespace Drupal\background_image\Form;
use Drupal\background_image\BackgroundImageFormTrait;
use Drupal\background_image\BackgroundImageManager;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Link;
use Drupal\Core\Url;
class BackgroundImageSettingsForm extends ConfigFormBase {
use BackgroundImageFormTrait;
protected function getEditableConfigNames() {
return [
'background_image.settings',
];
}
public function getFormId() {
return 'background_image_settings';
}
public function buildForm(array $form, FormStateInterface $form_state) {
$form = parent::buildForm($form, $form_state);
$form['#attached']['library'][] = 'background_image/admin';
$inline_entity_form = \Drupal::moduleHandler()
->moduleExists('inline_entity_form');
$inline_entity_form_tip = $this
->t('The Inline Entity Form module is required to embed forms.');
$background_image_manager = BackgroundImageManager::service();
$supported_entity_types = $background_image_manager
->getSupportedEntityTypes();
$config = $this
->config('background_image.settings');
$form['vertical_tabs'] = [
'#type' => 'vertical_tabs',
];
$form['entities'] = [
'#group' => 'vertical_tabs',
'#type' => 'details',
'#title' => $this
->t('Entities'),
'#description' => $this
->t('Configure how entities and bundles are associated with background images. Only the "full" view mode of an entity will trigger the condition in which the associated background image will be used.'),
'#open' => TRUE,
];
if (!$inline_entity_form) {
$form['entities']['inline_entity_form']['#markup'] = t('If you wish to embed the background image form while editing an entity, you will need install the @inline_entity_form module.', [
'@inline_entity_form' => Link::fromTextAndUrl('Inline Entity Form', Url::fromUri('https://www.drupal.org/project/inline_entity_form'))
->toString(),
]);
}
$form['entities']['table'] = [
'#type' => 'table',
'#sticky' => TRUE,
'#attributes' => [
'class' => [
'entities',
],
],
'#header' => [
[
'data' => $this
->t('Entity/Bundle'),
],
[
'data' => $this
->t('Enable'),
'class' => [
'small',
],
],
[
'data' => $this
->t('Embed'),
'class' => [
'small',
],
],
[
'data' => $this
->t('Require'),
'class' => [
'small',
],
],
],
'#tree' => FALSE,
];
$rows = [];
foreach ($supported_entity_types as $type => $entity_type) {
$row = [];
$row[] = [
'data' => $entity_type
->getLabel(),
'colspan' => 5,
'class' => [
'entity-type',
],
];
$rows[] = $row;
if ($bundles = $background_image_manager
->getEntityTypeBundles($entity_type)) {
foreach ($bundles as $bundle => $info) {
$row = [];
$row[] = [
'data' => $info['label'],
'class' => [
'entity-bundle',
],
];
$form["entities-{$type}-{$bundle}-enable"] = [
'#type' => 'checkbox',
'#parents' => [
'entities',
$type,
$bundle,
'enable',
],
'#default_value' => !!$config
->get(implode('.', [
'entities',
$type,
$bundle,
'enable',
])),
];
$form["entities-{$type}-{$bundle}-embed"] = [
'#type' => 'container',
];
$form["entities-{$type}-{$bundle}-embed"]['embed'] = [
'#type' => 'checkbox',
'#parents' => [
'entities',
$type,
$bundle,
'embed',
],
'#default_value' => !!$config
->get(implode('.', [
'entities',
$type,
$bundle,
'embed',
])),
];
$form["entities-{$type}-{$bundle}-embed"]['group'] = [
'#type' => 'select',
'#parents' => [
'entities',
$type,
$bundle,
'group',
],
'#default_value' => $config
->get(implode('.', [
'entities',
$type,
$bundle,
'group',
])),
'#attributes' => [
'title' => $this
->t('The group in which the background image form will be embedded into (if it exists).'),
],
'#options' => [
'' => $this
->t('Default'),
'advanced' => $this
->t('Advanced'),
],
];
if (!$inline_entity_form) {
$form["entities-{$type}-{$bundle}-embed"]['embed']['#disabled'] = TRUE;
$form["entities-{$type}-{$bundle}-embed"]['embed']['#default_value'] = FALSE;
$form["entities-{$type}-{$bundle}-embed"]['embed']['#attributes']['title'] = $inline_entity_form_tip;
$form["entities-{$type}-{$bundle}-embed"]['group']['#disabled'] = TRUE;
$form["entities-{$type}-{$bundle}-embed"]['group']['#default_value'] = '';
}
else {
self::addState($form["entities-{$type}-{$bundle}-embed"]['embed'], [
'enabled',
], $form["entities-{$type}-{$bundle}-enable"], [
'*' => [
'checked' => TRUE,
],
]);
self::addState($form["entities-{$type}-{$bundle}-embed"]['group'], [
'enabled',
], $form["entities-{$type}-{$bundle}-enable"], [
'*' => [
'checked' => TRUE,
],
]);
self::addState($form["entities-{$type}-{$bundle}-embed"]['group'], [
'enabled',
], $form["entities-{$type}-{$bundle}-embed"], [
'*' => [
'checked' => TRUE,
],
]);
}
$form["entities-{$type}-{$bundle}-require"] = [
'#type' => 'checkbox',
'#parents' => [
'entities',
$type,
$bundle,
'require',
],
'#default_value' => !!$config
->get(implode('.', [
'entities',
$type,
$bundle,
'require',
])),
];
self::addState($form["entities-{$type}-{$bundle}-require"], [
'enabled',
], $form["entities-{$type}-{$bundle}-enable"], [
'*' => [
'checked' => TRUE,
],
]);
foreach ([
'enable',
'embed',
'require',
] as $property) {
$row[] = [
'data' => &$form["entities-{$type}-{$bundle}-{$property}"],
'class' => [
'small',
],
];
$form["entities-{$type}-{$bundle}-{$property}"]['#printed'] = TRUE;
}
$rows[] = $row;
}
}
}
$form['entities']['table']['#rows'] = $rows;
return $form;
}
public function submitForm(array &$form, FormStateInterface $form_state) {
parent::submitForm($form, $form_state);
$this
->config('background_image.settings')
->merge(array_filter($form_state
->cleanValues()
->getValues()))
->save();
}
}