1.0 Problem/Motivation
When updating webform_civicrm from 6.2.1 to 6.2.2, all webforms lose their contact subtype settings.
When updating to 6.2.3, the custom fields which are dependent upon that contact subtype are no longer available or selected in the civicrm tab (until the contact subtype setting is restored to its correct value, at which point it's possible to re-enable the custom fields).
2.0 Detailed steps to reproduce (embed screenshots)
- Install a new Drupal 9 system with CiviCRM, webform, webform_ui, and webform_civicrm version 6.2.1
- Create a contact subtype (e.g. "Individual - Client")
- Create a custom fieldset which only applies to that subtype
- Add a custom field to the new fieldset
- Create a webform with CiviCRM processing enabled
- In the CiviCRM tab of the webform, set the "Type of Individual" to "Client"
- Enable the custom fieldset, and choose "Add dynamically" for its custom fields
- Save the form and verify that it works as expected
- Upgrade to webform_civicrm version 6.2.2
- Navigate to the "CiviCRM" tab of the webform
- Observe that the "Type of Individual" is now set to "None", but the custom fieldset is still enabled
- Upgrade to webform_civicrm version 6.2.3
- Observe that the custom fieldset is no longer available. If we set the "Type of Individual" back to Client, it's possible to re-enable the custom fieldset, and it remembers that the custom field is enabled, but it has forgotten the "Add dynamically" setting.
On version 6.2.1, here is a screenshot of the configuration in the CiviCRM tab as described above:
Here is the same screen after upgrading to 6.2.3:
Here is the YAML for the form when it's created under version 6.2.1, though I recreated the form after downgrading from 6.2.3 so I'm not 100% confident that this is what you'd get on a system which had not been upgraded:
uuid: 12f549dd-f0df-4359-952c-af6189c78256
langcode: en
status: open
dependencies:
module:
- webform_civicrm
weight: 0
open: null
close: null
uid: 1
template: false
archive: false
id: test_update_from_6_2_1
title: 'Test Update from 6.2.1'
description: ''
category: ''
elements: |-
civicrm_1_contact_1_cg1_fieldset:
'#type': fieldset
'#title': 'Test Client Fieldset'
'#form_key': civicrm_1_contact_1_cg1_fieldset
civicrm_1_contact_1_cg1_custom_1:
'#type': textfield
'#data_type': String
'#civicrm_condition':
andor: or
action: show
rules:
contact_contact_sub_type:
values:
- Client
'#counter_type': character
'#counter_maximum': 255
'#counter_maximum_message': ' '
'#form_key': civicrm_1_contact_1_cg1_custom_1
'#extra':
width: 20
'#parent': civicrm_1_contact_1_cg1_fieldset
'#title': 'Test Custom Field'
civicrm_1_contact_1_fieldset_fieldset:
'#type': fieldset
'#title': 'Contact 1'
'#form_key': civicrm_1_contact_1_fieldset_fieldset
civicrm_1_contact_1_contact_existing:
'#type': civicrm_contact
'#search_prompt': '- Choose existing -'
'#widget': hidden
'#form_key': civicrm_1_contact_1_contact_existing
'#allow_create': 1
'#none_prompt': '+ Create new +'
'#default': user
'#contact_type': individual
'#parent': civicrm_1_contact_1_fieldset_fieldset
'#extra': { }
'#title': 'Existing Contact'
civicrm_1_contact_1_contact_first_name:
'#type': textfield
'#counter_type': character
'#counter_maximum': 64
'#counter_maximum_message': ' '
'#contact_type': individual
'#form_key': civicrm_1_contact_1_contact_first_name
'#extra':
width: 20
'#parent': civicrm_1_contact_1_fieldset_fieldset
'#title': 'First Name'
civicrm_1_contact_1_contact_last_name:
'#type': textfield
'#counter_type': character
'#counter_maximum': 64
'#counter_maximum_message': ' '
'#contact_type': individual
'#form_key': civicrm_1_contact_1_contact_last_name
'#extra':
width: 20
'#parent': civicrm_1_contact_1_fieldset_fieldset
'#title': 'Last Name'
css: ''
javascript: ''
settings:
ajax: false
ajax_scroll_top: form
ajax_progress_type: ''
ajax_effect: ''
ajax_speed: null
page: true
page_submit_path: ''
page_confirm_path: ''
page_theme_name: ''
form_title: both
form_submit_once: false
form_open_message: ''
form_close_message: ''
form_exception_message: ''
form_previous_submissions: true
form_confidential: false
form_confidential_message: ''
form_disable_remote_addr: false
form_convert_anonymous: false
form_prepopulate: false
form_prepopulate_source_entity: false
form_prepopulate_source_entity_required: false
form_prepopulate_source_entity_type: ''
form_unsaved: false
form_disable_back: false
form_submit_back: false
form_disable_autocomplete: false
form_novalidate: false
form_disable_inline_errors: false
form_required: false
form_autofocus: false
form_details_toggle: false
form_reset: false
form_access_denied: default
form_access_denied_title: ''
form_access_denied_message: ''
form_access_denied_attributes: { }
form_file_limit: ''
form_attributes: { }
form_method: ''
form_action: ''
share: false
share_node: false
share_theme_name: ''
share_title: true
share_page_body_attributes: { }
submission_label: ''
submission_exception_message: ''
submission_locked_message: ''
submission_log: false
submission_excluded_elements: { }
submission_exclude_empty: false
submission_exclude_empty_checkbox: false
submission_views: { }
submission_views_replace: { }
submission_user_columns: { }
submission_user_duplicate: false
submission_access_denied: default
submission_access_denied_title: ''
submission_access_denied_message: ''
submission_access_denied_attributes: { }
previous_submission_message: ''
previous_submissions_message: ''
autofill: false
autofill_message: ''
autofill_excluded_elements: { }
wizard_progress_bar: true
wizard_progress_pages: false
wizard_progress_percentage: false
wizard_progress_link: false
wizard_progress_states: false
wizard_start_label: ''
wizard_preview_link: false
wizard_confirmation: true
wizard_confirmation_label: ''
wizard_auto_forward: true
wizard_auto_forward_hide_next_button: false
wizard_keyboard: true
wizard_track: ''
wizard_prev_button_label: ''
wizard_next_button_label: ''
wizard_toggle: false
wizard_toggle_show_label: ''
wizard_toggle_hide_label: ''
wizard_page_type: container
wizard_page_title_tag: h2
preview: 0
preview_label: ''
preview_title: ''
preview_message: ''
preview_attributes: { }
preview_excluded_elements: { }
preview_exclude_empty: true
preview_exclude_empty_checkbox: false
draft: none
draft_multiple: false
draft_auto_save: false
draft_saved_message: ''
draft_loaded_message: ''
draft_pending_single_message: ''
draft_pending_multiple_message: ''
confirmation_type: page
confirmation_url: ''
confirmation_title: ''
confirmation_message: ''
confirmation_attributes: { }
confirmation_back: true
confirmation_back_label: ''
confirmation_back_attributes: { }
confirmation_exclude_query: false
confirmation_exclude_token: false
confirmation_update: false
limit_total: null
limit_total_interval: null
limit_total_message: ''
limit_total_unique: false
limit_user: null
limit_user_interval: null
limit_user_message: ''
limit_user_unique: false
entity_limit_total: null
entity_limit_total_interval: null
entity_limit_user: null
entity_limit_user_interval: null
purge: none
purge_days: null
results_disabled: false
results_disabled_ignore: false
results_customize: false
token_view: false
token_update: false
token_delete: false
serial_disabled: false
access:
create:
roles:
- anonymous
- authenticated
users: { }
permissions: { }
view_any:
roles: { }
users: { }
permissions: { }
update_any:
roles: { }
users: { }
permissions: { }
delete_any:
roles: { }
users: { }
permissions: { }
purge_any:
roles: { }
users: { }
permissions: { }
view_own:
roles: { }
users: { }
permissions: { }
update_own:
roles: { }
users: { }
permissions: { }
delete_own:
roles: { }
users: { }
permissions: { }
administer:
roles: { }
users: { }
permissions: { }
test:
roles: { }
users: { }
permissions: { }
configuration:
roles: { }
users: { }
permissions: { }
handlers:
webform_civicrm:
id: webform_civicrm
handler_id: webform_civicrm
label: CiviCRM
notes: ''
status: true
conditions: { }
weight: null
settings:
nid: 1
number_of_contacts: '1'
1_contact_type: individual
1_webform_label: 'Contact 1'
civicrm_1_contact_1_contact_contact_sub_type:
client: client
contact_1_number_of_cg1: '1'
contact_1_settings_dynamic_custom_cg1: 1
civicrm_1_contact_1_cg1_custom_1: create_civicrm_webform_element
civicrm_1_contact_1_contact_existing: create_civicrm_webform_element
civicrm_1_contact_1_contact_prefix_id: 0
civicrm_1_contact_1_contact_first_name: create_civicrm_webform_element
civicrm_1_contact_1_contact_middle_name: 0
civicrm_1_contact_1_contact_last_name: create_civicrm_webform_element
civicrm_1_contact_1_contact_suffix_id: 0
civicrm_1_contact_1_contact_nick_name: 0
civicrm_1_contact_1_contact_gender_id: 0
civicrm_1_contact_1_contact_job_title: 0
civicrm_1_contact_1_contact_birth_date: 0
civicrm_1_contact_1_contact_preferred_communication_method: 0
civicrm_1_contact_1_contact_privacy: 0
civicrm_1_contact_1_contact_preferred_language: 0
civicrm_1_contact_1_contact_contact_id: 0
civicrm_1_contact_1_contact_user_id: 0
civicrm_1_contact_1_contact_external_identifier: 0
civicrm_1_contact_1_contact_source: 0
civicrm_1_contact_1_contact_cs: 0
civicrm_1_contact_1_contact_employer_id: 0
civicrm_1_contact_1_contact_is_deceased: 0
civicrm_1_contact_1_contact_deceased_date: 0
contact_1_settings_matching_rule: Unsupervised
contact_1_number_of_other: '0'
contact_1_number_of_address: '0'
contact_1_number_of_phone: '0'
contact_1_number_of_email: '0'
contact_1_number_of_website: '0'
contact_1_number_of_im: '0'
contact_1_number_of_cg2: '0'
prefix_known: ''
prefix_unknown: ''
toggle_message: 0
message: ''
activity_number_of_activity: '0'
participant_reg_type: '0'
reg_options:
event_type:
any: any
show_past_events: now
show_future_events: '1'
show_public_events: all
title_display: title
show_full_events: 1
event_sort_field: start_date
show_remaining: '0'
validate: 1
block_form: 0
disable_unregister: 0
allow_url_load: 0
membership_1_number_of_membership: '0'
civicrm_1_contribution_1_contribution_enable_contribution: '0'
checksum_text: ''
create_fieldsets: 1
confirm_subscription: 1
block_unknown_users: 0
create_new_relationship: 0
disable_contact_paging: 0
new_contact_source: 'Test Update from 6.2.1'
data:
contact:
1:
contact:
1:
contact_type: individual
contact_sub_type:
client: client
webform_label: 'Contact 1'
number_of_cg1: '1'
dynamic_custom_cg1: 1
matching_rule: Unsupervised
number_of_other: '0'
number_of_address: '0'
number_of_phone: '0'
number_of_email: '0'
number_of_website: '0'
number_of_im: '0'
number_of_cg2: '0'
activity:
number_of_activity: '0'
membership:
1:
number_of_membership: '0'
participant_reg_type: '0'
reg_options:
event_type:
any: any
show_past_events: now
show_future_events: '1'
show_public_events: all
title_display: title
show_full_events: 1
event_sort_field: start_date
show_remaining: '0'
validate: 1
block_form: 0
disable_unregister: 0
allow_url_load: 0
variants: { }
Here is the YAML from an almost identical form after upgrading to 6.2.3 and then manually fixing the contact subtype settings:
uuid: 932f59c8-7f7e-43d7-8d73-b12f9387be15
langcode: en
status: open
dependencies:
module:
- webform_civicrm
weight: 0
open: null
close: null
uid: 1
template: false
archive: false
id: test_update_from_6_2_1
title: 'Test Update from 6.2.1'
description: ''
category: ''
elements: |-
civicrm_1_contact_1_cg1_fieldset:
'#type': fieldset
'#title': 'Test Client Fieldset'
'#form_key': civicrm_1_contact_1_cg1_fieldset
civicrm_1_contact_1_cg1_custom_1:
'#type': textfield
'#data_type': String
'#civicrm_condition':
andor: or
action: show
rules:
contact_contact_sub_type:
values:
- Client
'#counter_type': character
'#counter_maximum': 255
'#counter_maximum_message': ' '
'#form_key': civicrm_1_contact_1_cg1_custom_1
'#extra':
width: 20
'#parent': civicrm_1_contact_1_cg1_fieldset
'#title': 'Test Custom Field'
civicrm_1_contact_1_fieldset_fieldset:
'#type': fieldset
'#title': 'Contact 1'
'#form_key': civicrm_1_contact_1_fieldset_fieldset
civicrm_1_contact_1_contact_existing:
'#type': civicrm_contact
'#search_prompt': '- Choose existing -'
'#widget': hidden
'#form_key': civicrm_1_contact_1_contact_existing
'#allow_create': 1
'#none_prompt': '+ Create new +'
'#default': user
'#contact_type': individual
'#parent': civicrm_1_contact_1_fieldset_fieldset
'#extra': { }
'#title': 'Existing Contact'
civicrm_1_contact_1_contact_first_name:
'#type': textfield
'#counter_type': character
'#counter_maximum': 64
'#counter_maximum_message': ' '
'#contact_type': individual
'#form_key': civicrm_1_contact_1_contact_first_name
'#extra':
width: 20
'#parent': civicrm_1_contact_1_fieldset_fieldset
'#title': 'First Name'
civicrm_1_contact_1_contact_last_name:
'#type': textfield
'#counter_type': character
'#counter_maximum': 64
'#counter_maximum_message': ' '
'#contact_type': individual
'#form_key': civicrm_1_contact_1_contact_last_name
'#extra':
width: 20
'#parent': civicrm_1_contact_1_fieldset_fieldset
'#title': 'Last Name'
civicrm_1_contact_1_cg2_fieldset:
'#type': fieldset
'#title': 'Test Custom Fieldset'
'#form_key': civicrm_1_contact_1_cg2_fieldset
civicrm_1_contact_1_cg2_custom_2:
'#type': civicrm_options
'#data_type': String
'#extra':
aslist: 1
items: |-
1|Red
2|Green
'#form_key': civicrm_1_contact_1_cg2_custom_2
'#options':
1: Red
2: Green
'#parent': civicrm_1_contact_1_cg2_fieldset
'#title': 'Test no default'
'#civicrm_live_options': 1
civicrm_1_contact_1_cg2_custom_3:
'#type': civicrm_options
'#value': '1'
'#data_type': String
'#extra':
aslist: 1
items: |-
1|Red
2|Green
'#form_key': civicrm_1_contact_1_cg2_custom_3
'#options':
1: Red
2: Green
'#parent': civicrm_1_contact_1_cg2_fieldset
'#title': 'Test with default'
'#civicrm_live_options': 1
css: ''
javascript: ''
settings:
ajax: false
ajax_scroll_top: form
ajax_progress_type: ''
ajax_effect: ''
ajax_speed: null
page: true
page_submit_path: ''
page_confirm_path: ''
page_theme_name: ''
form_title: both
form_submit_once: false
form_open_message: ''
form_close_message: ''
form_exception_message: ''
form_previous_submissions: true
form_confidential: false
form_confidential_message: ''
form_disable_remote_addr: false
form_convert_anonymous: false
form_prepopulate: false
form_prepopulate_source_entity: false
form_prepopulate_source_entity_required: false
form_prepopulate_source_entity_type: ''
form_unsaved: false
form_disable_back: false
form_submit_back: false
form_disable_autocomplete: false
form_novalidate: false
form_disable_inline_errors: false
form_required: false
form_autofocus: false
form_details_toggle: false
form_reset: false
form_access_denied: default
form_access_denied_title: ''
form_access_denied_message: ''
form_access_denied_attributes: { }
form_file_limit: ''
form_attributes: { }
form_method: ''
form_action: ''
share: false
share_node: false
share_theme_name: ''
share_title: true
share_page_body_attributes: { }
submission_label: ''
submission_exception_message: ''
submission_locked_message: ''
submission_log: false
submission_excluded_elements: { }
submission_exclude_empty: false
submission_exclude_empty_checkbox: false
submission_views: { }
submission_views_replace: { }
submission_user_columns: { }
submission_user_duplicate: false
submission_access_denied: default
submission_access_denied_title: ''
submission_access_denied_message: ''
submission_access_denied_attributes: { }
previous_submission_message: ''
previous_submissions_message: ''
autofill: false
autofill_message: ''
autofill_excluded_elements: { }
wizard_progress_bar: true
wizard_progress_pages: false
wizard_progress_percentage: false
wizard_progress_link: false
wizard_progress_states: false
wizard_start_label: ''
wizard_preview_link: false
wizard_confirmation: true
wizard_confirmation_label: ''
wizard_auto_forward: true
wizard_auto_forward_hide_next_button: false
wizard_keyboard: true
wizard_track: ''
wizard_prev_button_label: ''
wizard_next_button_label: ''
wizard_toggle: false
wizard_toggle_show_label: ''
wizard_toggle_hide_label: ''
wizard_page_type: container
wizard_page_title_tag: h2
preview: 0
preview_label: ''
preview_title: ''
preview_message: ''
preview_attributes: { }
preview_excluded_elements: { }
preview_exclude_empty: true
preview_exclude_empty_checkbox: false
draft: none
draft_multiple: false
draft_auto_save: false
draft_saved_message: ''
draft_loaded_message: ''
draft_pending_single_message: ''
draft_pending_multiple_message: ''
confirmation_type: page
confirmation_url: ''
confirmation_title: ''
confirmation_message: ''
confirmation_attributes: { }
confirmation_back: true
confirmation_back_label: ''
confirmation_back_attributes: { }
confirmation_exclude_query: false
confirmation_exclude_token: false
confirmation_update: false
limit_total: null
limit_total_interval: null
limit_total_message: ''
limit_total_unique: false
limit_user: null
limit_user_interval: null
limit_user_message: ''
limit_user_unique: false
entity_limit_total: null
entity_limit_total_interval: null
entity_limit_user: null
entity_limit_user_interval: null
purge: none
purge_days: null
results_disabled: false
results_disabled_ignore: false
results_customize: false
token_view: false
token_update: false
token_delete: false
serial_disabled: false
access:
create:
roles:
- anonymous
- authenticated
users: { }
permissions: { }
view_any:
roles: { }
users: { }
permissions: { }
update_any:
roles: { }
users: { }
permissions: { }
delete_any:
roles: { }
users: { }
permissions: { }
purge_any:
roles: { }
users: { }
permissions: { }
view_own:
roles: { }
users: { }
permissions: { }
update_own:
roles: { }
users: { }
permissions: { }
delete_own:
roles: { }
users: { }
permissions: { }
administer:
roles: { }
users: { }
permissions: { }
test:
roles: { }
users: { }
permissions: { }
configuration:
roles: { }
users: { }
permissions: { }
handlers:
webform_civicrm:
id: webform_civicrm
handler_id: webform_civicrm
label: CiviCRM
notes: ''
status: true
conditions: { }
weight: null
settings:
nid: 1
number_of_contacts: '1'
1_contact_type: individual
1_webform_label: 'Contact 1'
civicrm_1_contact_1_contact_contact_sub_type:
Client: Client
contact_1_number_of_cg1: '1'
contact_1_settings_dynamic_custom_cg1: 1
civicrm_1_contact_1_cg1_custom_1: create_civicrm_webform_element
civicrm_1_contact_1_contact_existing: create_civicrm_webform_element
civicrm_1_contact_1_contact_prefix_id: 0
civicrm_1_contact_1_contact_first_name: create_civicrm_webform_element
civicrm_1_contact_1_contact_middle_name: 0
civicrm_1_contact_1_contact_last_name: create_civicrm_webform_element
civicrm_1_contact_1_contact_suffix_id: 0
civicrm_1_contact_1_contact_nick_name: 0
civicrm_1_contact_1_contact_gender_id: 0
civicrm_1_contact_1_contact_job_title: 0
civicrm_1_contact_1_contact_birth_date: 0
civicrm_1_contact_1_contact_preferred_communication_method: 0
civicrm_1_contact_1_contact_privacy: 0
civicrm_1_contact_1_contact_preferred_language: 0
civicrm_1_contact_1_contact_communication_style_id: 0
civicrm_1_contact_1_contact_contact_id: 0
civicrm_1_contact_1_contact_user_id: 0
civicrm_1_contact_1_contact_external_identifier: 0
civicrm_1_contact_1_contact_source: 0
civicrm_1_contact_1_contact_cs: 0
civicrm_1_contact_1_contact_employer_id: 0
civicrm_1_contact_1_contact_is_deceased: 0
civicrm_1_contact_1_contact_deceased_date: 0
contact_1_settings_matching_rule: Unsupervised
contact_1_number_of_other: '0'
contact_1_number_of_address: '0'
contact_1_number_of_phone: '0'
contact_1_number_of_email: '0'
contact_1_number_of_website: '0'
contact_1_number_of_im: '0'
contact_1_number_of_cg2: '1'
contact_1_settings_dynamic_custom_cg2: 0
civicrm_1_contact_1_cg2_custom_2: create_civicrm_webform_element
civicrm_1_contact_1_cg2_custom_3: create_civicrm_webform_element
prefix_known: ''
prefix_unknown: ''
toggle_message: 0
message: ''
activity_number_of_activity: '0'
participant_reg_type: '0'
reg_options:
event_type:
any: any
show_past_events: now
show_future_events: '1'
show_public_events: all
title_display: title
show_full_events: 1
event_sort_field: start_date
show_remaining: '0'
validate: 1
block_form: 0
disable_unregister: 0
allow_url_load: 0
membership_1_number_of_membership: '0'
civicrm_1_contribution_1_contribution_enable_contribution: '0'
checksum_text: ''
create_fieldsets: 1
confirm_subscription: 1
block_unknown_users: 0
create_new_relationship: 0
disable_contact_paging: 0
new_contact_source: 'Test Update from 6.2.1'
data:
contact:
1:
contact:
1:
contact_type: individual
contact_sub_type:
Client: Client
webform_label: 'Contact 1'
number_of_cg1: '1'
dynamic_custom_cg1: 1
matching_rule: Unsupervised
number_of_other: '0'
number_of_address: '0'
number_of_phone: '0'
number_of_email: '0'
number_of_website: '0'
number_of_im: '0'
number_of_cg2: '1'
dynamic_custom_cg2: 0
activity:
number_of_activity: '0'
membership:
1:
number_of_membership: '0'
participant_reg_type: '0'
reg_options:
event_type:
any: any
show_past_events: now
show_future_events: '1'
show_public_events: all
title_display: title
show_full_events: 1
event_sort_field: start_date
show_remaining: '0'
validate: 1
block_form: 0
disable_unregister: 0
allow_url_load: 0
variants: { }
I haven't figured out the cause. It's possible to correct each form manually after the upgrade, but it's potentially a lot of work if there are many forms with many custom fields.