Migrate Drupal Webform 6 or 7 in to Webforms in Drupal 8

Webform 8.x-5.x is a completely new code base, that takes a different, but familiar approach to solving the challenges of building rich, flexible, and maintainable client facing forms for a Drupal website. Webform 8-x-5.x includes many new features and leverages improvements in Drupal 8, including OO design patterns, extendable plugins, and automated tests.

The primary use case for this module is to:

  • Build a new webform or duplicate an existing template
  • Publish the webform as a page, node, or block
  • Collect submissions
  • Send confirmations and notifications
  • Review submissions online
  • Download submissions as a CSV

So how do we get all the Drupal 6 or 7 webforms in to Drupal 8 is what we are going to details here. I did a little bit of research but I couldn't find any solution so I came up with this module Webform migrate to help with those kind of data migrations.

Webforms in D8 are configuration entities and submissions are content entities, Webforms OOP architecture clearly described each component in a very details oriented way so the migration set up was very easy.

So to get started please download the module here from GitHub and install it.

Then use the configuration import and use the migration templates available in the module and import them. If you set up the Migrate Plus module at the same time you install the Webform migrate module then during the migration it will look for those templates too. Either way get the configurations imported.

Once the configs are imported then you can run the migration to import Webform data, simple as that.

Sample configurations are below for Drupal 7 to Drupal 8 migration.

id: upgrade_d7_webform
label: 'Webform'
migration_tags:
  - 'Drupal 7'
migration_group: migrate_drupal_7
source:
  plugin: d7_webform
process:
  id: webform_id
  uid: node_uid
  title: title
  status: status
  elements: elements
  handlers: handlers
  access: access
  'settings/page':
    plugin: default_value
    default_value: 1
  'settings/page_submit_path': {}
  'settings/page_confirm_path': {}
  'settings/form_submit_label': submit_text
  'settings/form_exception_message': {}
  'settings/form_closed_message': {}
  'settings/form_confidential': {}
  'settings/form_confidential_message': {}
  'settings/form_prepopulate': {}
  'settings/form_prepopulate_source_entity': {}
  'settings/form_novalidate': {}
  'settings/form_autofocus': {}
  'settings/form_details_toggle': {}
  'settings/wizard_progress_bar':
    plugin: default_value
    default_value: 1
  'settings/wizard_progress_pages': {}
  'settings/wizard_progress_percentage': {}
  'settings/wizard_next_button_label': {}
  'settings/wizard_prev_button_label': {}
  'settings/wizard_start_label': {}
  'settings/wizard_complete':
    plugin: default_value
    default_value: 1
  'settings/wizard_complete_label': {}
  'settings/preview':
    plugin: default_value
    default_value: 0
  'settings/preview_next_button_label': {}
  'settings/preview_prev_button_label': {}
  'settings/preview_message': {}
  'settings/draft': allow_draft
  'settings/draft_auto_save': auto_save
  'settings/draft_button_label': {}
  'settings/draft_saved_message': {}
  'settings/draft_loaded_message': {}
  'settings/confirmation_type': confirmation_type
  'settings/confirmation_url': redirect_url
  'settings/confirmation_message': confirmation
  'settings/limit_total': total_submit_limit
  'settings/limit_total_message': {}
  'settings/limit_user': submit_limit
  'settings/limit_user_message': {}
  'settings/entity_limit_total': {}
  'settings/entity_limit_user': {}
  'settings/results_disabled': {}
  'settings/token_update': {}
destination:
  plugin: 'entity:webform'
migration_dependencies:
  required:
    - upgrade_d7_user_role
    - upgrade_d7_node_webform

Same for the submission data, you could use the migrate template available within the module and import using the configuration import.

id: upgrade_d7_webform_submission
label: 'Webform Form Submission'
migration_tags:
  - 'Drupal 7'
migration_group: migrate_drupal_7
source:
  plugin: d7_webform_submission
process:
  sid: sid
  webform_id: webform_id
  uri: Webform_uri
  created: submitted
  completed: submitted
  changed: submitted
  in_draft: is_draft
  current_page: {}
  remote_addr: remote_addr
  uid: uid
  langcode:
    plugin: default_value
    default_value: 'en'    
  entity_type:
    plugin: default_value
    default_value: 'node'    
  entity_id: nid
  sticky: {}
  notes: {}
  serial: {}
  data: webform_data
destination:
  plugin: 'entity:webform_submission'
migration_dependencies:
  required:
    - upgrade_d7_webform 

Download the module here.

Note : You can use Migrate Tools for Drush commands and Migrate Plus for some additional source and other plugins.