You are here

public function Overview::buildForm in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/forum/src/Form/Overview.php \Drupal\forum\Form\Overview::buildForm()

Form constructor.

Display a tree of all the terms in a vocabulary, with options to edit each one. The form is made drag and drop by the theme function.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

\Drupal\taxonomy\VocabularyInterface $taxonomy_vocabulary: The vocabulary to display the overview form for.

Return value

array The form structure.

Overrides OverviewTerms::buildForm

File

core/modules/forum/src/Form/Overview.php, line 29

Class

Overview
Provides forum overview form for the forum vocabulary.

Namespace

Drupal\forum\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, VocabularyInterface $taxonomy_vocabulary = NULL) {
  $forum_config = $this
    ->config('forum.settings');
  $vid = $forum_config
    ->get('vocabulary');
  $vocabulary = $this->entityTypeManager
    ->getStorage('taxonomy_vocabulary')
    ->load($vid);
  if (!$vocabulary) {
    throw new NotFoundHttpException();
  }

  // Build base taxonomy term overview.
  $form = parent::buildForm($form, $form_state, $vocabulary);
  foreach (Element::children($form['terms']) as $key) {
    if (isset($form['terms'][$key]['#term'])) {

      /** @var \Drupal\taxonomy\TermInterface $term */
      $term = $form['terms'][$key]['#term'];
      $form['terms'][$key]['term']['#url'] = Url::fromRoute('forum.page', [
        'taxonomy_term' => $term
          ->id(),
      ]);
      if (!empty($term->forum_container->value)) {
        $title = $this
          ->t('edit container');
        $url = Url::fromRoute('entity.taxonomy_term.forum_edit_container_form', [
          'taxonomy_term' => $term
            ->id(),
        ]);
      }
      else {
        $title = $this
          ->t('edit forum');
        $url = Url::fromRoute('entity.taxonomy_term.forum_edit_form', [
          'taxonomy_term' => $term
            ->id(),
        ]);
      }

      // Re-create the operations column and add only the edit link.
      $form['terms'][$key]['operations'] = [
        '#type' => 'operations',
        '#links' => [
          'edit' => [
            'title' => $title,
            'url' => $url,
          ],
        ],
      ];
    }
  }

  // Remove the alphabetical reset.
  unset($form['actions']['reset_alphabetical']);

  // Use the existing taxonomy overview submit handler.
  $form['terms']['#empty'] = $this
    ->t('No containers or forums available. <a href=":container">Add container</a> or <a href=":forum">Add forum</a>.', [
    ':container' => Url::fromRoute('forum.add_container')
      ->toString(),
    ':forum' => Url::fromRoute('forum.add_forum')
      ->toString(),
  ]);
  return $form;
}