public static function TaxonomyManagerHelper::massAddTerms in Taxonomy Manager 8
Same name and namespace in other branches
- 2.0.x src/TaxonomyManagerHelper.php \Drupal\taxonomy_manager\TaxonomyManagerHelper::massAddTerms()
Helper function for mass adding of terms.
Parameters
string $input: The textual input with terms. Each line contains a single term. Child term can be prefixed with a dash '-' (one dash for each level). Term names starting with a dash and should not become a child term need to be wrapped in quotes.
int $vid: The vocabulary id.
int $parents: An array of parent term ids for the new inserted terms. Can be 0.
array $term_names_too_long: Return value that is used to indicate that some term names were too long and truncated to 255 characters.
Return value
array An array of the newly inserted term objects
1 call to TaxonomyManagerHelper::massAddTerms()
- AddTermsToVocabularyForm::submitForm in src/
Form/ AddTermsToVocabularyForm.php - Form submission handler.
File
- src/
TaxonomyManagerHelper.php, line 46
Class
- TaxonomyManagerHelper
- Class for taxonomy manager helper.
Namespace
Drupal\taxonomy_managerCode
public static function massAddTerms($input, $vid, $parents, array &$term_names_too_long = []) {
$new_terms = [];
$terms = explode("\n", str_replace("\r", '', $input));
$parents = !empty($parents) ? $parents : 0;
// Stores the current lineage of newly inserted terms.
$last_parents = [];
foreach ($terms as $name) {
if (empty($name)) {
continue;
}
$matches = [];
// Child term prefixed with one or more dashes.
if (preg_match('/^(-){1,}/', $name, $matches)) {
$depth = strlen($matches[0]);
$name = substr($name, $depth);
$current_parents = isset($last_parents[$depth - 1]) ? [
$last_parents[$depth - 1]
->id(),
] : 0;
}
elseif (preg_match('/^\\"(-){1,}.*\\"/', $name, $matches)) {
$name = substr($name, 1, -1);
$depth = 0;
$current_parents = $parents;
}
else {
$depth = 0;
$current_parents = $parents;
}
// Truncate long string names that will cause database exceptions.
if (strlen($name) > 255) {
$term_names_too_long[] = $name;
$name = substr($name, 0, 255);
}
$filter_formats = filter_formats();
$format = array_pop($filter_formats);
$values = [
'name' => $name,
// @todo do we need to set a format?
'format' => $format
->id(),
'vid' => $vid,
// @todo default language per vocabulary setting?
'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
];
if (!empty($current_parents)) {
foreach ($current_parents as $p) {
$values['parent'][] = [
'target_id' => $p,
];
}
}
$term = \Drupal::entityTypeManager()
->getStorage('taxonomy_term')
->create($values);
$term
->save();
$new_terms[] = $term;
$last_parents[$depth] = $term;
}
return $new_terms;
}