You are here

protected function BlockForm::buildVisibilityInterface in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/block/src/BlockForm.php \Drupal\block\BlockForm::buildVisibilityInterface()
  2. 10 core/modules/block/src/BlockForm.php \Drupal\block\BlockForm::buildVisibilityInterface()

Helper function for building the visibility UI form.

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 array with the visibility UI added in.

1 call to BlockForm::buildVisibilityInterface()
BlockForm::form in core/modules/block/src/BlockForm.php
Gets the actual form array to be built.
1 method overrides BlockForm::buildVisibilityInterface()
BlockEntitySettingTrayForm::buildVisibilityInterface in core/modules/settings_tray/src/Block/BlockEntitySettingTrayForm.php
Helper function for building the visibility UI form.

File

core/modules/block/src/BlockForm.php, line 216

Class

BlockForm
Provides form for block instance forms.

Namespace

Drupal\block

Code

protected function buildVisibilityInterface(array $form, FormStateInterface $form_state) {
  $form['visibility_tabs'] = [
    '#type' => 'vertical_tabs',
    '#title' => $this
      ->t('Visibility'),
    '#parents' => [
      'visibility_tabs',
    ],
    '#attached' => [
      'library' => [
        'block/drupal.block',
      ],
    ],
  ];

  // @todo Allow list of conditions to be configured in
  //   https://www.drupal.org/node/2284687.
  $visibility = $this->entity
    ->getVisibility();
  $definitions = $this->manager
    ->getFilteredDefinitions('block_ui', $form_state
    ->getTemporaryValue('gathered_contexts'), [
    'block' => $this->entity,
  ]);
  foreach ($definitions as $condition_id => $definition) {

    // Don't display the current theme condition.
    if ($condition_id == 'current_theme') {
      continue;
    }

    // Don't display the language condition until we have multiple languages.
    if ($condition_id == 'language' && !$this->language
      ->isMultilingual()) {
      continue;
    }

    // Don't display the deprecated node type condition unless it has existing
    // settings.
    // @todo Make this more generic in
    //   https://www.drupal.org/project/drupal/issues/2922451. Also remove
    //   the node_type specific logic below.
    if ($condition_id == 'node_type' && !isset($visibility[$condition_id])) {
      continue;
    }

    /** @var \Drupal\Core\Condition\ConditionInterface $condition */
    $condition = $this->manager
      ->createInstance($condition_id, isset($visibility[$condition_id]) ? $visibility[$condition_id] : []);
    $form_state
      ->set([
      'conditions',
      $condition_id,
    ], $condition);
    $condition_form = $condition
      ->buildConfigurationForm([], $form_state);
    $condition_form['#type'] = 'details';
    $condition_form['#title'] = $condition
      ->getPluginDefinition()['label'];
    $condition_form['#group'] = 'visibility_tabs';
    $form[$condition_id] = $condition_form;
  }
  if (isset($form['node_type'])) {
    $form['node_type']['#title'] = $this
      ->t('Content types (deprecated)');
    $form['node_type']['bundles']['#title'] = $this
      ->t('Content types');
    $form['node_type']['negate']['#type'] = 'value';
    $form['node_type']['negate']['#title_display'] = 'invisible';
    $form['node_type']['negate']['#value'] = $form['node_type']['negate']['#default_value'];
  }
  if (isset($form['entity_bundle:node'])) {
    $form['entity_bundle:node']['negate']['#type'] = 'value';
    $form['entity_bundle:node']['negate']['#title_display'] = 'invisible';
    $form['entity_bundle:node']['negate']['#value'] = $form['entity_bundle:node']['negate']['#default_value'];
  }
  if (isset($form['user_role'])) {
    $form['user_role']['#title'] = $this
      ->t('Roles');
    unset($form['user_role']['roles']['#description']);
    $form['user_role']['negate']['#type'] = 'value';
    $form['user_role']['negate']['#value'] = $form['user_role']['negate']['#default_value'];
  }
  if (isset($form['request_path'])) {
    $form['request_path']['#title'] = $this
      ->t('Pages');
    $form['request_path']['negate']['#type'] = 'radios';
    $form['request_path']['negate']['#default_value'] = (int) $form['request_path']['negate']['#default_value'];
    $form['request_path']['negate']['#title_display'] = 'invisible';
    $form['request_path']['negate']['#options'] = [
      $this
        ->t('Show for the listed pages'),
      $this
        ->t('Hide for the listed pages'),
    ];
  }
  if (isset($form['language'])) {
    $form['language']['negate']['#type'] = 'value';
    $form['language']['negate']['#value'] = $form['language']['negate']['#default_value'];
  }
  return $form;
}