CSV.php in Migrate Source CSV 8.2
File
src/Plugin/migrate/source/CSV.php
View source
<?php
namespace Drupal\migrate_source_csv\Plugin\migrate\source;
use Drupal\Component\Plugin\ConfigurablePluginInterface;
use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
use Drupal\Component\Utility\NestedArray;
use Drupal\migrate\MigrateException;
use Drupal\migrate\Plugin\migrate\source\SourcePluginBase;
use Drupal\migrate\Plugin\MigrationInterface;
class CSV extends SourcePluginBase implements ConfigurablePluginInterface {
protected $fields = [];
protected $keys = [];
protected $fileClass = '';
protected $file = NULL;
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration);
$this
->setConfiguration($configuration);
if (empty($this
->getConfiguration()['path'])) {
throw new MigrateException('You must declare the "path" to the source CSV file in your source settings.');
}
if (empty($this
->getConfiguration()['keys'])) {
throw new MigrateException('You must declare "keys" as a unique array of fields in your source settings.');
}
$this->fileClass = $this
->getConfiguration()['file_class'];
}
public function __toString() {
return $this
->getConfiguration()['path'];
}
public function initializeIterator() {
if (!file_exists($this
->getConfiguration()['path'])) {
throw new InvalidPluginDefinitionException($this
->getPluginId(), sprintf('File path (%s) does not exist.', $this
->getConfiguration()['path']));
}
$this->file = new $this->fileClass($this
->getConfiguration()['path']);
return $this
->setupFile();
}
protected function setupFile() {
$delimiter = $this
->getConfiguration()['delimiter'];
$enclosure = $this
->getConfiguration()['enclosure'];
$escape = $this
->getConfiguration()['escape'];
$this->file
->setCsvControl($delimiter, $enclosure, $escape);
$this->file
->setFlags($this
->getConfiguration()['file_flags']);
if ($this
->getConfiguration()['header_row_count']) {
$this->file
->setHeaderRowCount($this
->getConfiguration()['header_row_count']);
$this->file
->rewind();
$this->file
->seek($this->file
->getHeaderRowCount() - 1);
$row = $this->file
->current();
foreach ($row as $header) {
$header = trim($header);
$column_names[] = [
$header => $header,
];
}
$this->file
->setColumnNames($column_names);
}
if ($this
->getConfiguration()['column_names']) {
$this->file
->setColumnNames($this
->getConfiguration()['column_names']);
}
return $this->file;
}
public function getIds() {
$ids = [];
foreach ($this
->getConfiguration()['keys'] as $delta => $value) {
if (is_array($value)) {
$ids[$delta] = $value;
}
else {
$ids[$value]['type'] = 'string';
}
}
return $ids;
}
public function fields() {
$fields = [];
if (!$this->file) {
$this
->initializeIterator();
}
foreach ($this->file
->getColumnNames() as $column) {
$fields[key($column)] = reset($column);
}
$fields = $this
->getConfiguration()['fields'] + $fields;
return $fields;
}
public function getConfiguration() {
return $this->configuration;
}
public function getFile() {
return $this->file;
}
public function setConfiguration(array $configuration) {
$this->configuration = NestedArray::mergeDeepArray([
$this
->defaultConfiguration(),
$configuration,
], TRUE);
}
public function defaultConfiguration() {
return [
'fields' => [],
'keys' => [],
'column_names' => [],
'header_row_count' => 0,
'file_flags' => \SplFileObject::READ_CSV | \SplFileObject::READ_AHEAD | \SplFileObject::DROP_NEW_LINE | \SplFileObject::SKIP_EMPTY,
'delimiter' => ',',
'enclosure' => '"',
'escape' => '\\',
'path' => '',
'file_class' => 'Drupal\\migrate_source_csv\\CSVFileObject',
];
}
public function calculateDependencies() {
return [];
}
}
Classes
Name |
Description |
CSV |
Source for CSV. |