You are here

public function WebformPluginHandlerController::index in Webform 8.5

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

File

src/Controller/WebformPluginHandlerController.php, line 50

Class

WebformPluginHandlerController
Controller for all webform handlers.

Namespace

Drupal\webform\Controller

Code

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

  /** @var \Drupal\webform\WebformInterface[] $webforms */
  $webforms = Webform::loadMultiple();
  foreach ($webforms as $webform) {
    $handlers = $webform
      ->getHandlers();
    foreach ($handlers as $handler) {
      $used_by[$handler
        ->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_handlers[$plugin_id]) ? $this
      ->t('Yes') : $this
      ->t('No');
    $row[] = $definition['cardinality'] === -1 ? $this
      ->t('Unlimited') : $definition['cardinality'];
    $row[] = $definition['conditions'] ? $this
      ->t('Yes') : $this
      ->t('No');
    $row[] = $definition['submission'] ? $this
      ->t('Required') : $this
      ->t('Optional');
    $row[] = $definition['results'] ? $this
      ->t('Processed') : $this
      ->t('Ignored');
    $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_handlers[$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 handler label'),
    '#attributes' => [
      'class' => [
        'webform-form-filter-text',
      ],
      'data-element' => '.webform-handler-plugin-table',
      'data-summary' => '.webform-handler-plugin-summary',
      'data-item-singlular' => $this
        ->t('handler'),
      'data-item-plural' => $this
        ->t('handlers'),
      'title' => $this
        ->t('Enter a part of the handler label to filter by.'),
      'autofocus' => 'autofocus',
    ],
  ];

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

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

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