You are here

public function UrlEmbedDialog::buildForm in URL Embed 8

Parameters

\Drupal\editor\EditorInterface $editor: The editor to which this dialog corresponds.

\Drupal\embed\EmbedButtonInterface $embed_button: The URL button to which this dialog corresponds.

Overrides FormInterface::buildForm

File

src/Form/UrlEmbedDialog.php, line 74
Contains \Drupal\url_embed\Form\UrlEmbedDialog.

Class

UrlEmbedDialog
Provides a form to embed URLs.

Namespace

Drupal\url_embed\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, EditorInterface $editor = NULL, EmbedButtonInterface $embed_button = NULL) {
  $values = $form_state
    ->getValues();
  $input = $form_state
    ->getUserInput();

  // Set URL button element in form state, so that it can be used later in
  // validateForm() function.
  $form_state
    ->set('embed_button', $embed_button);
  $form_state
    ->set('editor', $editor);

  // Initialize URL element with form attributes, if present.
  $url_element = empty($values['attributes']) ? array() : $values['attributes'];
  $url_element += empty($input['attributes']) ? array() : $input['attributes'];

  // The default values are set directly from \Drupal::request()->request,
  // provided by the editor plugin opening the dialog.
  if (!$form_state
    ->get('url_element')) {
    $form_state
      ->set('url_element', isset($input['editor_object']) ? $input['editor_object'] : array());
  }
  $url_element += $form_state
    ->get('url_element');
  $url_element += array(
    'data-embed-url' => '',
    'data-url-provider' => '',
  );
  $form_state
    ->set('url_element', $url_element);
  $form['#tree'] = TRUE;
  $form['#attached']['library'][] = 'editor/drupal.editor.dialog';
  $form['#prefix'] = '<div id="url-embed-dialog-form">';
  $form['#suffix'] = '</div>';
  $form['attributes']['data-embed-url'] = array(
    '#type' => 'textfield',
    '#title' => 'URL',
    '#default_value' => $url_element['data-embed-url'],
    '#required' => TRUE,
  );
  try {
    if (!empty($url_element['data-embed-url']) && ($info = $this
      ->urlEmbed()
      ->getEmbed($url_element['data-embed-url']))) {
      $url_element['data-url-provider'] = $info
        ->getProviderName();
    }
  } catch (\Exception $e) {
    watchdog_exception('url_embed', $e);
  }
  $form['attributes']['data-url-provider'] = array(
    '#type' => 'value',
    '#value' => $url_element['data-url-provider'],
  );
  $form['attributes']['data-embed-button'] = array(
    '#type' => 'value',
    '#value' => $embed_button
      ->id(),
  );
  $form['attributes']['data-entity-label'] = array(
    '#type' => 'value',
    '#value' => $embed_button
      ->label(),
  );
  $form['actions'] = array(
    '#type' => 'actions',
  );
  $form['actions']['save_modal'] = array(
    '#type' => 'submit',
    '#value' => $this
      ->t('Embed'),
    '#button_type' => 'primary',
    // No regular submit-handler. This form only works via JavaScript.
    '#submit' => array(),
    '#ajax' => array(
      'callback' => '::submitForm',
      'event' => 'click',
    ),
  );
  return $form;
}