You are here

public function WebformEntitySettingsConfirmationForm::form in Webform 6.x

Same name and namespace in other branches
  1. 8.5 src/EntitySettings/WebformEntitySettingsConfirmationForm.php \Drupal\webform\EntitySettings\WebformEntitySettingsConfirmationForm::form()

Gets the actual form array to be built.

Overrides WebformEntitySettingsBaseForm::form

See also

\Drupal\Core\Entity\EntityForm::processForm()

\Drupal\Core\Entity\EntityForm::afterBuild()

File

src/EntitySettings/WebformEntitySettingsConfirmationForm.php, line 49

Class

WebformEntitySettingsConfirmationForm
Webform confirmation settings.

Namespace

Drupal\webform\EntitySettings

Code

public function form(array $form, FormStateInterface $form_state) {

  /** @var \Drupal\webform\WebformInterface $webform */
  $webform = $this->entity;
  $settings = $webform
    ->getSettings();

  // Confirmation type.
  $form['confirmation_type'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Confirmation type'),
  ];
  $form['confirmation_type']['ajax_confirmation'] = [
    '#type' => 'webform_message',
    '#message_type' => 'warning',
    '#message_message' => $this
      ->t("Only 'Inline', 'Message', 'Modal', and 'None' confirmation types are fully supported by Ajax."),
    '#access' => $settings['ajax'],
    '#states' => [
      'invisible' => [
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_INLINE,
          ],
        ],
        'or',
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_MESSAGE,
          ],
        ],
        'or',
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_MODAL,
          ],
        ],
        'or',
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_NONE,
          ],
        ],
      ],
    ],
  ];
  $form['confirmation_type']['confirmation_type'] = [
    '#title' => $this
      ->t('Confirmation type'),
    '#type' => 'radios',
    '#options' => [
      WebformInterface::CONFIRMATION_PAGE => $this
        ->t('Page (redirects to new page and displays the confirmation message)'),
      WebformInterface::CONFIRMATION_INLINE => $this
        ->t('Inline (reloads the current page and replaces the webform with the confirmation message)'),
      WebformInterface::CONFIRMATION_MESSAGE => $this
        ->t('Message (reloads the current page/form and displays the confirmation message at the top of the page)'),
      WebformInterface::CONFIRMATION_MODAL => $this
        ->t('Modal (reloads the current page/form and displays the confirmation message in a modal dialog)'),
      WebformInterface::CONFIRMATION_URL => $this
        ->t('URL (redirects to a custom path or URL)'),
      WebformInterface::CONFIRMATION_URL_MESSAGE => $this
        ->t('URL with message (redirects to a custom path or URL and displays the confirmation message at the top of the page)'),
      WebformInterface::CONFIRMATION_NONE => $this
        ->t('None (reloads the current page and does not display a confirmation message)'),
    ],
    '#default_value' => $settings['confirmation_type'],
  ];

  // Page.
  if ($webform
    ->isResultsDisabled()) {
    $form['confirmation_type']['page'] = [
      '#type' => 'webform_message',
      '#message_type' => 'warning',
      '#message_close' => TRUE,
      '#message_storage' => WebformMessage::STORAGE_SESSION,
      '#message_message' => $this
        ->t("Because the saving of submissions is disabled, the <code>[webform_submission:values]</code> token will not be available to the confirmation page's message."),
      '#states' => [
        'visible' => [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_PAGE,
          ],
        ],
      ],
    ];
  }

  // None.
  $form['confirmation_type']['none'] = [
    '#type' => 'webform_message',
    '#message_type' => 'warning',
    '#message_message' => $this
      ->t('This setting assumes that a webform handler will manage the displaying of a confirmation message.'),
    '#states' => [
      'visible' => [
        ':input[name="confirmation_type"]' => [
          'value' => WebformInterface::CONFIRMATION_NONE,
        ],
      ],
    ],
  ];
  $form['confirmation_type']['confirmation_update'] = [
    '#title' => $this
      ->t('Display confirmation when submission is updated'),
    '#description' => $this
      ->t('If checked this select confirmation type and message will be displayed when the submission is updated. Otherwise, a status message will be displayed at the top the page when a submission is updated.'),
    '#type' => 'checkbox',
    '#return_type' => TRUE,
    '#default_value' => $settings['confirmation_update'],
  ];

  // Confirmation url.
  $form['confirmation_url'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Confirmation URL'),
    '#open' => TRUE,
    '#states' => [
      'visible' => [
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_PAGE,
          ],
        ],
        'or',
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_URL,
          ],
        ],
        'or',
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_URL_MESSAGE,
          ],
        ],
      ],
    ],
  ];
  $form['confirmation_url']['confirmation_url'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Confirmation URL'),
    '#description' => $this
      ->t('The URL or path to redirect the user to upon successful submission.') . '<br/>' . t('Paths beginning with a forward slash (/) will redirect be treated as root-relative. Paths without a forward slash (/) will redirect be treated as Drupal relative path.'),
    '#default_value' => $settings['confirmation_url'],
    '#maxlength' => NULL,
    '#states' => [
      'visible' => [
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_URL,
          ],
        ],
        'or',
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_URL_MESSAGE,
          ],
        ],
      ],
      'required' => [
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_URL,
          ],
        ],
        'or',
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_URL_MESSAGE,
          ],
        ],
      ],
    ],
  ];
  $form['confirmation_url']['confirmation_exclude_query'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Exclude query string from Confirmation URL'),
    '#description' => $this
      ->t('If checked, all query string parameters will be removed from the Confirmation URL.'),
    '#default_value' => $settings['confirmation_exclude_query'],
  ];
  $form['confirmation_url']['confirmation_exclude_token'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Exclude token from Confirmation URL'),
    '#description' => $this
      ->t('If checked, to submissions token will be removed from the Confirmation URL and the [webform_submission] tokens will not be available within the confirmation message.'),
    '#default_value' => $settings['confirmation_exclude_token'],
    '#access' => !$webform
      ->isResultsDisabled(),
  ];
  $form['confirmation_url']['token_tree_link'] = $this->tokenManager
    ->buildTreeElement([
    'webform',
    'webform_submission',
    'webform_handler',
  ], $this
    ->t('You may use tokens to pass query string parameters. Make sure all tokens include the urlencode suffix. (i.e. [webform_submission:values:email:urlencode])'));

  // Confirmation settings.
  $form['confirmation_settings'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Confirmation settings'),
    '#open' => TRUE,
    '#states' => [
      'invisible' => [
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_URL,
          ],
        ],
        'or',
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_NONE,
          ],
        ],
      ],
    ],
  ];
  $form['confirmation_settings']['confirmation_title'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Confirmation title'),
    '#description' => $this
      ->t('Page title to be shown upon successful submission.'),
    '#default_value' => $settings['confirmation_title'],
    '#states' => [
      'visible' => [
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_PAGE,
          ],
        ],
        'or',
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_MODAL,
          ],
        ],
      ],
    ],
  ];
  $form['confirmation_settings']['confirmation_message'] = [
    '#type' => 'webform_html_editor',
    '#title' => $this
      ->t('Confirmation message'),
    '#description' => $this
      ->t('Message to be shown upon successful submission.'),
    '#default_value' => $settings['confirmation_message'],
    '#states' => [
      'invisible' => [
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_URL,
          ],
        ],
        'or',
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_NONE,
          ],
        ],
      ],
    ],
  ];
  $form['confirmation_settings']['token_tree_link'] = $this->tokenManager
    ->buildTreeElement();

  // Attributes.
  $form['confirmation_attributes_container'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Confirmation attributes'),
    '#open' => TRUE,
    '#states' => [
      'visible' => [
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_PAGE,
          ],
        ],
        'or',
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_INLINE,
          ],
        ],
      ],
    ],
  ];
  $form['confirmation_attributes_container']['confirmation_attributes'] = [
    '#type' => 'webform_element_attributes',
    '#title' => $this
      ->t('Confirmation'),
    '#classes' => $this
      ->config('webform.settings')
      ->get('settings.confirmation_classes'),
    '#default_value' => $settings['confirmation_attributes'],
  ];

  // Back.
  $form['back'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Confirmation back link'),
    '#states' => [
      'visible' => [
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_PAGE,
          ],
        ],
        'or',
        [
          ':input[name="confirmation_type"]' => [
            'value' => WebformInterface::CONFIRMATION_INLINE,
          ],
        ],
      ],
    ],
  ];
  $form['back']['confirmation_back'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Display back to webform link'),
    '#return_value' => TRUE,
    '#default_value' => $settings['confirmation_back'],
  ];
  $form['back']['back_container'] = [
    '#type' => 'container',
    '#states' => [
      'visible' => [
        [
          ':input[name="confirmation_back"]' => [
            'checked' => TRUE,
          ],
        ],
      ],
    ],
  ];
  $form['back']['back_container']['confirmation_back_label'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Confirmation back link label'),
    '#size' => 20,
    '#default_value' => $settings['confirmation_back_label'],
  ];
  $form['back']['back_container']['confirmation_back_attributes_container'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Confirmation back link attributes'),
  ];
  $form['back']['back_container']['confirmation_back_attributes_container']['confirmation_back_attributes'] = [
    '#type' => 'webform_element_attributes',
    '#title' => $this
      ->t('Confirmation back link'),
    '#classes' => $this
      ->config('webform.settings')
      ->get('settings.confirmation_back_classes'),
    '#default_value' => $settings['confirmation_back_attributes'],
  ];
  $form['back']['back_container']['token_tree_link'] = $this->tokenManager
    ->buildTreeElement();
  $this->tokenManager
    ->elementValidate($form);
  return parent::form($form, $form_state);
}