You are here

public function WebformProtectedDownloadsSettingsForm::buildForm in Webform Protected Downloads 8

Form constructor.

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 structure.

Overrides FormInterface::buildForm

File

src/Form/WebformProtectedDownloadsSettingsForm.php, line 66

Class

WebformProtectedDownloadsSettingsForm
Class WebformProtectedDownloadsSettingsForm.

Namespace

Drupal\webform_protected_downloads\Form

Code

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

  // Get current webform .
  $webform = $this->routeMatch
    ->getParameter('webform');

  // Get form settings.
  $webform_settings = $webform
    ->getThirdPartySettings('webform_protected_downloads');
  $options = [
    '404' => $this
      ->t('404 page'),
    'homepage' => $this
      ->t('Homepage with error message'),
    'page_reload' => $this
      ->t('Form page with error message'),
    'custom' => $this
      ->t('Custom page'),
  ];
  $form['fieldset'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Webform protected files settings'),
  ];

  // Create the form.
  $form['fieldset']['enabled_protected_files'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Enable serving protected files after webform submit - <b>Must be checked for other options to work</b>'),
    '#default_value' => isset($webform_settings['enabled_protected_files']) ? $webform_settings['enabled_protected_files'] : FALSE,
  ];
  $form['fieldset']['container'] = [
    '#type' => 'container',
    '#states' => [
      'invisible' => [
        'input[name="enabled_protected_files"]' => [
          'checked' => FALSE,
        ],
      ],
    ],
  ];
  $form['fieldset']['container']['expire_after'] = [
    '#type' => 'number',
    '#title' => $this
      ->t('Expire after X minutes'),
    '#default_value' => isset($webform_settings['expire_after']) ? $webform_settings['expire_after'] : '',
  ];
  $form['fieldset']['container']['enabled_onetime'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('One time visit link'),
    '#default_value' => isset($webform_settings['enabled_onetime']) ? $webform_settings['enabled_onetime'] : FALSE,
  ];
  $form['fieldset']['container']['expired_link_page'] = [
    '#type' => 'radios',
    '#title' => $this
      ->t('Link expired page'),
    '#description' => t('Select a page to be routed when link expires.'),
    '#options' => $options,
    '#default_value' => isset($webform_settings['expired_link_page']) ? $webform_settings['expired_link_page'] : FALSE,
  ];
  $form['fieldset']['container']['custom_link_page'] = array(
    '#type' => 'textfield',
    '#title' => $this
      ->t('Custom link page'),
    '#states' => array(
      'visible' => array(
        ':input[name="expired_link_page"]' => array(
          'value' => 'custom',
        ),
      ),
    ),
    '#default_value' => isset($webform_settings['custom_link_page']) ? $webform_settings['custom_link_page'] : '',
  );
  $defaultTokenText = 'Download file';
  $form['fieldset']['container']['token_text'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Token text title.'),
    '#description' => $this
      ->t('This title will be shown when token is replaced, default title is @default', [
      '@default' => $defaultTokenText,
    ]),
    '#default_value' => isset($webform_settings['token_text']) ? $webform_settings['token_text'] : $defaultTokenText,
  ];
  $form['fieldset']['container']['error_message'] = array(
    '#type' => 'textfield',
    '#title' => $this
      ->t('Error message'),
    '#description' => $this
      ->t('Error message to display.'),
    '#default_value' => $this
      ->t('File not found'),
  );
  $form['fieldset']['container']['protected_file'] = [
    '#name' => 'protected_file',
    '#type' => 'managed_file',
    '#title' => $this
      ->t('Choose a file for protected download'),
    '#multiple' => FALSE,
    '#theme_wrappers' => [],
    '#upload_validators' => [
      'file_validate_extensions' => isset($webform_settings['protected_file_extensions']) ? [
        $webform_settings['protected_file_extensions'],
      ] : [
        'gif png jpg jpeg',
      ],
    ],
    '#error_no_message' => TRUE,
    '#upload_location' => 'private://webform_protected_downloads/',
    '#default_value' => isset($webform_settings['protected_file']) ? $webform_settings['protected_file'] : NULL,
  ];
  $form['fieldset']['container']['protected_file_extensions'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Valid File extensions'),
    '#description' => $this
      ->t("Seperate extensions with ,"),
    '#default_value' => isset($webform_settings['protected_file_extensions']) ? $webform_settings['protected_file_extensions'] : '',
  ];
  $form['actions']['#type'] = 'actions';
  $form['actions']['submit'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Save'),
    '#button_type' => 'primary',
  ];

  // Print an error if private folder is not set.
  $private_folder = $this->fileSystem
    ->realpath('private://');
  if (!$private_folder) {
    $this
      ->messenger()
      ->addError($this
      ->t('Private files folder is not set! Please setup private folder to use this module correctly.'));
  }
  return $form;
}