You are here

public function RestrictionPluginConfigForm::buildForm in Layout Builder Restrictions 8.2

Form constructor.

Parameters

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

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

Return value

array The form structure.

Overrides FormInterface::buildForm

File

src/Form/RestrictionPluginConfigForm.php, line 60

Class

RestrictionPluginConfigForm
Class RestrictionPluginConfigForm.

Namespace

Drupal\layout_builder_restrictions\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $plugin_list = $this->pluginManagerLayoutBuilderRestriction
    ->getSortedPlugins(TRUE);
  $form['plugin-table'] = [
    '#type' => 'table',
    '#header' => [
      $this
        ->t('Plugin'),
      $this
        ->t('ID'),
      $this
        ->t('Enabled'),
      $this
        ->t('Weight'),
    ],
    '#empty' => $this
      ->t('There are no restriction plugins defined.'),
    // TableDrag: Each array value is a list of callback arguments for
    // drupal_add_tabledrag().
    '#tabledrag' => [
      [
        'action' => 'order',
        'relationship' => 'sibling',
        'group' => 'plugin-table-order-weight',
      ],
    ],
    '#prefix' => '<p>Set the order the Layout Builder Restriction plugins should be called, and enable or disable as needed.</p>',
  ];

  // Build the table rows and columns.
  // The first nested level in the render array forms the table row,
  // on which you likely want to set #attributes and #weight.
  foreach ($plugin_list as $id => $data) {

    // TableDrag: Mark the table row as draggable.
    $form['plugin-table'][$id]['#attributes']['class'][] = 'draggable';

    // Sort the row according to its existing/configured weight.
    $form['plugin-table'][$id]['#weight'] = $data['weight'];
    if ($data['description']) {
      $form['plugin-table'][$id]['title'] = [
        '#markup' => '<strong>' . $data['title'] . '</strong><br>' . $data['description'],
      ];
    }
    else {
      $form['plugin-table'][$id]['title'] = [
        '#markup' => '<strong>' . $data['title'] . '</strong>',
      ];
    }
    $form['plugin-table'][$id]['id'] = [
      '#plain_text' => $id,
    ];
    $form['plugin-table'][$id]['enabled'] = [
      '#type' => 'checkbox',
      '#title' => $this
        ->t('Enabled'),
      '#title_display' => 'invisible',
      '#default_value' => $data['enabled'],
      // Classify the weight element for #tabledrag.
      '#attributes' => [
        'class' => [
          'plugin-table-enabled',
        ],
      ],
    ];

    // TableDrag: Weight column element.
    $form['plugin-table'][$id]['weight'] = [
      '#type' => 'weight',
      '#title' => $this
        ->t('Weight for @title', [
        '@title' => $id,
      ]),
      '#title_display' => 'invisible',
      '#default_value' => $data['weight'],
      // Classify the weight element for #tabledrag.
      '#attributes' => [
        'class' => [
          'plugin-table-order-weight',
        ],
      ],
    ];
  }
  $form['submit'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Save configuration'),
  ];
  return $form;
}