ds-8.x-3.9/src/Plugin/DsFieldTemplate/Expert.php
src/Plugin/DsFieldTemplate/Expert.php
<?php
namespace Drupal\ds\Plugin\DsFieldTemplate;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\ds\Attribute\DsFieldTemplate;
/**
* Plugin for the expert field template.
*/
#[DsFieldTemplate(
id: 'expert',
title: new TranslatableMarkup('Expert'),
theme: 'ds_field_expert'
)]
class Expert extends DsFieldTemplateBase {
/**
* {@inheritdoc}
*/
public function alterForm(&$form) {
$config = $this->getConfiguration();
$use_textareaa_for_prefix_suffix = \Drupal::config('ds.settings')->get('ft_expert_prefix_suffix_textarea');
// Add label.
$form['lb'] = [
'#type' => 'textfield',
'#title' => $this->t('Label'),
'#size' => '10',
'#default_value' => $config['lb'],
];
// Add prefix.
$form['prefix'] = [
'#type' => 'textfield',
'#title' => $this->t('Prefix'),
'#size' => '100',
'#description' => $this->t('You can enter any html in here.'),
'#default_value' => $config['prefix'] ?? '',
'#prefix' => '<div class="field-prefix">',
'#suffix' => '</div>',
];
$wrappers = [
'lbw' => ['title' => $this->t('Label wrapper')],
'ow' => ['title' => $this->t('Outer wrapper')],
'fis' => ['title' => $this->t('Field items')],
'fi' => ['title' => $this->t('Field item')],
];
foreach ($wrappers as $wrapper_key => $value) {
$form[$wrapper_key] = [
'#type' => 'checkbox',
'#title' => $value['title'],
'#prefix' => '<div class="ft-group ' . $wrapper_key . '">',
'#default_value' => $config[$wrapper_key],
];
$form[$wrapper_key . '-el'] = [
'#type' => 'textfield',
'#title' => $this->t('Element'),
'#size' => '10',
'#description' => $this->t('E.g. div, span, h2 etc.'),
'#default_value' => $config[$wrapper_key . '-el'],
'#states' => [
'visible' => [
':input[name$="[' . $wrapper_key . ']"]' => ['checked' => TRUE],
],
],
];
$form[$wrapper_key . '-cl'] = [
'#type' => 'textfield',
'#title' => $this->t('Classes'),
'#size' => '10',
'#default_value' => $config[$wrapper_key . '-cl'],
'#description' => $this->t('E.g. field-expert'),
'#states' => [
'visible' => [
':input[name$="[' . $wrapper_key . ']"]' => ['checked' => TRUE],
],
],
];
$form[$wrapper_key . '-at'] = [
'#type' => 'textfield',
'#title' => $this->t('Attributes'),
'#size' => '20',
'#default_value' => $config[$wrapper_key . '-at'],
'#description' => $this->t('E.g. name="anchor"'),
'#states' => [
'visible' => [
':input[name$="[' . $wrapper_key . ']"]' => ['checked' => TRUE],
],
],
];
// Hide colon.
if ($wrapper_key == 'lbw') {
$form['lb-col'] = [
'#type' => 'checkbox',
'#title' => $this->t('Show label colon'),
'#default_value' => $config['lb-col'],
'#attributes' => [
'class' => ['colon-checkbox'],
],
'#states' => [
'visible' => [
':input[name$="[' . $wrapper_key . ']"]' => ['checked' => TRUE],
],
],
];
}
if ($wrapper_key != 'lbw') {
$form[$wrapper_key . '-def-at'] = [
'#type' => 'checkbox',
'#title' => $this->t('Add default attributes'),
'#default_value' => $config[$wrapper_key . '-def-at'],
'#suffix' => ($wrapper_key == 'ow') ? '' : '</div><div class="clearfix"></div>',
'#states' => [
'visible' => [
':input[name$="[' . $wrapper_key . ']"]' => ['checked' => TRUE],
],
],
];
}
else {
$form['ft'][$wrapper_key . '-def-at'] = [
'#markup' => '</div><div class="clearfix"></div>',
];
}
// Default classes for outer wrapper.
if ($wrapper_key == 'ow') {
$form[$wrapper_key . '-def-cl'] = [
'#type' => 'checkbox',
'#title' => $this->t('Add default classes'),
'#default_value' => $config[$wrapper_key . '-def-cl'],
'#suffix' => '</div><div class="clearfix"></div>',
'#states' => [
'visible' => [
':input[name$="[' . $wrapper_key . ']"]' => ['checked' => TRUE],
],
],
];
}
}
// Add suffix.
$form['suffix'] = [
'#type' => 'textfield',
'#title' => $this->t('Suffix'),
'#size' => '100',
'#description' => $this->t('You can enter any html in here.'),
'#default_value' => $config['suffix'] ?? '',
'#prefix' => '<div class="field-suffix">',
'#suffix' => '</div>',
];
// Token support.
if (\Drupal::moduleHandler()->moduleExists('token')) {
$form['tokens'] = [
'#title' => $this->t('Tokens'),
'#type' => 'container',
'#states' => [
'invisible' => [
'input[name="use_token"]' => ['checked' => FALSE],
],
],
];
$form['tokens']['help'] = [
'#theme' => 'token_tree_link',
'#token_types' => 'all',
'#global_types' => FALSE,
'#dialog' => TRUE,
];
}
if ($use_textareaa_for_prefix_suffix) {
foreach (['prefix', 'suffix'] as $key) {
$form[$key]['#type'] = 'textarea';
$form[$key]['#rows'] = 2;
unset($form['prefix']['#size']);
}
}
}
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
$config = [];
$config['lb'] = '';
$config['lb-col'] = \Drupal::config('ds.settings')->get('ft_show_colon');
$wrappers = [
'lb' => ['title' => $this->t('Label')],
'lbw' => ['title' => $this->t('Label wrapper')],
'ow' => ['title' => $this->t('Outer wrapper')],
'fis' => ['title' => $this->t('Field items')],
'fi' => ['title' => $this->t('Field item')],
];
foreach ($wrappers as $wrapper_key => $value) {
$config[$wrapper_key] = FALSE;
$config[$wrapper_key . '-el'] = '';
$config[$wrapper_key . '-at'] = '';
$config[$wrapper_key . '-cl'] = '';
$config[$wrapper_key . '-def-at'] = FALSE;
$config[$wrapper_key . '-def-cl'] = FALSE;
}
return $config;
}
/**
* {@inheritdoc}
*/
public function massageRenderValues(&$field_settings, $values) {
if (!empty($values['lb'])) {
$field_settings['lb'] = $values['lb'];
}
if (!(empty($values['lb-col']))) {
$field_settings['lb-col'] = TRUE;
}
$wrappers = [
'lbw' => $this->t('Label wrapper'),
'ow' => $this->t('Wrapper'),
'fis' => $this->t('Field items'),
'fi' => $this->t('Field item'),
];
foreach ($wrappers as $wrapper_key => $title) {
if (!empty($values[$wrapper_key])) {
// Enable.
$field_settings[$wrapper_key] = TRUE;
// Element.
$field_settings[$wrapper_key . '-el'] = !(empty($values[$wrapper_key . '-el'])) ? $values[$wrapper_key . '-el'] : 'div';
// Classes.
$field_settings[$wrapper_key . '-cl'] = !(empty($values[$wrapper_key . '-cl'])) ? $values[$wrapper_key . '-cl'] : '';
// Default Classes.
if (in_array($wrapper_key, ['ow', 'lb'])) {
$field_settings[$wrapper_key . '-def-cl'] = !(empty($values[$wrapper_key . '-def-cl']));
}
// Attributes.
$field_settings[$wrapper_key . '-at'] = !(empty($values[$wrapper_key . '-at'])) ? $values[$wrapper_key . '-at'] : '';
// Default attributes.
$field_settings[$wrapper_key . '-def-at'] = !(empty($values[$wrapper_key . '-def-at']));
// Token replacement for the wrappers.
/* @var \Drupal\Core\Entity\EntityInterface $entity */
if ($entity = $this->getEntity()) {
// Tokens.
$apply_to = [
$wrapper_key . '-el',
$wrapper_key . '-cl',
$wrapper_key . '-at',
];
foreach ($apply_to as $identifier) {
if (!empty($field_settings[$identifier])) {
$field_settings[$identifier] = \Drupal::token()->replace(
$field_settings[$identifier],
[$entity->getEntityTypeId() => $entity],
[
'clear' => TRUE,
'langcode' => \Drupal::languageManager()
->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)
->getId()
]
);
}
}
}
}
}
// Token replacement for the prefix and suffix.
/* @var \Drupal\Core\Entity\EntityInterface $entity */
if ($entity = $this->getEntity()) {
$apply_to = [
'prefix',
'suffix',
];
foreach ($apply_to as $identifier) {
if (!empty($field_settings[$identifier])) {
$field_settings[$identifier] = \Drupal::token()->replace(
$field_settings[$identifier],
[$entity->getEntityTypeId() => $entity],
[
'clear' => TRUE,
'langcode' => \Drupal::languageManager()
->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)
->getId()
]
);
}
}
}
}
}
