You are here

public function ExportUser::executeMultiple in Open Social 8.5

Same name and namespace in other branches
  1. 8.9 modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php \Drupal\social_user_export\Plugin\Action\ExportUser::executeMultiple()
  2. 8 modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php \Drupal\social_user_export\Plugin\Action\ExportUser::executeMultiple()
  3. 8.2 modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php \Drupal\social_user_export\Plugin\Action\ExportUser::executeMultiple()
  4. 8.3 modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php \Drupal\social_user_export\Plugin\Action\ExportUser::executeMultiple()
  5. 8.4 modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php \Drupal\social_user_export\Plugin\Action\ExportUser::executeMultiple()
  6. 8.6 modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php \Drupal\social_user_export\Plugin\Action\ExportUser::executeMultiple()
  7. 8.7 modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php \Drupal\social_user_export\Plugin\Action\ExportUser::executeMultiple()
  8. 8.8 modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php \Drupal\social_user_export\Plugin\Action\ExportUser::executeMultiple()
  9. 10.3.x modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php \Drupal\social_user_export\Plugin\Action\ExportUser::executeMultiple()
  10. 10.0.x modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php \Drupal\social_user_export\Plugin\Action\ExportUser::executeMultiple()
  11. 10.1.x modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php \Drupal\social_user_export\Plugin\Action\ExportUser::executeMultiple()
  12. 10.2.x modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php \Drupal\social_user_export\Plugin\Action\ExportUser::executeMultiple()
3 calls to ExportUser::executeMultiple()
ExportEnrolments::executeMultiple in modules/social_features/social_event/modules/social_event_enrolments_export/src/Plugin/Action/ExportEnrolments.php
ExportMember::executeMultiple in modules/social_features/social_group/modules/social_group_members_export/src/Plugin/Action/ExportMember.php
ExportUser::execute in modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php
2 methods override ExportUser::executeMultiple()
ExportEnrolments::executeMultiple in modules/social_features/social_event/modules/social_event_enrolments_export/src/Plugin/Action/ExportEnrolments.php
ExportMember::executeMultiple in modules/social_features/social_group/modules/social_group_members_export/src/Plugin/Action/ExportMember.php

File

modules/social_features/social_user_export/src/Plugin/Action/ExportUser.php, line 88

Class

ExportUser
Exports a user accounts to CSV.

Namespace

Drupal\social_user_export\Plugin\Action

Code

public function executeMultiple(array $entities) {

  // Check if headers exists.
  if (empty($this->context['sandbox']['results']['headers'])) {
    $headers = [];

    /** @var \Drupal\social_user_export\Plugin\UserExportPluginBase $instance */
    foreach ($this->pluginDefinitions as $plugin_id => $plugin_definition) {
      $instance = $this->userExportPlugin
        ->createInstance($plugin_id);
      $headers[] = $instance
        ->getHeader();
    }
    $this->context['sandbox']['results']['headers'] = $headers;
  }

  // Create the file if applicable.
  if (empty($this->context['sandbox']['results']['file_path'])) {
    $this->context['sandbox']['results']['file_path'] = $this
      ->getFileTemporaryPath();
    $csv = Writer::createFromPath($this->context['sandbox']['results']['file_path'], 'w');
    $csv
      ->setDelimiter(',');
    $csv
      ->setEnclosure('"');
    $csv
      ->setEscape('\\');
    $csv
      ->insertOne($this->context['sandbox']['results']['headers']);
  }
  else {
    $csv = Writer::createFromPath($this->context['sandbox']['results']['file_path'], 'a');
  }

  // Add formatter.
  $csv
    ->addFormatter([
    new CsvEncoder(),
    'formatRow',
  ]);

  // Now add the entities to export.
  foreach ($entities as $entity_id => $entity) {
    $row = [];

    /** @var \Drupal\social_user_export\Plugin\UserExportPluginBase $instance */
    foreach ($this->pluginDefinitions as $plugin_id => $plugin_definition) {
      $configuration = $this
        ->getPluginConfiguration($plugin_id, $entity_id);
      $instance = $this->userExportPlugin
        ->createInstance($plugin_id, $configuration);
      $row[] = $instance
        ->getValue($entity);
    }
    $csv
      ->insertOne($row);
  }
  if ($this->context['sandbox']['current_batch'] * $this->context['sandbox']['batch_size'] >= $this->context['sandbox']['total']) {
    $data = @file_get_contents($this->context['sandbox']['results']['file_path']);
    $name = basename($this->context['sandbox']['results']['file_path']);
    $path = 'private://csv';
    if (file_prepare_directory($path, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS) && file_save_data($data, $path . '/' . $name)) {
      $url = Url::fromUri(file_create_url($path . '/' . $name));
      $link = Link::fromTextAndUrl($this
        ->t('Download file'), $url);
      $this
        ->messenger()
        ->addMessage($this
        ->t('Export is complete. @link', [
        '@link' => $link
          ->toString(),
      ]));
    }
    else {
      $this
        ->messenger()
        ->addMessage($this
        ->t('Could not save the export file.'), 'error');
      $this->logger
        ->error('Could not save the export file on: %name.', [
        '%name' => $name,
      ]);
    }
  }
}