function field_label_field_formatter_third_party_settings_form in Field Label 8
Implements hook_field_formatter_third_party_settings_form().
Adds fields for modifying the class and label value for field that have a label.
File
- ./
field_label.module, line 60 - Provides custom settings to format field labels.
Code
function field_label_field_formatter_third_party_settings_form(FormatterInterface $plugin, FieldDefinitionInterface $field_definition, $view_mode, $form, FormStateInterface $form_state) {
// Get the module config.
$config = \Drupal::config('field_label.settings');
// Get the current user.
$user = \Drupal::currentUser();
// Load the formatter settings.
$setting_keys = [
'label_class',
'label_class_select',
'label_value',
'label_tag',
];
// Ensure at least one feature enabled.
$has_enabled = FALSE;
// Ensure user has access to edit at least one setting.
$has_access = FALSE;
// Load up the settings array:
foreach ($setting_keys as $key) {
$settings[$key] = [
'enabled' => $config
->get($key . '_enabled'),
'value' => $plugin
->getThirdPartySetting('field_label', $key),
'access' => $user
->hasPermission('edit_field_' . $key),
];
$has_enabled = $has_enabled ?: $settings[$key]['enabled'];
$has_access = $has_access ?: $settings[$key]['access'];
}
// Bail out if nothing is enabled, or user has no access.
if (!$has_enabled || !$has_access) {
return [];
}
// Detial wrapper element to keep things tidy.
$elements['field_label'] = [
'#type' => 'details',
'#title' => t('Label settings'),
// Default to open if we have any values to show.
'#open' => $settings['label_class']['value'] || $settings['label_value']['value'] || $settings['label_tag']['value'],
];
// For each available setting, build the full field if the user has access.
// If not, build a hidden field to retain any previous values.
// Label value field.
if ($settings['label_value']['enabled']) {
if ($settings['label_value']['access']) {
$elements['field_label']['label_value'] = [
'#type' => 'textfield',
'#title' => t('Label value'),
'#description' => t('Overwrite the default field label.'),
'#default_value' => $settings['label_value']['value'],
];
}
else {
$elements['field_label']['label_value'] = [
'#type' => 'hidden',
'#value' => $settings['label_value']['value'],
];
}
}
// Label class list.
if ($settings['label_class_select']['enabled']) {
if ($settings['label_class_select']['access']) {
// Ensure valid default value.
$default = '';
if ($valid_style = _field_label_is_valid_style($settings['label_class_select']['value'])) {
$default = $valid_style['selector'];
}
$elements['field_label']['label_class_select'] = [
'#type' => 'select',
'#title' => t('Label class'),
'#description' => t('Select a class to add to the label tag.'),
'#empty_value' => '',
'#options' => _field_label_generate_styles(),
'#default_value' => $default,
];
}
else {
$elements['field_label']['label_class_select'] = [
'#type' => 'hidden',
'#value' => $default,
];
}
}
// Label class field.
if ($settings['label_class']['enabled']) {
if ($settings['label_class']['access']) {
$elements['field_label']['label_class'] = [
'#type' => 'textfield',
'#title' => t('Extra label classes'),
'#description' => t('Space-separated list of valid classnames (no dots). <b>Ex:</b> <code>class-one class__two</code>'),
'#default_value' => $settings['label_class']['value'],
];
}
else {
$elements['field_label']['label_class'] = [
'#type' => 'hidden',
'#value' => $settings['label_class']['value'],
];
}
}
// Label tag field.
if ($settings['label_tag']['enabled']) {
if ($settings['label_tag']['access']) {
$tag_options = [];
$allowed_tags = $config
->get('allowed_tags');
foreach ($allowed_tags as $tag) {
$tag_options[$tag] = $tag;
}
$elements['field_label']['label_tag'] = [
'#type' => 'select',
'#title' => t('Label wrapper'),
'#description' => t('Select a tag to wrap the label value. Choose "Default" to use the wrapper provided by the theme.'),
'#empty_option' => '- Default -',
'#empty_value' => '',
'#options' => $tag_options,
'#default_value' => $settings['label_tag']['value'],
];
}
else {
$elements['field_label']['label_tag'] = [
'#type' => 'hidden',
'#value' => $settings['label_tag']['value'],
];
}
}
return $elements['field_label'];
}