pluginManager = $plugin_manager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('plugin.manager.webform.handler') ); } /** * {@inheritdoc} */ public function index() { $definitions = $this->pluginManager->getDefinitions(); $definitions = $this->pluginManager->getSortedDefinitions($definitions); $rows = []; foreach ($definitions as $plugin_id => $definition) { $rows[$plugin_id] = [ $plugin_id, $definition['label'], $definition['description'], $definition['category'], ($definition['cardinality'] == -1) ? $this->t('Unlimited') : $definition['cardinality'], $definition['results'] ? $this->t('Processed') : $this->t('Ignored'), $definition['provider'], ]; } ksort($rows); return [ '#type' => 'table', '#header' => [ $this->t('ID'), $this->t('Label'), $this->t('Description'), $this->t('Category'), $this->t('Cardinality'), $this->t('Results'), $this->t('Provided by'), ], '#rows' => $rows, '#sticky' => TRUE, ]; } /** * Shows a list of webform handlers that can be added to a webform. * * @param \Symfony\Component\HttpFoundation\Request $request * The current request. * @param \Drupal\webform\WebformInterface $webform * A webform. * * @return array * A render array as expected by the renderer. */ public function listHandlers(Request $request, WebformInterface $webform) { $headers = [ ['data' => $this->t('Handler'), 'width' => '20%'], ['data' => $this->t('Description'), 'width' => '40%'], ['data' => $this->t('Category'), 'width' => '20%'], ['data' => $this->t('Operations'), 'width' => '20%'], ]; $definitions = $this->pluginManager->getDefinitions(); $definitions = $this->pluginManager->getSortedDefinitions($definitions); $rows = []; foreach ($definitions as $plugin_id => $definition) { // Skip email handler which has dedicated button. if ($plugin_id == 'email') { continue; } // Check cardinality. $cardinality = $definition['cardinality']; $is_cardinality_unlimited = ($cardinality == WebformHandlerInterface::CARDINALITY_UNLIMITED); $is_cardinality_reached = ($webform->getHandlers($plugin_id)->count() >= $cardinality); if (!$is_cardinality_unlimited && $is_cardinality_reached) { continue; } $row = []; $row['title']['data'] = [ '#type' => 'inline_template', '#template' => '
{{ label }}
', '#context' => [ 'label' => $definition['label'], ], ]; $row['description'] = [ 'data' => [ '#markup' => $definition['description'], ], ]; $row['category'] = $definition['category']; $links['add'] = [ 'title' => $this->t('Add handler'), 'url' => Url::fromRoute('entity.webform.handler.add_form', ['webform' => $webform->id(), 'webform_handler' => $plugin_id]), 'attributes' => WebformDialogHelper::getModalDialogAttributes(800), ]; $row['operations']['data'] = [ '#type' => 'operations', '#links' => $links, ]; $rows[] = $row; } $build['#attached']['library'][] = 'webform/webform.form'; $build['filter'] = [ '#type' => 'search', '#title' => $this->t('Filter'), '#title_display' => 'invisible', '#size' => 30, '#placeholder' => $this->t('Filter by handler name'), '#attributes' => [ 'class' => ['webform-form-filter-text'], 'data-element' => '.webform-handler-add-table', 'title' => $this->t('Enter a part of the handler name to filter by.'), 'autofocus' => 'autofocus', ], ]; $build['handlers'] = [ '#type' => 'table', '#header' => $headers, '#rows' => $rows, '#empty' => $this->t('No handler available.'), '#attributes' => [ 'class' => ['webform-handler-add-table'], ], ]; return $build; } }