function EntityViewsData::mapSingleFieldViewsData

Same name and namespace in other branches
  1. 9 core/modules/views/src/EntityViewsData.php \Drupal\views\EntityViewsData::mapSingleFieldViewsData()
  2. 8.9.x core/modules/views/src/EntityViewsData.php \Drupal\views\EntityViewsData::mapSingleFieldViewsData()
  3. 10 core/modules/views/src/EntityViewsData.php \Drupal\views\EntityViewsData::mapSingleFieldViewsData()

Provides the views data for a given data type and schema field.

Parameters

string $table: The table of the field to handle.

string $field_name: The machine name of the field being processed.

string $field_type: The type of field being handled.

string $column_name: For fields containing multiple columns, the column name being processed.

string $column_type: Within the field, the column type being handled.

bool $first: TRUE if this is the first column within the field.

\Drupal\Core\Field\FieldDefinitionInterface $field_definition: The field definition.

Return value

array The modified views data field definition.

1 call to EntityViewsData::mapSingleFieldViewsData()
EntityViewsData::mapFieldDefinition in core/modules/views/src/EntityViewsData.php
Puts the views data for a single field onto the views data.

File

core/modules/views/src/EntityViewsData.php, line 479

Class

EntityViewsData
Provides generic views integration for entities.

Namespace

Drupal\views

Code

protected function mapSingleFieldViewsData($table, $field_name, $field_type, $column_name, $column_type, $first, FieldDefinitionInterface $field_definition) {
    $views_field = [];
    // Provide a nicer, less verbose label for the first column within a field.
    // @todo Introduce concept of the "main" column for a field, rather than
    //   assuming the first one is the main column.
    if ($first) {
        $views_field['title'] = $field_definition->getLabel();
    }
    else {
        $views_field['title'] = $field_definition->getLabel() . " ({$column_name})";
    }
    if ($description = $field_definition->getDescription()) {
        $views_field['help'] = $description;
    }
    // Set up the field, sort, argument, and filters, based on
    // the column and/or field data type.
    // @todo Allow field types to customize this.
    // @see https://www.drupal.org/node/2337515
    switch ($field_type) {
        // Special case a few field types.
        case 'timestamp':
        case 'created':
        case 'changed':
            $views_field['field']['id'] = 'field';
            $views_field['argument']['id'] = 'date';
            $views_field['filter']['id'] = 'date';
            $views_field['sort']['id'] = 'date';
            break;
        case 'language':
            $views_field['field']['id'] = 'field_language';
            $views_field['argument']['id'] = 'language';
            $views_field['filter']['id'] = 'language';
            $views_field['sort']['id'] = 'standard';
            break;
        case 'boolean':
            $views_field['field']['id'] = 'field';
            $views_field['argument']['id'] = 'numeric';
            $views_field['filter']['id'] = 'boolean';
            $views_field['sort']['id'] = 'standard';
            break;
        case 'uri':
            // Let's render URIs as URIs by default, not links.
            $views_field['field']['id'] = 'field';
            $views_field['field']['default_formatter'] = 'string';
            $views_field['argument']['id'] = 'string';
            $views_field['filter']['id'] = 'string';
            $views_field['sort']['id'] = 'standard';
            break;
        case 'text':
        case 'text_with_summary':
            // Treat these three long text fields the same.
            $field_type = 'text_long';
        // Intentional fall-through here to the default processing!
        default:
            // For most fields, the field type is generic enough to just use
            // the column type to determine the filters etc.
            switch ($column_type) {
                case 'int':
                case 'integer':
                case 'smallint':
                case 'tinyint':
                case 'mediumint':
                case 'float':
                case 'double':
                case 'decimal':
                    $views_field['field']['id'] = 'field';
                    $views_field['argument']['id'] = 'numeric';
                    $views_field['filter']['id'] = 'numeric';
                    $views_field['sort']['id'] = 'standard';
                    break;
                case 'char':
                case 'string':
                case 'varchar':
                case 'varchar_ascii':
                case 'tinytext':
                case 'text':
                case 'mediumtext':
                case 'longtext':
                    $views_field['field']['id'] = 'field';
                    $views_field['argument']['id'] = 'string';
                    $views_field['filter']['id'] = 'string';
                    $views_field['sort']['id'] = 'standard';
                    break;
                default:
                    $views_field['field']['id'] = 'field';
                    $views_field['argument']['id'] = 'standard';
                    $views_field['filter']['id'] = 'standard';
                    $views_field['sort']['id'] = 'standard';
            }
    }
    // Do post-processing for a few field types.
    $process_method = 'processViewsDataFor' . Container::camelize($field_type);
    if (method_exists($this, $process_method)) {
        $this->{$process_method}($table, $field_definition, $views_field, $column_name);
    }
    return $views_field;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.