StringListField.php

Same filename in other branches
  1. 9 core/modules/options/src/Plugin/views/argument/StringListField.php
  2. 8.9.x core/modules/options/src/Plugin/views/argument/StringListField.php
  3. 10 core/modules/options/src/Plugin/views/argument/StringListField.php

Namespace

Drupal\options\Plugin\views\argument

File

core/modules/options/src/Plugin/views/argument/StringListField.php

View source
<?php

namespace Drupal\options\Plugin\views\argument;

use Drupal\Core\Field\FieldFilteredMarkup;
use Drupal\Core\Form\FormStateInterface;
use Drupal\views\Attribute\ViewsArgument;
use Drupal\views\FieldAPIHandlerTrait;
use Drupal\views\ViewExecutable;
use Drupal\views\Plugin\views\display\DisplayPluginBase;
use Drupal\views\Plugin\views\argument\StringArgument;

/**
 * Argument handler for list field to show the human readable name in summary.
 *
 * @ingroup views_argument_handlers
 */
class StringListField extends StringArgument {
    use FieldAPIHandlerTrait;
    
    /**
     * Stores the allowed values of this field.
     *
     * @var array
     */
    protected $allowedValues = NULL;
    
    /**
     * {@inheritdoc}
     */
    public function init(ViewExecutable $view, DisplayPluginBase $display, ?array &$options = NULL) {
        parent::init($view, $display, $options);
        $field_storage = $this->getFieldStorageDefinition();
        $this->allowedValues = options_allowed_values($field_storage);
    }
    
    /**
     * {@inheritdoc}
     */
    protected function defineOptions() {
        $options = parent::defineOptions();
        $options['summary']['contains']['human'] = [
            'default' => FALSE,
        ];
        return $options;
    }
    
    /**
     * {@inheritdoc}
     */
    public function buildOptionsForm(&$form, FormStateInterface $form_state) {
        parent::buildOptionsForm($form, $form_state);
        $form['summary']['human'] = [
            '#title' => $this->t('Display list value as human readable'),
            '#type' => 'checkbox',
            '#default_value' => $this->options['summary']['human'],
            '#states' => [
                'visible' => [
                    ':input[name="options[default_action]"]' => [
                        'value' => 'summary',
                    ],
                ],
            ],
        ];
    }
    
    /**
     * {@inheritdoc}
     */
    public function summaryName($data) {
        $value = $data->{$this->name_alias};
        // If the list element has a human readable name show it.
        if (isset($this->allowedValues[$value]) && !empty($this->options['summary']['human'])) {
            $value = $this->allowedValues[$value];
        }
        return FieldFilteredMarkup::create($this->caseTransform($value, $this->options['case']));
    }

}

Classes

Title Deprecated Summary
StringListField Argument handler for list field to show the human readable name in summary.

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