You are here

public function OrganigramsImportD7Form::submitForm in Organigrams 8.2

Same name and namespace in other branches
  1. 8 src/Form/OrganigramsImportD7Form.php \Drupal\organigrams\Form\OrganigramsImportD7Form::submitForm()

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/OrganigramsImportD7Form.php, line 97

Class

OrganigramsImportD7Form
Provides the settings form for this module.

Namespace

Drupal\organigrams\Form

Code

public function submitForm(array &$form, FormStateInterface $form_state) {
  $organigram = json_decode($form_state
    ->getValue('organigrams_d7_json'));
  $vocabulary = Vocabulary::create([
    'vid' => $organigram->organigram->machine_name,
    'description' => $organigram->organigram->description,
    'name' => $organigram->organigram->name,
  ]);

  // Add a third party setting to indicate this vocabulary is an organigram.
  $vocabulary
    ->setThirdPartySetting('organigrams', 'is_organigram', TRUE);
  $vocabulary
    ->save();
  organigrams_create_term_fields($vocabulary
    ->id());
  if (!empty($organigram->items)) {

    // Create a mapping array for the term ID's.
    $iid_mapping = [];

    // Iterate through the organigram items.
    foreach ($organigram->items as $item) {
      $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_keys = [
        'iid',
        'oid',
        'rdf_mapping',
        'organigrams_machine_name',
        'depth',
      ];
      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';
        }
        $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();
    }
  }
  $organigram_link = Link::fromTextAndUrl($organigram->organigram->name, Url::fromUserInput('/admin/structure/taxonomy/manage/' . $organigram->organigram->machine_name . '/overview'));

  // Show message.
  $this
    ->messenger()
    ->addMessage($this
    ->t('Organigram "@name" imported.', [
    '@name' => $organigram_link
      ->toString(),
  ]));
}