abstract class Dimension in Dimension 2.0.x
Same name in this branch
- 2.0.x src/Plugin/Field/FieldFormatter/Dimension.php \Drupal\dimension\Plugin\Field\FieldFormatter\Dimension
- 2.0.x src/Plugin/Field/FieldWidget/Dimension.php \Drupal\dimension\Plugin\Field\FieldWidget\Dimension
- 2.0.x src/Plugin/Field/FieldType/Dimension.php \Drupal\dimension\Plugin\Field\FieldType\Dimension
Same name and namespace in other branches
- 8 src/Plugin/Field/FieldType/Dimension.php \Drupal\dimension\Plugin\Field\FieldType\Dimension
- 2.1.x src/Plugin/Field/FieldType/Dimension.php \Drupal\dimension\Plugin\Field\FieldType\Dimension
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\Core\Field\Plugin\Field\FieldType\NumericItemBase
- class \Drupal\Core\Field\Plugin\Field\FieldType\DecimalItem
- class \Drupal\Core\Field\Plugin\Field\FieldType\NumericItemBase
- 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 Dimension
2 string references to 'Dimension'
- dimension.info.yml in ./
dimension.info.yml - dimension.info.yml
- Dimension::formElement in src/
Plugin/ Field/ FieldWidget/ Dimension.php - @noinspection UnsupportedStringOffsetOperationsInspection
File
- src/
Plugin/ Field/ FieldType/ Dimension.php, line 12
Namespace
Drupal\dimension\Plugin\Field\FieldTypeView source
abstract class Dimension extends DecimalItem implements Basic {
/**
* @param $fields
*
* @return int[]
*/
protected static function _defaultStorageSettings($fields) : array {
$settings = [
'value_precision' => 10,
'value_scale' => 2,
];
foreach ($fields as $key => $label) {
$settings[$key . '_precision'] = 10;
$settings[$key . '_scale'] = 2;
}
return $settings;
}
/**
* @param $fields
*
* @return array[]
*/
protected static function _defaultFieldSettings($fields) : array {
$settings = [
'value' => [
'factor' => 1,
'min' => '',
'max' => '',
'prefix' => '',
'suffix' => '',
],
];
foreach ($fields as $key => $label) {
$settings[$key] = [
'factor' => 1,
'min' => '',
'max' => '',
'prefix' => '',
'suffix' => '',
];
}
return $settings;
}
/**
* @param $fields
*
* @return array
*/
protected static function _propertyDefinitions($fields) : array {
$properties = [];
$properties['value'] = DataDefinition::create('string')
->setLabel(t('Value'))
->setRequired(TRUE);
foreach ($fields as $key => $label) {
$properties[$key] = DataDefinition::create('string')
->setLabel($label)
->setRequired(TRUE);
}
return $properties;
}
/**
* @param \Drupal\Core\Field\FieldStorageDefinitionInterface $field_definition
* @param $fields
*
* @return \array[][]
*/
protected static function _schema(FieldStorageDefinitionInterface $field_definition, $fields) : array {
$settings = $field_definition
->getSettings();
$schema = [
'columns' => [
'value' => [
'type' => 'numeric',
'precision' => $settings['value_precision'],
'scale' => $settings['value_scale'],
],
],
];
foreach ($fields as $key => $label) {
$schema['columns'][$key] = [
'type' => 'numeric',
'precision' => $settings[$key . '_precision'],
'scale' => $settings[$key . '_scale'],
];
}
return $schema;
}
private function _storageSettings(&$element, $key, $label, $has_data, $settings) : void {
$range = range(10, 32);
$element[$key . '_precision'] = [
'#type' => 'select',
'#title' => $this
->t('%label precision', [
'%label' => $label,
]),
'#options' => array_combine($range, $range),
'#default_value' => $settings[$key . '_precision'],
'#description' => $this
->t('The total number of digits to store in the database, including those to the right of the decimal.'),
'#disabled' => $has_data,
];
$range = range(0, 10);
$element[$key . '_scale'] = [
'#type' => 'select',
'#title' => $this
->t('%label scale', [
'%label' => $label,
]),
'#options' => array_combine($range, $range),
'#default_value' => $settings[$key . '_scale'],
'#description' => $this
->t('The number of digits to the right of the decimal.'),
'#disabled' => $has_data,
];
}
/**
* {@inheritdoc}
*/
public function storageSettingsForm(array &$form, FormStateInterface $form_state, $has_data) : array {
$settings = $this
->getSettings();
$element = [];
/** @noinspection StaticInvocationViaThisInspection */
foreach ($this
->fields() as $key => $label) {
$this
->_storageSettings($element, $key, $label, $has_data, $settings);
}
$this
->_storageSettings($element, 'value', $this
->t('Full dimension'), $has_data, $settings);
return $element;
}
private function _fieldSettings(&$element, $key, $label, $hide_constraints = FALSE) : void {
$settings = $this
->getSetting($key);
$element[$key] = [
'#type' => 'fieldset',
'#title' => $label,
];
$element[$key]['factor'] = [
'#type' => 'number',
'#title' => $this
->t('Factor'),
'#default_value' => $settings['factor'],
'#step' => 0.1 ** 2,
'#required' => TRUE,
'#description' => $this
->t('A factor to multiply the @label with when calculating the @field', [
'@label' => $label,
'@field' => $this
->getFieldDefinition()
->getLabel(),
]),
'#access' => !$hide_constraints,
];
$element[$key]['min'] = [
'#type' => 'number',
'#title' => $this
->t('Minimum'),
'#default_value' => $settings['min'],
'#step' => 0.1 ** $this
->getSetting($key . '_scale'),
'#description' => $this
->t('The minimum value that should be allowed in this field. Leave blank for no minimum.'),
'#access' => !$hide_constraints,
];
$element[$key]['max'] = [
'#type' => 'number',
'#title' => $this
->t('Maximum'),
'#default_value' => $settings['max'],
'#step' => 0.1 ** $this
->getSetting($key . '_scale'),
'#description' => $this
->t('The maximum value that should be allowed in this field. Leave blank for no maximum.'),
'#access' => !$hide_constraints,
];
$element[$key]['prefix'] = [
'#type' => 'textfield',
'#title' => $this
->t('Prefix'),
'#default_value' => $settings['prefix'],
'#size' => 60,
'#description' => $this
->t("Define a string that should be prefixed to the value, like 'cm ' or 'inch '. Leave blank for none. Separate singular and plural values with a pipe ('inch|inches')."),
];
$element[$key]['suffix'] = [
'#type' => 'textfield',
'#title' => $this
->t('Suffix'),
'#default_value' => $settings['suffix'],
'#size' => 60,
'#description' => $this
->t("Define a string that should be suffixed to the value, like ' mm', ' inch'. Leave blank for none. Separate singular and plural values with a pipe ('inch|inches')."),
];
}
/**
* {@inheritdoc}
*/
public function fieldSettingsForm(array $form, FormStateInterface $form_state) : array {
$element = [];
/** @noinspection StaticInvocationViaThisInspection */
foreach ($this
->fields() as $key => $label) {
$this
->_fieldSettings($element, $key, $label);
}
$this
->_fieldSettings($element, 'value', $this
->t('Full dimension'), TRUE);
return $element;
}
/**
* {@inheritdoc}
*/
public function getConstraints() : array {
$constraint_manager = Drupal::typedDataManager()
->getValidationConstraintManager();
$constraints = [];
foreach ($this->definition
->getConstraints() as $name => $options) {
$constraints[] = $constraint_manager
->create($name, $options);
}
/** @noinspection StaticInvocationViaThisInspection */
foreach ($this
->fields() as $key => $label) {
$settings = $this
->getSetting($key);
$constraints[] = $constraint_manager
->create('ComplexData', [
$key => [
'Regex' => [
'pattern' => '/^[+-]?((\\d+(\\.\\d*)?)|(\\.\\d+))$/i',
],
],
]);
if (!empty($settings['min'])) {
$min = $settings['min'];
$constraints[] = $constraint_manager
->create('ComplexData', [
$key => [
'Range' => [
'min' => $min,
'minMessage' => $this
->t('%name: the value may be no less than %min.', [
'%name' => $label,
'%min' => $min,
]),
],
],
]);
}
if (!empty($settings['max'])) {
$max = $settings['max'];
$constraints[] = $constraint_manager
->create('ComplexData', [
$key => [
'Range' => [
'max' => $max,
'maxMessage' => $this
->t('%name: the value may be no greater than %max.', [
'%name' => $label,
'%max' => $max,
]),
],
],
]);
}
}
return $constraints;
}
/**
* {@inheritdoc}
*/
public function preSave() : void {
$values = [];
/** @noinspection StaticInvocationViaThisInspection */
foreach ($this
->fields() as $key => $label) {
$values[$key] = $this->{$key};
$this->{$key} = round($this->{$key}, $this
->getSetting($key . '_scale'));
}
$this->value = $this
->calculate($values);
}
/**
* {@inheritdoc}
*/
public function isEmpty() : bool {
/** @noinspection StaticInvocationViaThisInspection */
foreach ($this
->fields() as $key => $label) {
if (empty($this->{$key}) && (string) $this->{$key} !== '0') {
return TRUE;
}
}
return FALSE;
}
public function calculate($values) {
$value = 1;
/** @noinspection StaticInvocationViaThisInspection */
foreach ($this
->fields() as $key => $label) {
$settings = $this
->getSetting($key);
$values[$key] = round($values[$key], $this
->getSetting($key . '_scale'));
$value *= $values[$key] * $settings['factor'];
}
return round($value, $this
->getSetting('value_scale'));
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
Basic:: |
public static | function | ||
DecimalItem:: |
public static | function |
Defines the storage-level settings for this plugin. Overrides FieldItemBase:: |
|
DecimalItem:: |
public static | function |
Generates placeholder field values. Overrides FieldItemBase:: |
|
DecimalItem:: |
protected static | function | Helper method to get the number of decimal digits out of a decimal number. | |
DecimalItem:: |
public static | function |
Defines field item properties. Overrides FieldItemInterface:: |
|
DecimalItem:: |
public static | function |
Returns the schema for the field. Overrides FieldItemInterface:: |
|
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
public | function | 2 | |
DependencySerializationTrait:: |
public | function | 2 | |
Dimension:: |
public | function | ||
Dimension:: |
public | function |
Returns a form for the field-level settings. Overrides DecimalItem:: |
|
Dimension:: |
public | function |
Gets a list of validation constraints. Overrides DecimalItem:: |
|
Dimension:: |
public | function |
Determines whether the data structure is empty. Overrides NumericItemBase:: |
|
Dimension:: |
public | function |
Defines custom presave behavior for field values. Overrides DecimalItem:: |
|
Dimension:: |
public | function |
Returns a form for the storage-level settings. Overrides DecimalItem:: |
|
Dimension:: |
protected static | function | ||
Dimension:: |
protected static | function | ||
Dimension:: |
private | function | ||
Dimension:: |
protected static | function | ||
Dimension:: |
protected static | function | ||
Dimension:: |
private | function | ||
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 | 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 |
Returns the name of the main property, if any. Overrides FieldItemInterface:: |
8 |
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 |
Sets the data value. Overrides Map:: |
4 |
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. | |
NumericItemBase:: |
public static | function |
Defines the field-level settings for this plugin. Overrides FieldItemBase:: |
1 |
NumericItemBase:: |
protected static | function | Helper method to truncate a decimal number to a given number of decimals. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 4 |
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. | |
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 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 |