View source
<?php
namespace Drupal\ui_patterns_layouts\Plugin\Layout;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Layout\LayoutDefault;
use Drupal\Core\Layout\LayoutDefinition;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Plugin\PluginFormInterface;
use Drupal\ui_patterns\UiPatternsManager;
use Drupal\Core\Render\ElementInfoManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class PatternLayout extends LayoutDefault implements PluginFormInterface, ContainerFactoryPluginInterface {
protected $moduleHandler = NULL;
protected $patternManager = NULL;
protected $elementInfo;
public function __construct(array $configuration, $plugin_id, LayoutDefinition $plugin_definition, ElementInfoManagerInterface $element_info, UiPatternsManager $pattern_manager, ModuleHandlerInterface $module_handler) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->elementInfo = $element_info;
$this->patternManager = $pattern_manager;
$this->moduleHandler = $module_handler;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('plugin.manager.element_info'), $container
->get('plugin.manager.ui_patterns'), $container
->get('module_handler'));
}
public function build(array $regions) {
$configuration = $this
->getConfiguration();
if ($configuration['pattern']['field_templates'] == 'only_content') {
$this
->processOnlyContentFields($regions);
}
$fields = [];
foreach ($regions as $region_name => $region) {
$fields[$region_name] = $regions[$region_name];
}
return [
'#type' => 'pattern',
'#id' => $this
->getPluginDefinition()
->get('additional')['pattern'],
'#fields' => $fields,
'#variant' => $configuration['pattern']['variant'],
] + $this->elementInfo
->getInfo('pattern');
}
public function defaultConfiguration() {
return parent::defaultConfiguration() + [
'pattern' => [
'field_templates' => 'default',
'variant' => '',
],
];
}
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$configuration = $this
->getConfiguration();
$form = [];
$form['pattern'] = [
'#group' => 'additional_settings',
'#type' => 'details',
'#title' => $this
->t('Pattern settings'),
'#tree' => TRUE,
];
$form['pattern']['field_templates'] = [
'#type' => 'select',
'#title' => $this
->t('Field templates'),
'#options' => [
'default' => $this
->t("Default"),
'only_content' => $this
->t("Only content"),
],
'#description' => implode('<br/>', [
$this
->t("<b>Default</b>: use field templates to wrap field content."),
$this
->t("<b>Only content</b>: only print field content, without field wrapping or label."),
]),
'#default_value' => $configuration['pattern']['field_templates'],
];
$pattern_id = $this
->getPluginDefinition()
->get('additional')['pattern'];
$definition = $this->patternManager
->getDefinition($pattern_id);
if ($definition
->hasVariants()) {
$form['pattern']['variant'] = [
'#type' => 'select',
'#title' => $this
->t('Variant'),
'#options' => $definition
->getVariantsAsOptions(),
'#default_value' => $configuration['pattern']['variant'],
];
}
$this->moduleHandler
->alter('ui_patterns_layouts_display_settings_form', $form['pattern'], $definition, $configuration);
return $form;
}
public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
}
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
$this->configuration = $form_state
->getValues();
}
protected function processOnlyContentFields(array &$regions) {
foreach ($regions as $region_name => $region) {
if (is_array($region)) {
foreach ($regions[$region_name] as $field_name => $field) {
if (is_array($field) && isset($field['#theme']) && $field['#theme'] == 'field') {
$regions[$region_name][$field_name]['#theme'] = NULL;
}
}
}
}
}
}