commerce_export-8.x-1.0-alpha1/src/Form/SourceFiles.php
src/Form/SourceFiles.php
<?php namespace Drupal\commerce_export\Form; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\file\Entity\File; /** * Upload source CSV files to start commerce product imports. */ class SourceFiles extends FormBase { /** * {@inheritdoc} */ public function getFormId() { return 'commerce_export_source_files'; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $upload_location = 'public://import'; $form[] = [ '#type' => 'item', '#title' => t('Here you can upload your product information in CSV format.'), '#description' => t('Refer to the example_csv directory for CSV file format. If your project requires changes to the CSV columns, then corresponding changes to the migration files will be necessary.'), ]; $form['product_csv'] = [ '#type' => 'managed_file', '#title' => t('Products'), '#upload_location' => $upload_location, '#multiple' => FALSE, '#description' => t('All products and product variations with taxonomy, attribute values, and image filenames.'), '#upload_validators' => [ 'file_validate_extensions' => ['csv'], ], // To make this a required field uncomment the following line, remove the // trailing period and adjust formatting. // '#required' => TRUE. ]; $form['submit'] = [ '#value' => t('Upload'), '#type' => 'submit', ]; return $form; } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $files = $form_state->getValues(); $products = $files['product_csv']; // Upload product CSV. if (isset($products[0])) { $product_filename = 'product_details.csv'; $fid = $products[0]; $this->createPermanentSourceFile($fid, $product_filename); } drupal_set_message(t('Files uploaded successfully. Recommend to use drush to start the import.'), 'status'); // Redirect to migration page. $form_state->setRedirect('entity.migration.list', [ 'migration_group' => 'commerce_export', ]); } /** * Make temp source files permanent with filename as per migration yaml. * * @param int $fid * File entity ID. * @param string $filename * File name. */ protected function createPermanentSourceFile($fid, $filename) { $csv = File::load($fid); $old_uri = $csv->getFileUri(); $path = pathinfo($old_uri); $new_uri = $path['dirname'] . '/' . $filename; if ($old_uri != $new_uri) { $csv->setFilename($filename); $csv->setFileUri($new_uri); file_unmanaged_copy($old_uri, $new_uri, FILE_EXISTS_REPLACE); $csv->setPermanent(); $csv->save(); $file_usage = \Drupal::service('file.usage'); $file_usage->add($csv, 'commerce_export', 'file', $fid); } } }