You are here

public function WebformPluginVariantController::index in Webform 8.5

Same name and namespace in other branches
  1. 6.x src/Controller/WebformPluginVariantController.php \Drupal\webform\Controller\WebformPluginVariantController::index()
1 string reference to 'WebformPluginVariantController::index'
webform.routing.yml in ./webform.routing.yml
webform.routing.yml

File

src/Controller/WebformPluginVariantController.php, line 49

Class

WebformPluginVariantController
Controller for all webform variants.

Namespace

Drupal\webform\Controller

Code

public function index() {
  $excluded_variants = $this
    ->config('webform.settings')
    ->get('variant.excluded_variants');
  $used_by = [];

  /** @var \Drupal\webform\WebformInterface[] $webforms */
  $webforms = Webform::loadMultiple();
  foreach ($webforms as $webform) {
    $variants = $webform
      ->getVariants();
    foreach ($variants as $variant) {
      $used_by[$variant
        ->getPluginId()][$webform
        ->id()] = $webform
        ->toLink()
        ->toRenderable();
    }
  }
  $definitions = $this->pluginManager
    ->getDefinitions();
  $definitions = $this->pluginManager
    ->getSortedDefinitions($definitions);
  $rows = [];
  foreach ($definitions as $plugin_id => $definition) {
    $row = [];
    $row[] = $plugin_id;
    $row[] = [
      'data' => [
        '#markup' => $definition['label'],
        '#prefix' => '<span class="webform-form-filter-text-source">',
        '#suffix' => '</span>',
      ],
    ];
    $row[] = $definition['description'];
    $row[] = $definition['category'];
    $row[] = isset($excluded_variants[$plugin_id]) ? $this
      ->t('Yes') : $this
      ->t('No');
    $row[] = isset($used_by[$plugin_id]) ? [
      'data' => [
        '#theme' => 'item_list',
        '#items' => $used_by[$plugin_id],
      ],
    ] : '';
    $row[] = $definition['provider'];
    $rows[$plugin_id] = [
      'data' => $row,
    ];
    if (isset($excluded_variants[$plugin_id])) {
      $rows[$plugin_id]['class'] = [
        'color-warning',
      ];
    }
  }
  ksort($rows);
  $build = [];

  // Filter.
  $build['filter'] = [
    '#type' => 'search',
    '#title' => $this
      ->t('Filter'),
    '#title_display' => 'invisible',
    '#size' => 30,
    '#placeholder' => $this
      ->t('Filter by variant label'),
    '#attributes' => [
      'class' => [
        'webform-form-filter-text',
      ],
      'data-element' => '.webform-variant-plugin-table',
      'data-summary' => '.webform-variant-plugin-summary',
      'data-item-singlular' => $this
        ->t('variant'),
      'data-item-plural' => $this
        ->t('variants'),
      'title' => $this
        ->t('Enter a part of the variant label to filter by.'),
      'autofocus' => 'autofocus',
    ],
  ];

  // Settings.
  $build['settings'] = [
    '#type' => 'link',
    '#title' => $this
      ->t('Edit configuration'),
    '#url' => Url::fromRoute('webform.config.variants'),
    '#attributes' => [
      'class' => [
        'button',
        'button--small',
      ],
      'style' => 'float: right',
    ],
  ];

  // Display info.
  $build['info'] = [
    '#markup' => $this
      ->t('@total variants', [
      '@total' => count($rows),
    ]),
    '#prefix' => '<p class="webform-variant-plugin-summary">',
    '#suffix' => '</p>',
  ];

  // Variants.
  $build['webform_variants'] = [
    '#type' => 'table',
    '#header' => [
      $this
        ->t('ID'),
      $this
        ->t('Label'),
      $this
        ->t('Description'),
      $this
        ->t('Category'),
      $this
        ->t('Excluded'),
      $this
        ->t('Used by'),
      $this
        ->t('Provided by'),
    ],
    '#rows' => $rows,
    '#sticky' => TRUE,
    '#attributes' => [
      'class' => [
        'webform-variant-plugin-table',
      ],
    ],
  ];
  $build['#attached']['library'][] = 'webform/webform.admin';
  return $build;
}