You are here

public static function MetatagExport::downloadCsv in Metatag Import Export CSV 8

Batch 'finished' callback used to download csv.

File

src/MetatagExport.php, line 62

Class

MetatagExport
Class for batch process for metatag export.

Namespace

Drupal\metatag_import_export_csv

Code

public static function downloadCsv($success, $results, $operations) {
  $messenger = \Drupal::messenger();
  if ($success) {
    $delimeter = $results['delimeter'];
    $filePath = "public://metatag_import_export_csv/";
    $fileName = "metatag_import_export_csv__" . $results['entity_type'] . ".csv";
    $fileUrl = $filePath . $fileName;
    $response = new Response();
    $response->headers
      ->set('Content-Type', 'text/csv');
    $response->headers
      ->set('Content-Disposition', 'attachment;filename=' . $fileName);
    $header = $results['tags'];
    array_unshift($header, 'entity_id', 'entity_title', 'entity_bundle', 'entity_type', 'field_machine_name', 'alias');
    if (!\Drupal::service('file_system')
      ->prepareDirectory($filePath, FileSystemInterface::CREATE_DIRECTORY)) {
      $messenger
        ->addMessage(t('Unable to create directory in file system for error File. Check permissions and try again.'), 'error');
      return;
    }
    $file = \Drupal::service('file_system')
      ->saveData('', $fileUrl, FileSystemInterface::EXISTS_REPLACE);
    if (!$file) {
      $messenger
        ->addMessage(t('Unable to write to file system. Check permissions and try again.'), 'error');
      return;
    }
    $fp = fopen($file, 'w');
    if (!$fp) {
      $messenger
        ->addMessage(t('Unable open file for writing. Check permissions and try again.'), 'error');
      return;
    }
    fputcsv($fp, $header, $delimeter);
    foreach ($results['rows'] as $row) {
      fputcsv($fp, $row, $delimeter);
    }
    fclose($fp);
    $link = Link::fromTextAndUrl(t($fileName), Url::fromUri(file_create_url($fileUrl)));
    $messenger
      ->addMessage(t('Download Csv : @args', [
      '@args' => $link
        ->toString(),
    ]));
  }
  else {
    $error_operation = reset($operations);
    $messenger
      ->addMessage(t('An error occurred while processing @operation with arguments : @args', [
      '@operation' => $error_operation[0],
      '@args' => print_r($error_operation[0], TRUE),
    ]), 'error');
  }
}