You are here

public function D7Webform::postImport in Webform: Migrate 8

Same name and namespace in other branches
  1. 8.2 src/Plugin/migrate/source/d7/D7Webform.php \Drupal\webform_migrate\Plugin\migrate\source\d7\D7Webform::postImport()

Performs post-import tasks.

Parameters

\Drupal\migrate\Event\MigrateImportEvent $event: The post-import event object.

Overrides ImportAwareInterface::postImport

File

src/Plugin/migrate/source/d7/D7Webform.php, line 877

Class

D7Webform
Drupal 7 webform source from database.

Namespace

Drupal\webform_migrate\Plugin\migrate\source\d7

Code

public function postImport(MigrateImportEvent $event) {

  // Add the Webform field to the webform content type
  // if it doesn't already exist.
  $field_storage = FieldStorageConfig::loadByName('node', 'webform');
  $field = FieldConfig::loadByName('node', 'webform', 'webform');
  if (empty($field)) {
    $field = \Drupal::service('entity_type.manager')
      ->getStorage('field_config')
      ->create([
      'field_storage' => $field_storage,
      'bundle' => 'webform',
      'label' => 'Webform',
      'settings' => [],
    ]);
    $field
      ->save();

    // Assign widget settings for the 'default' form mode.
    $display = \Drupal::service('entity_display.repository')
      ->getFormDisplay('node', 'webform', 'default')
      ->getComponent('webform');
    \Drupal::service('entity_display.repository')
      ->getFormDisplay('node', 'webform', 'default')
      ->setComponent('webform', [
      'type' => $display['type'],
    ])
      ->save();

    // Assign display settings for the 'default' and 'teaser' view modes.
    $display = \Drupal::service('entity_display.repository')
      ->getViewDisplay('node', 'webform', 'default')
      ->getComponent('webform');
    \Drupal::service('entity_display.repository')
      ->getViewDisplay('node', 'webform', 'default')
      ->setComponent('webform', [
      'label' => $display['label'],
      'type' => $display['type'],
    ])
      ->save();

    // The teaser view mode is created by the Standard profile and therefore
    // might not exist.
    $view_modes = \Drupal::service('entity_display.repository')
      ->getViewModes('node');
    if (isset($view_modes['teaser'])) {
      $display = \Drupal::service('entity_display.repository')
        ->getViewDisplay('node', 'webform', 'teaser')
        ->getComponent('webform');
      \Drupal::service('entity_display.repository')
        ->getViewDisplay('node', 'webform', 'teaser')
        ->setComponent('webform', [
        'label' => $display['label'],
        'type' => $display['type'],
      ])
        ->save();
    }
  }

  // Attach any Webform created to the relevant webforms if
  // Webform exists and Webform exists and Webform field is empty.
  $webforms = $this
    ->query()
    ->execute();
  foreach ($webforms as $webformInfo) {
    $webform_nid = $webformInfo['nid'];
    $webform_id = 'webform_' . $webform_nid;
    $webform = Webform::load($webform_id);
    if (!empty($webform)) {

      /** @var \Drupal\node\NodeInterface $node */
      $node = Node::load($webform_nid);
      if (!empty($node) && $node
        ->getType() == 'webform') {
        if (empty($node->webform->target_id)) {
          $node->webform->target_id = $webform_id;
          $node->webform->status = $webformInfo['status'] ? 'open' : 'closed';
          $node
            ->save();
        }
      }
    }
  }
}