View source
<?php
namespace Drupal\hierarchical_taxonomy_importer\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Entity\EntityTypeManager;
use Drupal\hierarchical_taxonomy_importer\services\ImporterService;
use Drupal\taxonomy\Entity\Vocabulary;
class TaxonomyImporterForm extends FormBase {
protected $entityTypeManager;
protected $hierarchicalTaxonomyImporter;
public function __construct(EntityTypeManager $entity_type_manager, ImporterService $hierarchical_taxonomy_importer_importer) {
$this->entityTypeManager = $entity_type_manager;
$this->hierarchicalTaxonomyImporter = $hierarchical_taxonomy_importer_importer;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('entity_type.manager'), $container
->get('hierarchical_taxonomy_importer.importer'));
}
public function getFormId() {
return 'taxonomy_importer_form';
}
public function buildForm(array $form, FormStateInterface $form_state) {
$output = [
[
'Honda',
'',
'',
],
[
'',
'Honda',
'',
],
[
'',
'',
'100',
],
[
'',
'',
'200',
],
[
'',
'',
'300',
],
[
'',
'',
'400',
],
[
'',
'',
'500',
],
[
'',
'Londa',
'',
],
[
'',
'',
'600',
],
[
'',
'',
'700',
],
[
'',
'',
'800',
],
[
'',
'',
'900',
],
];
$form['vocabulary'] = [
'#type' => 'select',
'#title' => $this
->t('Vocabularies'),
'#description' => $this
->t('Select a vocabulary to import taxonomies terms from CSV file.'),
'#options' => $this
->getVocabularies(),
'#required' => TRUE,
'#size' => 1,
];
$form['csv_file'] = [
'#type' => 'file',
'#title' => $this
->t('CSV File'),
'#description' => $this
->t('Upload a CSV file with taxonomy information.'),
];
$form['submit'] = [
'#type' => 'submit',
'#value' => $this
->t('Submit'),
];
return $form;
}
public function validateForm(array &$form, FormStateInterface $form_state) {
parent::validateForm($form, $form_state);
$files = $this
->getRequest()->files
->get('files', []);
if (!empty($files['csv_file'])) {
$file_upload = $files['csv_file'];
if ($file_upload
->isValid()) {
$form_state
->setValue('csv_file', $file_upload
->getRealPath());
return;
}
}
$form_state
->setErrorByName('csv_file', $this
->t('The file could not be uploaded.'));
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$csv_file_path = $form_state
->getValue('csv_file');
if (($handle = fopen($csv_file_path, "r")) !== FALSE) {
$vid = $form_state
->getValue('vocabulary');
$output = [];
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$output[] = $data;
}
$result = $this->hierarchicalTaxonomyImporter
->import($vid, $output);
}
drupal_set_message(t('All terms have been imported successfully.'));
}
public function getVocabularies() {
$output = [];
$vocabularies = Vocabulary::loadMultiple();
if (!empty($vocabularies)) {
foreach ($vocabularies as $vocabulary) {
$output[$vocabulary
->id()] = $vocabulary
->get('name');
}
}
return $output;
}
}