public function CSVImportForm::importProducts in Commerce Smart Importer 8
Reads part of CSV file and imports it if it is valid.
File
- src/
Form/ CSVImportForm.php, line 337
Class
- CSVImportForm
- Class CSVImportForm enales you upload CSV and import products from it.
Namespace
Drupal\commerce_smart_importer\FormCode
public function importProducts($uri, $fields, ImportingParameters $parameters, $external_folders, $save, &$context) {
$file = fopen($uri, 'r');
if (!array_key_exists('last_stop', $context['results'])) {
$import_name = explode('/', $save);
// Initializing context.
$context['results']['import_name'] = end($import_name);
$context['results']['time'] = 0;
fgetcsv($file);
fgetcsv($file);
$context['results']['current_row'] = 3;
$context['results']['created'] = 0;
if ($parameters->createProduct === FALSE) {
touch($save . '/log.json');
touch($save . '/override_values.json');
file_put_contents($save . '/field_definitions.json', json_encode($fields, JSON_UNESCAPED_UNICODE));
}
}
else {
fseek($file, $context['results']['last_stop']);
}
if ($parameters->createProduct === FALSE) {
$log = file_get_contents($save . '/log.json');
if (!empty($log)) {
$log = json_decode($log, TRUE);
}
else {
$log = [];
}
}
$current_stop = ftell($file);
$first_variation_index = $this
->getFirstVariationIndex($fields);
$products = [];
$product = [];
$config = $this->smartImporterService
->getConfig();
$limit_products = $config['batch_products'];
$override_values = [];
if ($parameters->createProduct === TRUE) {
$override_values = file_get_contents($save . '/override_values.json');
if (empty($override_values)) {
$override_values = [];
}
else {
$override_values = json_decode($override_values, TRUE);
}
}
// Getting data from CSV.
$override_values_formatted = [];
$temp_override_values = [];
while (($line = fgetcsv($file)) !== FALSE) {
if (!empty($line[0])) {
if (empty($product)) {
$product['product'] = array_slice($line, 0, $first_variation_index);
$product['row'] = $context['results']['current_row'];
$product['variations'][] = array_slice($line, $first_variation_index, count($line), TRUE);
$temp_override_values['product'] = $this
->getOverrideValue($override_values, $context['results']['current_row'], 'product');
$temp_override_values['variations'][] = $this
->getOverrideValue($override_values, $context['results']['current_row'], 'variation');
}
else {
$products[] = $product;
$override_values_formatted[] = $temp_override_values;
if (count($products) == $limit_products) {
$product = [];
$temp_override_values = [];
break;
}
$product = [];
$temp_override_values = [];
$product['product'] = array_slice($line, 0, $first_variation_index);
$product['row'] = $context['results']['current_row'];
$product['variations'][] = array_slice($line, $first_variation_index, count($line), TRUE);
$temp_override_values['product'] = $this
->getOverrideValue($override_values, $context['results']['current_row'], 'product');
$temp_override_values['variations'][] = $this
->getOverrideValue($override_values, $context['results']['current_row'], 'variation');
}
}
else {
$product['variations'][] = array_slice($line, $first_variation_index, count($line), TRUE);
$temp_override_values['variations'][] = $this
->getOverrideValue($override_values, $context['results']['current_row'], 'variation');
}
$context['results']['current_row']++;
$current_stop = ftell($file);
}
if (!empty($product)) {
$products[] = $product;
$override_values_formatted[] = $temp_override_values;
}
$context['results']['time']++;
$context['results']['last_stop'] = $current_stop;
fclose($file);
// Handling data.
foreach ($products as $key => $product) {
$temp_log = $this->smartImporterService
->createNewProduct($fields, $product, $parameters, $external_folders, $override_values_formatted[$key]);
if ($temp_log !== TRUE && $parameters->createProduct === FALSE) {
$log[$product['row']] = $temp_log['error_log'];
}
else {
if ($temp_log['created'] && $parameters->createProduct) {
$context['results']['created']++;
}
}
}
// Putting error log.
if ($parameters->createProduct === FALSE) {
file_put_contents($save . '/log.json', json_encode($log, JSON_UNESCAPED_UNICODE));
}
}