You are here

public function WebformInvitationDownloadForm::submitForm in Webform Invitation 2.0.x

Same name and namespace in other branches
  1. 8 src/Form/WebformInvitationDownloadForm.php \Drupal\webform_invitation\Form\WebformInvitationDownloadForm::submitForm()

Form submission handler.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Overrides FormInterface::submitForm

File

src/Form/WebformInvitationDownloadForm.php, line 70

Class

WebformInvitationDownloadForm
Allows to download the list of generated codes.

Namespace

Drupal\webform_invitation\Form

Code

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

  /** @var \Drupal\webform\Entity\Webform $webform */
  $webform = $form_state
    ->getValue('webform');
  $webform_id = $webform
    ->id();

  // Get all not used codes from DB table.
  $query = $this->database
    ->select('webform_invitation_codes', 'c')
    ->fields('c');
  $query
    ->condition('webform', $webform_id);
  $query
    ->condition('used', 0);
  $codes = $query
    ->execute();

  // This is the XLS header.
  $xlshead = pack("s*", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);

  // This is the XLS footer.
  $xlsfoot = pack("s*", 0xa, 0x0);
  $data = '';
  $row = 0;

  // Process all codes as rows into file.
  while ($code = $codes
    ->fetchAssoc()) {
    $url = Url::fromRoute('entity.webform.canonical', [
      'webform' => $webform_id,
    ], [
      'query' => [
        'code' => $code['code'],
      ],
      'absolute' => TRUE,
    ])
      ->toString();
    $data .= $this
      ->xlsCell($row, 0, $url);
    $row++;
  }

  // Provide file directly for download.
  $filename = 'webform-invitation-codes-' . $webform_id . '.xls';
  header('Content-Type: application/force-download');
  header('Content-Type: application/octet-stream');
  header('Content-Type: application/download');
  header('Content-Disposition: attachment;filename=' . $filename);
  header('Content-Transfer-Encoding: binary');
  echo $xlshead . $data . $xlsfoot;

  // This is important.
  exit;
}