commerce_export-8.x-1.0-alpha1/src/Plugin/migrate/source/Attribute.php
src/Plugin/migrate/source/Attribute.php
<?php
namespace Drupal\commerce_export\Plugin\migrate\source;
use Drupal\migrate_source_csv\Plugin\migrate\source\CSV;
/**
* Yields each attribute name and value pair.
*
* There are four attribute name/attribute value pairs in the example source
* row. Create a new row for each non empty attribute name/value pair. See
* import_attribute for the column names.
*
* @MigrateSource(
* id = "attribute_csv"
* )
*/
class Attribute extends CSV {
/**
* {@inheritdoc}
*/
public function initializeIterator() {
$file = parent::initializeIterator();
return $this->getYield($file);
}
/**
* Prepares one row per attribute pair in the source row.
*
* @param \SplFileObject $file
* The source CSV file object.
*
* @codingStandardsIgnoreStart
*
* @return \Generator
* A new row, one for each filename in the source image column.
*
* @codingStandardsIgnoreEnd
*/
public function getYield(\SplFileObject $file) {
foreach ($file as $row_num => $row) {
$new_row = [];
for ($i = 1; $i < 5; $i++) {
$new_row['attribute_name'] = trim($row["attribute_name$i"]);
$new_row['attribute_value'] = trim($row["attribute_value$i"]);
if ((!empty($new_row['attribute_name'])) && (!empty($new_row['attribute_value']))) {
if ($this->rowUnique($new_row)) {
yield($new_row);
}
}
}
}
}
/**
* Tests if the row is unique.
*
* @param array $row
* An array of attribute_name and attribute_value for the current row.
*
* @return bool
* Return TRUE if the row is unique, FALSE if it is not unique.
*/
protected function rowUnique(array $row) {
static $unique_rows = [];
foreach ($unique_rows as $unique) {
if (($unique['attribute_name'] === $row['attribute_name']) && ($unique['attribute_value'] === $row['attribute_value'])) {
return FALSE;
}
}
$unique_rows[] = $row;
return TRUE;
}
}
