Created
May 29, 2024 17:50
-
-
Save chumkui/467d794bb28dd7b7ea9f74f8e176ff16 to your computer and use it in GitHub Desktop.
CiviCRM form with handler to reproduce the Contact Filter bug
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| uuid: b3d0c64f-05ef-4550-9556-0876ec4fa323 | |
| langcode: en | |
| status: open | |
| dependencies: | |
| module: | |
| - webform_civicrm | |
| - webform_image_handler | |
| weight: 0 | |
| open: null | |
| close: null | |
| uid: 1 | |
| template: false | |
| archive: false | |
| id: reproduce_webform_civicrm_bug | |
| title: 'Reproduce Webform-CiviCRM bug' | |
| description: '' | |
| categories: { } | |
| elements: |- | |
| civicrm_1_contact_1_contact_existing: | |
| '#type': civicrm_contact | |
| '#title': 'Existing Contact' | |
| '#widget': hidden | |
| '#none_prompt': '+ Create new +' | |
| '#show_hidden_contact': 1 | |
| '#results_display': | |
| display_name: display_name | |
| '#default': user | |
| '#group': | |
| '': '' | |
| '#allow_create': 1 | |
| '#contact_type': individual | |
| '#form_key': civicrm_1_contact_1_contact_existing | |
| '#parent': civicrm_1_contact_1_fieldset_fieldset | |
| '#extra': { } | |
| 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: -50 | |
| settings: | |
| disable: 'Leave Fields and Save Settings' | |
| nid: 1 | |
| number_of_contacts: '1' | |
| 1_contact_type: individual | |
| 1_webform_label: 'Contact 1' | |
| civicrm_1_contact_1_contact_contact_sub_type: | |
| '': '' | |
| 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: 0 | |
| civicrm_1_contact_1_contact_middle_name: 0 | |
| civicrm_1_contact_1_contact_last_name: 0 | |
| 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_image_url: 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_cg20: '0' | |
| contact_1_number_of_cg18: '0' | |
| contact_1_number_of_cg29: '0' | |
| contact_1_number_of_cg56: '0' | |
| 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_cg39: '0' | |
| contact_1_number_of_cg23: '0' | |
| contact_1_number_of_cg22: '0' | |
| contact_1_number_of_cg13: '0' | |
| contact_1_number_of_cg19: '0' | |
| prefix_known: '' | |
| prefix_unknown: '' | |
| toggle_message: 0 | |
| message: '' | |
| activity_number_of_activity: '0' | |
| case_number_of_case: '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 | |
| disable_primary_participant: 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: 'Reproduce Webform-CiviCRM bug' | |
| data: | |
| contact: | |
| 1: | |
| contact: | |
| 1: | |
| contact_type: individual | |
| contact_sub_type: { } | |
| webform_label: 'Contact 1' | |
| matching_rule: Unsupervised | |
| number_of_cg20: '0' | |
| number_of_cg18: '0' | |
| number_of_cg29: '0' | |
| number_of_cg56: '0' | |
| 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_cg39: '0' | |
| number_of_cg23: '0' | |
| number_of_cg22: '0' | |
| number_of_cg13: '0' | |
| number_of_cg19: '0' | |
| activity: | |
| number_of_activity: '0' | |
| case: | |
| number_of_case: '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 | |
| disable_primary_participant: 0 | |
| image_handler: | |
| id: webform_image_handler | |
| handler_id: image_handler | |
| label: 'Image handler' | |
| notes: '' | |
| status: true | |
| conditions: { } | |
| weight: -49 | |
| settings: { } | |
| variants: { } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Webform Image Handler | |
| type: module | |
| description: A module containing a custom webform handler to process images | |
| core_version_requirement: ^10 | |
| package: CT Custom | |
| dependencies: | |
| - 'webform:webform' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /** | |
| * @file | |
| * Provides an example of a webform handler. | |
| */ | |
| /** | |
| * Implements hook_theme(). | |
| */ | |
| function webform_image_handler_theme() { | |
| return [ | |
| 'webform_image_handler_summary' => [ | |
| 'variables' => ['settings' => NULL, 'handler' => []], | |
| ], | |
| ]; | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| namespace Drupal\webform_image_handler\Plugin\WebformHandler; | |
| use Drupal\Core\Form\FormStateInterface; | |
| use Drupal\webform\Plugin\WebformHandlerBase; | |
| use Drupal\webform\WebformSubmissionInterface; | |
| /** | |
| * Form submission handler. | |
| * | |
| * @WebformHandler( | |
| * id = "webform_image_handler", | |
| * label = @Translation("Image handler"), | |
| * category = @Translation("Custom"), | |
| * description = @Translation("Handles images in webforms."), | |
| * cardinality = \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_SINGLE, | |
| * results = \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_PROCESSED, | |
| * ) | |
| */ | |
| class WebformImageHandler extends WebformHandlerBase | |
| { | |
| /** | |
| * Display the invoked plugin method to end user. | |
| * | |
| * @param string $method_name | |
| * The invoked method name. | |
| * @param string $context1 | |
| * Additional parameter passed to the invoked method name. | |
| */ | |
| protected function debug($method_name, $context1 = NULL) | |
| { | |
| if (!empty($this->configuration['debug'])) { | |
| $t_args = [ | |
| '@id' => $this->getHandlerId(), | |
| '@class_name' => get_class($this), | |
| '@method_name' => $method_name, | |
| '@context1' => $context1, | |
| ]; | |
| $this->messenger()->addWarning($this->t('Invoked @id: @class_name:@method_name @context1', $t_args), TRUE); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function validateForm(array &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) | |
| { | |
| $this->debug(__FUNCTION__); | |
| //Only run the validation on a form Update as this is after the teacher has received it | |
| if (!$webform_submission->isNew()) { | |
| // Run validation only on form update | |
| $this->validateAuthorised($form_state); | |
| } | |
| if ($webform_submission->isNew()) { | |
| // Run validation only on form creation | |
| $this->validateUpload($form_state); | |
| } | |
| } | |
| /** | |
| * Check to see if there are any images uploaded. If there are no images and authorised is not set to 'Yes' | |
| * display a message to the user advising them that there has to be images present. If there are images present | |
| * and authorised is not set to 'Yes' display a message to the user advising them that they must authorise the form | |
| * | |
| * @param \Drupal\Core\Form\FormStateInterface $form_state | |
| * The form state. | |
| */ | |
| protected function validateAuthorised(FormStateInterface $form_state) | |
| { | |
| $values = $form_state->getValues(); | |
| $images = $values['my_photo']; | |
| $authorised = $values['civicrm_1_activity_1_cg55_custom_530']; | |
| if (!empty($images) && $authorised !== '1') { | |
| $form_state->setErrorByName('civicrm_1_activity_1_cg55_custom_530', $this->t("You must set authorise to 'Yes' if you are submitting one or more pictures.")); | |
| } | |
| if (empty($images) && $authorised !== '0') { | |
| $form_state->setErrorByName('civicrm_1_activity_1_cg55_custom_530', $this->t("You must set authorise to 'No' if you are not uploading any images.")); | |
| } | |
| } | |
| /** | |
| * Check to see if there are any images uploaded. There has to be at least one image uploaded when submitting the form for the first time. | |
| * | |
| * @param \Drupal\Core\Form\FormStateInterface $form_state | |
| * The form state. | |
| */ | |
| protected function validateUpload(FormStateInterface $form_state) | |
| { | |
| $values = $form_state->getValues(); | |
| $images = $values['my_photo']; | |
| if (empty($images)) { | |
| $form_state->setErrorByName('my_photo', $this->t("You must attach at least one image for approval!")); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment