function create_taxonomy in Taxonomy Import 2.x
Same name and namespace in other branches
- 8 src/Form/ImportForm.php \Drupal\taxonomy_import\Form\create_taxonomy()
Function to implement import taxonomy functionality.
1 call to create_taxonomy()
- ImportForm::submitForm in src/
Form/ ImportForm.php - Form submission handler.
File
- src/
Form/ ImportForm.php, line 78
Namespace
Drupal\taxonomy_import\FormCode
function create_taxonomy($voc_name) {
global $base_url;
// TODO: Drupal Rector Notice: Please delete the following
// comment after you've made any necessary changes.
// You will need to use
// `\Drupal\core\Database\Database::getConnection()`
// if you do not yet have access to the container here.
$loc = \Drupal::database()
->query('SELECT file_managed.uri FROM {file_managed} ORDER BY file_managed.fid DESC limit 1', []);
foreach ($loc as $val) {
// Get location of the file.
$location = $val->uri;
}
$name = $voc_name;
if (function_exists('mime_content_type')) {
$mimetype = mime_content_type($location);
}
else {
return 'application/octet-stream';
}
// Converting to machine name.
$machine_readable = strtolower($voc_name);
// Vocabulary machine name.
$vid = preg_replace('@[^a-z0-9_]+@', '_', $machine_readable);
// Creating new vocabulary with the field value.
$vocabularies = Vocabulary::loadMultiple();
if (!isset($vocabularies[$vid])) {
$vocabulary = Vocabulary::create([
'vid' => $vid,
'machine_name' => $vid,
'name' => $name,
]);
$vocabulary
->save();
}
// Code for fetch and save csv file.
if ($mimetype == "text/plain") {
if (($handle = fopen($location, "r")) !== FALSE) {
// Read all data including title.
$data1 = fgetcsv($handle);
while (($data = fgetcsv($handle)) !== FALSE) {
$termid = 0;
$term_id = 0;
// Get tid of term with same name
// TODO: Drupal Rector Notice:
// Please delete the following comment after
// you've made any necessary changes.
// You will need to use
// `\Drupal\core\Database\Database::getConnection()`
// if you do not yet have access to the container here.
$termid = \Drupal::database()
->query('SELECT n.tid FROM {taxonomy_term_field_data} n WHERE n.name = :uid AND n.vid = :vid', [
':uid' => $data[0],
':vid' => $vid,
]);
foreach ($termid as $val) {
// Get tid.
$term_id = $val->tid;
}
// Finding parent of new item.
$parent = 0;
if (!empty($data[1])) {
// TODO: Drupal Rector Notice: Please delete the
// following comment after you've made any necessary changes.
// You will need to use
// `\Drupal\core\Database\Database::getConnection()`
// if you do not yet have access to the container here.
$parent_id = \Drupal::database()
->query('SELECT n.tid FROM {taxonomy_term_field_data} n WHERE n.name = :uid AND n.vid = :vid', [
':uid' => $data[1],
':vid' => $vid,
]);
foreach ($parent_id as $val) {
if (!empty($val)) {
// Get tid.
$parent = $val->tid;
}
else {
$parent = 0;
}
}
}
$target_term = null;
// Check whether term already exists or not.
if (empty($term_id)) {
// Create new term.
$term = Term::create([
'parent' => [
$parent,
],
'name' => $data[0],
'description' => $data[2],
'vid' => $vid,
])
->save();
if ($term == 1) {
$termid = \Drupal::database()
->query('SELECT n.tid FROM {taxonomy_term_field_data} n WHERE n.name = :uid AND n.vid = :vid', array(
':uid' => $data[0],
':vid' => $vid,
));
foreach ($termid as $val) {
$term_id = $val->tid;
// get tid
$term = \Drupal::entityTypeManager()
->getStorage('taxonomy_term')
->load($term_id);
$target_term = $term;
break;
}
}
}
else {
$term = \Drupal::entityTypeManager()
->getStorage('taxonomy_term')
->load($term_id);
$term->parent
->setValue($parent);
$term
->Save();
$target_term = $term;
}
if (count($data1) > 2 && !is_null($target_term)) {
$i = 2;
$update = false;
while ($i < count($data1)) {
if (isset($data[$i]) && !empty($data1[$i])) {
$target_term
->set($data1[$i], $data[$i]);
$update = true;
}
$i++;
}
if ($update) {
$target_term
->save();
}
}
}
fclose($handle);
// Redirecting to taxonomy term overview page.
$url = $base_url . "/admin/structure/taxonomy/manage/" . $vid . "/overview";
header('Location:' . $url);
exit;
}
else {
\Drupal::messenger()
->addStatus('File contains no data');
}
}
elseif ($mimetype == "text/xml" || $mimetype == "application/xml") {
if (file_exists($location)) {
$feed = file_get_contents($location);
$items = simplexml_load_string($feed);
if (!empty($items)) {
$item = $items
->children();
foreach ($item as $child) {
$records = $child;
$array = (array) $records;
$j = 0;
foreach ($array as $val) {
if ($j == 0) {
$terms = $val;
}
if ($j == 1) {
$parents = $val;
}
if ($j == 2) {
$description = $val;
}
$j++;
if ($j >= 3) {
break;
}
}
$parent = 0;
$term_id = 0;
// Checks if parent tag exists.
if (isset($parents) && !empty($parents)) {
$data = $parents;
// TODO: Drupal Rector Notice: Please delete the
// following comment after you've made any necessary changes.
// You will need to use
// `\Drupal\core\Database\Database::getConnection()`
// if you do not yet have access to the container here.
$parent_id = \Drupal::database()
->query('SELECT n.tid FROM {taxonomy_term_field_data} n WHERE n.name = :uid AND n.vid = :vid', [
':uid' => $data,
':vid' => $vid,
]);
foreach ($parent_id as $val) {
if (!empty($val)) {
// Get tid.
$parent = $val->tid;
}
else {
$parent = 0;
}
}
}
// TODO: Drupal Rector Notice: Please delete the
// following comment after you've made any necessary changes.
// You will need to use
// `\Drupal\core\Database\Database::getConnection()`
// if you do not yet have access to the container here.
$termid = \Drupal::database()
->query('SELECT n.tid FROM {taxonomy_term_field_data} n WHERE n.name = :uid AND n.vid = :vid', [
':uid' => $terms,
':vid' => $vid,
]);
foreach ($termid as $val) {
// Get tid.
$term_id = $val->tid;
}
// Check whether term already exists or not.
if (empty($term_id)) {
// Create new term.
$term = Term::create([
'parent' => [
$parent,
],
'name' => $terms,
'description' => $description,
'vid' => $vid,
])
->save();
}
else {
$term = \Drupal::entityTypeManager()
->getStorage('taxonomy_term')
->load($term_id);
$term->parent
->setValue($parent);
$term
->Save();
}
}
// Redirecting to taxonomy term overview page.
$url = $base_url . "/admin/structure/taxonomy/manage/" . $vid . "/overview";
header('Location:' . $url);
exit;
}
else {
\Drupal::messenger()
->addStatus('File contains no data');
}
}
}
elseif ($mimetype == "application/octet-stream") {
\Drupal::messenger()
->addStatus('File contains no data');
}
else {
\Drupal::messenger()
->addStatus('Failed to open the file');
}
}