You are here

public function StylesForm::buildForm in Layout Builder Blocks 1.0.x

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 StylesFilterConfigForm::buildForm

File

src/Form/StylesForm.php, line 56

Class

StylesForm
Configure layout builder blocks styles.

Namespace

Drupal\layout_builder_blocks\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $form = parent::buildForm($form, $form_state);
  $block_restrictions = [];
  $config = $this->configFactory
    ->getEditable(static::CONFIG);
  if ($config
    ->get('block_restrictions')) {
    $block_restrictions = $config
      ->get('block_restrictions');
  }
  $blockDefinitions = $this->blockManager
    ->getDefinitions();
  $blockDefinitions = $this->blockManager
    ->getGroupedDefinitions($blockDefinitions);

  // Remove individual reusable blocks from list.
  unset($blockDefinitions['Custom']);
  if (isset($blockDefinitions['Inline blocks'])) {

    // Relabel the inline block type listing as generic "Custom block types".
    // This category will apply to inline blocks & reusable blocks.
    $blockDefinitions['Custom block types'] = $blockDefinitions['Inline blocks'];
    unset($blockDefinitions['Inline blocks']);
    ksort($blockDefinitions);
  }
  $form['block_restrictions'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Block restrictions'),
    '#description' => $this
      ->t('Optionally limit this style to the following blocks.'),
  ];
  foreach ($blockDefinitions as $category => $blocks) {
    $category_form = [
      '#type' => 'details',
      '#title' => $category,
      '#collapsible' => TRUE,
      '#collapsed' => TRUE,
    ];
    foreach ($blocks as $blockId => $block) {
      $machine_name = $blockId;
      $category_form[$blockId] = [
        '#type' => 'checkbox',
        '#title' => $block['admin_label'] . ' <small>(' . $machine_name . ')</small>',
        '#default_value' => in_array($blockId, $block_restrictions),
        '#parents' => [
          'block_restrictions',
          $blockId,
        ],
      ];
      if ($category == 'Custom block types') {
        $machine_name = str_replace('inline_block:', '', $machine_name);
        $category_form[$blockId]['#title'] = $block['admin_label'] . ' <small>(' . $machine_name . ')</small>';
        $category_form[$blockId]['#description'] = $this
          ->t('Block type selections effect both re-usable and inline blocks.');
      }
    }
    $form['block_restrictions'][$category] = $category_form;
  }
  return $form;
}