You are here

class VboExportCsv in VBO export 8.3

Same name and namespace in other branches
  1. 8 src/Plugin/Action/VboExportCsv.php \Drupal\vbo_export\Plugin\Action\VboExportCsv
  2. 8.2 src/Plugin/Action/VboExportCsv.php \Drupal\vbo_export\Plugin\Action\VboExportCsv

Generates csv.

Plugin annotation


@Action(
  id = "vbo_export_generate_csv_action",
  label = @Translation("Generate csv from selected view results"),
  type = ""
)

Hierarchy

Expanded class hierarchy of VboExportCsv

File

src/Plugin/Action/VboExportCsv.php, line 16

Namespace

Drupal\vbo_export\Plugin\Action
View source
class VboExportCsv extends VboExportBase {
  const EXTENSION = 'csv';

  /**
   * {@inheritdoc}
   *
   * Add csv separator setting to preliminary config.
   */
  public function buildPreConfigurationForm(array $form, array $values, FormStateInterface $form_state) {
    $form = parent::buildPreConfigurationForm($form, $values, $form_state);
    $form['separator'] = [
      '#title' => $this
        ->t('CSV separator'),
      '#type' => 'radios',
      '#options' => [
        ';' => $this
          ->t('semicolon ";"'),
        ',' => $this
          ->t('comma ","'),
        '|' => $this
          ->t('pipe "|"'),
      ],
      '#default_value' => isset($values['separator']) ? $values['separator'] : ';',
    ];
    return $form;
  }

  /**
   * Generate output string.
   */
  protected function generateOutput() {
    $config = $this->configuration;
    $header = $this->context['sandbox']['header'];
    $rows = $this
      ->getCurrentRows();

    // Sanitize data.
    foreach ($header as $key => $item) {
      $header[$key] = strtr($item, [
        $config['separator'] => ' ',
      ]);
    }
    $content_replacements = [
      "\r\n" => ' ',
      "\n\r" => ' ',
      "\r" => ' ',
      "\n" => ' ',
      "\t" => ' ',
      $config['separator'] => ' ',
    ];

    // Generate output.
    $csv_rows = [];
    $csv_rows[] = implode($config['separator'], $header);
    foreach ($rows as $row_index => $row) {
      foreach ($row as $cell_key => $cell) {
        $row[$cell_key] = strtr($cell, $content_replacements);
      }
      $csv_rows[] = implode($config['separator'], $row);
      unset($rows[$row_index]);
    }
    $csv_string = implode(PHP_EOL, $csv_rows);
    if (!empty($config['strip_tags'])) {
      $csv_string = strip_tags($csv_string);
    }

    // BOM needs to be added to UTF-8 encoded csv file
    // to make it easier to read by Excel.
    $output = chr(0xef) . chr(0xbb) . chr(0xbf) . (string) $csv_string;
    return $output;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
VboExportBase::$streamWrapperManager protected property The stream wrapper object.
VboExportBase::$tempStore protected property The tempstore object.
VboExportBase::$time protected property The time service.
VboExportBase::access public function
VboExportBase::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create 1
VboExportBase::execute public function
VboExportBase::executeMultiple public function Execute multiple handler.
VboExportBase::getCid protected function Gets Cache ID for current batch.
VboExportBase::getCurrentRows protected function Current rows to be processed.
VboExportBase::getHeader protected function Prepares sandbox data (header and cache ID).
VboExportBase::getRows protected function Get rows from views results.
VboExportBase::saveRows protected function Saves batch data into Private storage.
VboExportBase::sendToFile protected function Output generated string to file. Message user.
VboExportBase::setHeader protected function Sets table header from view header.
VboExportBase::__construct public function
VboExportCsv::buildPreConfigurationForm public function Add csv separator setting to preliminary config. Overrides VboExportBase::buildPreConfigurationForm
VboExportCsv::EXTENSION constant Overrides VboExportBase::EXTENSION
VboExportCsv::generateOutput protected function Generate output string. Overrides VboExportBase::generateOutput