You are here

public function WebformBlock::blockForm in Webform 8.5

Same name and namespace in other branches
  1. 6.x src/Plugin/Block/WebformBlock.php \Drupal\webform\Plugin\Block\WebformBlock::blockForm()

Overrides BlockPluginTrait::blockForm

File

src/Plugin/Block/WebformBlock.php, line 113

Class

WebformBlock
Provides a 'Webform' block.

Namespace

Drupal\webform\Plugin\Block

Code

public function blockForm($form, FormStateInterface $form_state) {
  $wrapper_format = $this->requestStack
    ->getCurrentRequest()
    ->get(MainContentViewSubscriber::WRAPPER_FORMAT);
  $is_off_canvas = in_array($wrapper_format, [
    'drupal_dialog.off_canvas',
  ]);

  // Get title, description, and code example.
  $title = $this
    ->t('Default webform submission data (YAML)');
  $description = [
    'content' => [
      '#markup' => $this
        ->t('Enter submission data as name and value pairs as <a href=":href">YAML</a> which will be used to prepopulate the selected webform.', [
        ':href' => 'https://en.wikipedia.org/wiki/YAML',
      ]),
      '#suffix' => ' ',
    ],
    'token' => $this->tokenManager
      ->buildTreeLink(),
  ];
  $example = [];
  $example[] = '# ' . $this
    ->t('This is an example of a comment.');
  $example[] = "element_key: 'some value'";
  $example[] = '';
  $example[] = '# ' . $this
    ->t("The below example uses a token to get the current node's title.");
  $example[] = "title: '[webform_submission:node:title:clear]'";
  $example[] = '';
  $example[] = '# ' . $this
    ->t("Add ':clear' to the end token to return an empty value when the token is missing.");
  $example[] = '# ' . $this
    ->t('The below example uses a token to get a field value from the current node.');
  $example[] = "full_name: '[webform_submission:node:field_full_name:clear]'";
  $example[] = '';
  $form['#attributes'] = [
    'class' => [
      'webform-block-settings-tray-form',
    ],
  ];
  $form['webform_id'] = [
    '#title' => $this
      ->t('Webform'),
    '#type' => 'entity_autocomplete',
    '#target_type' => 'webform',
    '#required' => TRUE,
    '#default_value' => $this
      ->getWebform(),
  ];
  if ($is_off_canvas) {
    $form['default_data'] = [
      '#title' => $title,
      '#type' => 'textarea',
      '#default_value' => $this->configuration['default_data'],
      '#webform_element' => TRUE,
      '#description' => $description,
      '#more_title' => $this
        ->t('Example'),
      '#wrapper_attributes' => [
        'class' => [
          'webform-default-data',
        ],
      ],
      '#more' => [
        '#markup' => implode(PHP_EOL, $example),
        '#prefix' => '<pre>',
        '#suffix' => '</pre>',
      ],
    ];
    $form['#attached']['library'][] = 'webform/webform.off_canvas';
  }
  else {
    $form['default_data'] = [
      '#title' => $title,
      '#type' => 'webform_codemirror',
      '#mode' => 'yaml',
      '#default_value' => $this->configuration['default_data'],
      '#webform_element' => TRUE,
      '#description' => $description,
      '#more_title' => $this
        ->t('Example'),
      '#more' => [
        '#theme' => 'webform_codemirror',
        '#type' => 'yaml',
        '#code' => implode(PHP_EOL, $example),
      ],
    ];
  }
  $form['redirect'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Redirect to the webform'),
    '#default_value' => $this->configuration['redirect'],
    '#return_value' => TRUE,
    '#description' => $this
      ->t('If your webform has multiple pages, this will change the behavior of the "Next" button. This will also affect where validation messages show up after an error.'),
  ];
  $form['token_tree_link'] = $this->tokenManager
    ->buildTreeElement();
  $this->tokenManager
    ->elementValidate($form);
  return $form;
}