public function OrganigramsImportItemsForm::submitForm in Organigrams 8.2
Form submission handler.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Overrides FormInterface::submitForm
File
- src/
Form/ OrganigramsImportItemsForm.php, line 142
Class
- OrganigramsImportItemsForm
- Provides the settings form for this module.
Namespace
Drupal\organigrams\FormCode
public function submitForm(array &$form, FormStateInterface $form_state) {
// Get the decoded organigram items.
$organigram_items = json_decode($form_state
->getValue('organigrams_items_json'));
// Get the vocabulary.
$vocabulary = $form_state
->get([
'taxonomy',
'vocabulary',
]);
// Get all terms in this vocabulary.
$existing_tids = \Drupal::entityQuery('taxonomy_term')
->condition('vid', $vocabulary
->id())
->execute();
if (!empty($existing_tids)) {
// Load the entities.
$entities = $this->storageController
->loadMultiple($existing_tids);
// Delete them.
$this->storageController
->delete($entities);
}
// Create a mapping array for the term ID's.
$iid_mapping = [];
// Iterate through the organigram items.
foreach ($organigram_items as $item) {
// Create a new term array.
$term_array = [
'name' => $item->name,
'vid' => $vocabulary
->id(),
'parent' => $item->parent,
'weight' => $item->weight,
];
// Convert the old parent to the new parent if possible.
if (isset($iid_mapping[$item->parent])) {
$term_array['parent'] = $iid_mapping[$item->parent];
}
// Ignore these fields.
$ignore_keys = [
'iid',
'oid',
'rdf_mapping',
'organigrams_machine_name',
'depth',
];
// Iterate through the item fields.
foreach ($item as $key => $value) {
if (in_array($key, $ignore_keys)) {
continue;
}
// Change the value of the position to s if it's l or r.
if ($key == 'position' && in_array($value, [
'l',
'r',
])) {
$value = 's';
}
// Add the field to the term array.
$term_array['field_o_' . $key] = $value;
}
// Create the term.
$term = Term::create($term_array);
// Save the term.
$term
->save();
// Create mapping for the new term ID to be used as parent.
$iid_mapping[$item->iid] = $term
->id();
}
// Create an overview link.
$organigram_link = Link::fromTextAndUrl($this
->t('overview'), Url::fromUserInput('/admin/structure/taxonomy/manage/' . $vocabulary
->id() . '/overview'));
// Show message.
$this
->messenger()
->addMessage($this
->t('Organigram items imported. Go to @overview.', [
'@overview' => $organigram_link
->toString(),
]));
}