/**
  * {@inheritdoc}
  */
 public function buildForm(array $form, FormStateInterface $form_state)
 {
     $cached_values = $form_state->getTemporaryValue('wizard');
     $this->machine_name = $cached_values['id'];
     $form['#attached']['library'][] = 'core/drupal.dialog.ajax';
     $options = [];
     $contexts = $this->getContexts($cached_values);
     foreach ($this->manager->getDefinitionsForContexts($contexts) as $plugin_id => $definition) {
         $options[$plugin_id] = (string) $definition['label'];
     }
     $form['items'] = array('#type' => 'markup', '#prefix' => '<div id="configured-conditions">', '#suffix' => '</div>', '#theme' => 'table', '#header' => array($this->t('Plugin Id'), $this->t('Summary'), $this->t('Operations')), '#rows' => $this->renderRows($cached_values), '#empty' => t('No required conditions have been configured.'));
     $form['conditions'] = ['#type' => 'select', '#options' => $options];
     $form['add'] = ['#type' => 'submit', '#name' => 'add', '#value' => t('Configure Condition'), '#ajax' => ['callback' => [$this, 'add'], 'event' => 'click'], '#submit' => ['callback' => [$this, 'submitForm']]];
     return $form;
 }
Example #2
0
 /**
  * Helper function for building the visibility UI form.
  *
  * @param array $form
  *   An associative array containing the structure of the form.
  * @param \Drupal\Core\Form\FormStateInterface $form_state
  *   The current state of the form.
  *
  * @return array
  *   The form array with the visibility UI added in.
  */
 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();
     foreach ($this->manager->getDefinitionsForContexts($form_state->getTemporaryValue('gathered_contexts')) 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;
         }
         /** @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');
         $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['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;
 }