class NameItem in Name Field 8
Same name in this branch
- 8 src/Plugin/Field/FieldType/NameItem.php \Drupal\name\Plugin\Field\FieldType\NameItem
- 8 src/Plugin/migrate/cckfield/NameItem.php \Drupal\name\Plugin\migrate\cckfield\NameItem
Plugin implementation of the 'name' field type.
Majority of the settings handling is delegated to the traits so that these can be reused.
Plugin annotation
@FieldType(
id = "name",
label = @Translation("Name"),
description = @Translation("Stores real name."),
default_widget = "name_default",
default_formatter = "name_default"
)
Hierarchy
- class \Drupal\Core\TypedData\TypedData implements PluginInspectionInterface, TypedDataInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\Core\TypedData\Plugin\DataType\Map implements \Drupal\Core\TypedData\Plugin\DataType\IteratorAggregate, ComplexDataInterface
- class \Drupal\Core\Field\FieldItemBase implements FieldItemInterface
- class \Drupal\name\Plugin\Field\FieldType\NameItem implements TrustedCallbackInterface uses NameAdditionalPreferredTrait, NameFieldSettingsTrait, NameFormDisplaySettingsTrait, NameFormSettingsHelperTrait
- class \Drupal\Core\Field\FieldItemBase implements FieldItemInterface
- class \Drupal\Core\TypedData\Plugin\DataType\Map implements \Drupal\Core\TypedData\Plugin\DataType\IteratorAggregate, ComplexDataInterface
Expanded class hierarchy of NameItem
File
- src/
Plugin/ Field/ FieldType/ NameItem.php, line 33
Namespace
Drupal\name\Plugin\Field\FieldTypeView source
class NameItem extends FieldItemBase implements TrustedCallbackInterface {
use NameFieldSettingsTrait;
use NameFormDisplaySettingsTrait;
use NameFormSettingsHelperTrait;
use NameAdditionalPreferredTrait;
/**
* Definition of name field components.
*
* @var array
*/
protected static $components = [
'title',
'given',
'middle',
'family',
'generational',
'credentials',
];
/**
* {@inheritdoc}
*/
public static function trustedCallbacks() {
return [
'fieldSettingsFormPreRender',
];
}
/**
* {@inheritdoc}
*/
public static function schema(FieldStorageDefinitionInterface $field_definition) {
$columns = [];
foreach (static::$components as $key) {
$columns[$key] = [
'type' => 'varchar',
'length' => 255,
'not null' => FALSE,
];
}
return [
'columns' => $columns,
'indexes' => [
'given' => [
'given',
],
'family' => [
'family',
],
],
];
}
/**
* {@inheritdoc}
*/
public static function defaultFieldSettings() {
$settings = self::getDefaultNameFieldSettings();
$settings += self::getDefaultNameFormDisplaySettings();
$settings += self::getDefaultAdditionalPreferredSettings();
$settings['override_format'] = 'default';
return $settings + parent::defaultFieldSettings();
}
/**
* {@inheritdoc}
*/
public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
$properties = [];
$properties['title'] = DataDefinition::create('string')
->setLabel(t('Title'));
$properties['given'] = DataDefinition::create('string')
->setLabel(t('Given'));
$properties['middle'] = DataDefinition::create('string')
->setLabel(t('Middle name(s)'));
$properties['family'] = DataDefinition::create('string')
->setLabel(t('Family'));
$properties['generational'] = DataDefinition::create('string')
->setLabel(t('Generational'));
$properties['credentials'] = DataDefinition::create('string')
->setLabel(t('Credentials'));
return $properties;
}
/**
* {@inheritdoc}
*/
public static function mainPropertyName() {
// There is no main property for this field item.
return NULL;
}
/**
* {@inheritdoc}
*/
public function isEmpty() {
foreach ($this->properties as $property) {
$definition = $property
->getDataDefinition();
if (!$definition
->isComputed() && $property
->getValue() !== NULL) {
return FALSE;
}
}
if (isset($this->values)) {
foreach ($this->values as $name => $value) {
// Title & generational have no meaning by themselves.
if ($name == 'title' || $name == 'generational') {
continue;
}
if (isset($value) && strlen($value) && !isset($this->properties[$name])) {
return FALSE;
}
}
}
return TRUE;
}
/**
* Returns active components only.
*
* @return array
* Array of filtered name component values.
*/
public function filteredArray() {
$values = [];
$field = $this
->getFieldDefinition();
$settings = $field
->getSettings();
$active_components = array_filter($settings['components']);
foreach ($this
->getProperties() as $name => $property) {
if (isset($active_components[$name]) && $active_components[$name]) {
$values[$name] = $property
->getValue();
}
}
return $values;
}
/**
* Get a list of active components.
*
* @return array
* Keyed array of active component labels.
*/
public function activeComponents() {
$settings = $this
->getFieldDefinition()
->getSettings();
$components = [];
foreach (_name_translations() as $key => $label) {
if (!empty($settings['components'][$key])) {
$components[$key] = empty($settings['labels'][$key]) ? $label : $settings['labels'][$key];
}
}
return $components;
}
/**
* {@inheritdoc}
*/
public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
$settings = $this
->getSettings();
$element = $this
->getDefaultNameFieldSettingsForm($settings, $form, $form_state);
$element += $this
->getDefaultNameFormDisplaySettingsForm($settings, $form, $form_state);
foreach ($this
->getNameAdditionalPreferredSettingsForm($form, $form_state) as $key => $value) {
$element[$key] = $value;
$element[$key]['#table_group'] = 'none';
$element[$key]['#weight'] = 50;
}
$element['#pre_render'][] = [
$this,
'fieldSettingsFormPreRender',
];
// Add the overwrite user name option.
if ($this
->getFieldDefinition()
->getTargetEntityTypeId() == 'user') {
$preferred_field = \Drupal::config('name.settings')
->get('user_preferred');
$element['name_user_preferred'] = [
'#type' => 'checkbox',
'#title' => $this
->t("Use this field to override the user's login name?"),
'#description' => $this
->t('You may need to clear the @cache_link before this change is seen everywhere.', [
'@cache_link' => Link::fromTextAndUrl('Performance cache', Url::fromRoute('system.performance_settings'))
->toString(),
]),
'#default_value' => $preferred_field == $this
->getFieldDefinition()
->getName() ? 1 : 0,
'#table_group' => 'above',
'#weight' => -100,
];
// Store the machine name of the Name field.
$element['name_user_preferred_fieldname'] = [
'#type' => 'hidden',
'#default_value' => $this
->getFieldDefinition()
->getName(),
'#table_group' => 'above',
'#weight' => -99,
];
$element['override_format'] = [
'#type' => 'select',
'#title' => $this
->t('User name override format to use'),
'#default_value' => $this
->getSetting('override_format'),
'#options' => name_get_custom_format_options(),
'#table_group' => 'above',
'#weight' => -98,
];
$element['#element_validate'] = [
[
get_class($this),
'validateUserPreferred',
],
];
}
else {
// We may extend this feature to Profile2 latter.
$element['override_format'] = [
'#type' => 'value',
'#value' => $this
->getSetting('override_format'),
'#table_group' => 'none',
];
}
return $element;
}
/**
* Manage whether the name field should override a user's login name.
*/
public static function validateUserPreferred(&$element, FormStateInterface $form_state, &$complete_form) {
$value = NULL;
$config = \Drupal::configFactory()
->getEditable('name.settings');
// Ensure the name field value should override a user's login name.
if (!empty($element['name_user_preferred']) && $element['name_user_preferred']['#value'] == 1) {
// Retrieve the name field's machine name.
$value = $element['name_user_preferred_fieldname']['#default_value'];
}
// Ensure that the login-name-override configuration has changed.
if ($config
->get('user_preferred') != $value) {
// Update the configuration with the new value.
$config
->set('user_preferred', $value)
->save();
// Retrieve the ID of all existing users.
$query = \Drupal::entityQuery('user');
$uids = $query
->execute();
foreach ($uids as $uid) {
// Invalidate the cache for each user so that
// the appropriate login name will be displayed.
Cache::invalidateTags([
'user:' . $uid,
]);
}
\Drupal::logger('name')
->notice('Cache cleared for data tagged as %tag.', [
'%tag' => 'user:{$uid}',
]);
}
}
/**
* {@inheritdoc}
*/
public static function generateSampleValue(FieldDefinitionInterface $field_definition) {
// Single reused generation of 100 random names.
$names =& drupal_static(__FUNCTION__, []);
if (empty($names)) {
$names = \Drupal::service('name.generator')
->generateSampleNames(100, $field_definition);
}
return $names[array_rand($names)];
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
FieldItemBase:: |
public static | function |
Calculates dependencies for field items. Overrides FieldItemInterface:: |
2 |
FieldItemBase:: |
public static | function |
Calculates dependencies for field items on the storage level. Overrides FieldItemInterface:: |
1 |
FieldItemBase:: |
public static | function |
Defines the storage-level settings for this plugin. Overrides FieldItemInterface:: |
10 |
FieldItemBase:: |
public | function |
Defines custom delete behavior for field values. Overrides FieldItemInterface:: |
2 |
FieldItemBase:: |
public | function |
Defines custom revision delete behavior for field values. Overrides FieldItemInterface:: |
|
FieldItemBase:: |
public static | function |
Returns a settings array in the field type's canonical representation. Overrides FieldItemInterface:: |
1 |
FieldItemBase:: |
public static | function |
Returns a settings array that can be stored as a configuration value. Overrides FieldItemInterface:: |
1 |
FieldItemBase:: |
public | function |
Gets the entity that field belongs to. Overrides FieldItemInterface:: |
|
FieldItemBase:: |
public | function |
Gets the field definition. Overrides FieldItemInterface:: |
|
FieldItemBase:: |
public | function |
Gets the langcode of the field values held in the object. Overrides FieldItemInterface:: |
|
FieldItemBase:: |
protected | function | Returns the value of a field setting. | |
FieldItemBase:: |
protected | function | Returns the array of field settings. | |
FieldItemBase:: |
public static | function |
Informs the plugin that a dependency of the field will be deleted. Overrides FieldItemInterface:: |
1 |
FieldItemBase:: |
public | function |
Defines custom post-save behavior for field values. Overrides FieldItemInterface:: |
2 |
FieldItemBase:: |
public | function |
Defines custom presave behavior for field values. Overrides FieldItemInterface:: |
7 |
FieldItemBase:: |
public | function |
Sets the data value. Overrides Map:: |
4 |
FieldItemBase:: |
public | function |
Returns a form for the storage-level settings. Overrides FieldItemInterface:: |
8 |
FieldItemBase:: |
public static | function |
Returns a settings array in the field type's canonical representation. Overrides FieldItemInterface:: |
2 |
FieldItemBase:: |
public static | function |
Returns a settings array that can be stored as a configuration value. Overrides FieldItemInterface:: |
2 |
FieldItemBase:: |
public | function |
Returns a renderable array for a single field item. Overrides FieldItemInterface:: |
|
FieldItemBase:: |
protected | function |
Different to the parent Map class, we avoid creating property objects as
far as possible in order to optimize performance. Thus we just update
$this->values if no property object has been created yet. Overrides Map:: |
|
FieldItemBase:: |
public | function |
Constructs a TypedData object given its definition and context. Overrides TypedData:: |
1 |
FieldItemBase:: |
public | function |
Magic method: Gets a property value. Overrides FieldItemInterface:: |
2 |
FieldItemBase:: |
public | function |
Magic method: Determines whether a property is set. Overrides FieldItemInterface:: |
|
FieldItemBase:: |
public | function |
Magic method: Sets a property value. Overrides FieldItemInterface:: |
1 |
FieldItemBase:: |
public | function |
Magic method: Unsets a property. Overrides FieldItemInterface:: |
|
Map:: |
protected | property |
The data definition. Overrides TypedData:: |
|
Map:: |
protected | property | The array of properties. | |
Map:: |
protected | property | An array of values for the contained properties. | |
Map:: |
public | function |
Applies the default value. Overrides TypedData:: |
4 |
Map:: |
public | function |
Gets a property object. Overrides ComplexDataInterface:: |
|
Map:: |
public | function | ||
Map:: |
public | function |
Gets an array of property objects. Overrides ComplexDataInterface:: |
|
Map:: |
public | function |
Returns a string representation of the data. Overrides TypedData:: |
|
Map:: |
public | function |
Gets the data value. Overrides TypedData:: |
1 |
Map:: |
public | function |
Overrides TraversableTypedDataInterface:: |
4 |
Map:: |
public | function |
Sets a property value. Overrides ComplexDataInterface:: |
|
Map:: |
public | function |
Returns an array of all property values. Overrides ComplexDataInterface:: |
1 |
Map:: |
public | function | Magic method: Implements a deep clone. | |
NameAdditionalPreferredTrait:: |
protected | function | Helper function to find attached fields to use as alternative sources. | |
NameAdditionalPreferredTrait:: |
protected static | function | Gets the default settings for alternative and preferred fields. | |
NameAdditionalPreferredTrait:: |
protected | function | ||
NameAdditionalPreferredTrait:: |
protected | function | Returns a form for the default settings defined above. | |
NameAdditionalPreferredTrait:: |
protected | function | ||
NameAdditionalPreferredTrait:: |
protected | function | ||
NameFieldSettingsTrait:: |
protected static | function | Gets the default settings for controlling a name element. | |
NameFieldSettingsTrait:: |
protected | function | Returns a form for the default settings defined above. | |
NameFieldSettingsTrait:: |
public static | function | Helper function to validate minimum components. | |
NameFieldSettingsTrait:: |
public static | function | Helper function to validate minimum components. | |
NameFieldSettingsTrait:: |
public static | function | Helper function to validate minimum components. | |
NameFormDisplaySettingsTrait:: |
protected static | function | Gets the default settings for controlling a name element. | |
NameFormDisplaySettingsTrait:: |
protected | function | Returns a form for the default settings defined above. | |
NameFormSettingsHelperTrait:: |
protected static | function | Helper function to get the allowed values. | |
NameFormSettingsHelperTrait:: |
public | function | Themes up the field settings into a table. | |
NameFormSettingsHelperTrait:: |
protected static | function | Helper function to validate minimum components. | |
NameItem:: |
protected static | property | Definition of name field components. | |
NameItem:: |
public | function | Get a list of active components. | |
NameItem:: |
public static | function |
Defines the field-level settings for this plugin. Overrides FieldItemBase:: |
|
NameItem:: |
public | function |
Returns a form for the field-level settings. Overrides FieldItemBase:: |
|
NameItem:: |
public | function | Returns active components only. | |
NameItem:: |
public static | function |
Generates placeholder field values. Overrides FieldItemBase:: |
|
NameItem:: |
public | function |
Determines whether the data structure is empty. Overrides Map:: |
|
NameItem:: |
public static | function |
Returns the name of the main property, if any. Overrides FieldItemBase:: |
|
NameItem:: |
public static | function |
Defines field item properties. Overrides FieldItemInterface:: |
|
NameItem:: |
public static | function |
Returns the schema for the field. Overrides FieldItemInterface:: |
|
NameItem:: |
public static | function |
Lists the trusted callbacks provided by the implementing class. Overrides TrustedCallbackInterface:: |
|
NameItem:: |
public static | function | Manage whether the name field should override a user's login name. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
TrustedCallbackInterface:: |
constant | Untrusted callbacks throw exceptions. | ||
TrustedCallbackInterface:: |
constant | Untrusted callbacks trigger silenced E_USER_DEPRECATION errors. | ||
TrustedCallbackInterface:: |
constant | Untrusted callbacks trigger E_USER_WARNING errors. | ||
TypedData:: |
protected | property | The property name. | |
TypedData:: |
protected | property | The parent typed data object. | |
TypedData:: |
public static | function |
Constructs a TypedData object given its definition and context. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Gets a list of validation constraints. Overrides TypedDataInterface:: |
9 |
TypedData:: |
public | function |
Gets the data definition. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns the name of a property or item. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns the parent data structure; i.e. either complex data or a list. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
|
TypedData:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
TypedData:: |
public | function |
Returns the property path of the data. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns the root of the typed data tree. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Sets the context of a property or item via a context aware parent. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Validates the currently set data value. Overrides TypedDataInterface:: |
|
TypedDataTrait:: |
protected | property | The typed data manager used for creating the data types. | |
TypedDataTrait:: |
public | function | Gets the typed data manager. | 2 |
TypedDataTrait:: |
public | function | Sets the typed data manager. | 2 |