Skip to content
This repository has been archived by the owner on Sep 30, 2024. It is now read-only.

[SD-148] configure captcha in Tide webform #111

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
langcode: en
status: true
dependencies:
config:
- field.field.taxonomy_term.captcha_widgets.field_captcha_type
- field.field.taxonomy_term.captcha_widgets.field_site_key
- taxonomy.vocabulary.captcha_widgets
module:
- path
- text
id: taxonomy_term.captcha_widgets.default
targetEntityType: taxonomy_term
bundle: captcha_widgets
mode: default
content:
description:
type: text_textarea
weight: 4
region: content
settings:
rows: 5
placeholder: ''
third_party_settings: { }
field_captcha_type:
type: options_select
weight: 1
region: content
settings: { }
third_party_settings: { }
field_site_key:
type: string_textfield
weight: 3
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
name:
type: string_textfield
weight: 0
region: content
settings:
size: 60
placeholder: ''
third_party_settings: { }
path:
type: path
weight: 5
region: content
settings: { }
third_party_settings: { }
simple_sitemap:
weight: 10
region: content
settings: { }
third_party_settings: { }
status:
type: boolean_checkbox
weight: 6
region: content
settings:
display_label: true
third_party_settings: { }
hidden: { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
langcode: en
status: true
dependencies:
config:
- field.field.taxonomy_term.captcha_widgets.field_captcha_type
- field.field.taxonomy_term.captcha_widgets.field_site_key
- taxonomy.vocabulary.captcha_widgets
module:
- options
- text
id: taxonomy_term.captcha_widgets.default
targetEntityType: taxonomy_term
bundle: captcha_widgets
mode: default
content:
description:
type: text_default
label: hidden
settings: { }
third_party_settings: { }
weight: 0
region: content
field_captcha_type:
type: list_default
label: above
settings: { }
third_party_settings: { }
weight: 2
region: content
field_site_key:
type: string
label: above
settings:
link_to_entity: false
third_party_settings: { }
weight: 1
region: content
hidden:
search_api_excerpt: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
langcode: en
status: true
dependencies:
config:
- field.storage.taxonomy_term.field_captcha_type
- taxonomy.vocabulary.captcha_widgets
module:
- options
id: taxonomy_term.captcha_widgets.field_captcha_type
field_name: field_captcha_type
entity_type: taxonomy_term
bundle: captcha_widgets
label: 'Captcha type'
description: ''
required: true
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: list_string
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
langcode: en
status: true
dependencies:
config:
- field.storage.taxonomy_term.field_site_key
- taxonomy.vocabulary.captcha_widgets
id: taxonomy_term.captcha_widgets.field_site_key
field_name: field_site_key
entity_type: taxonomy_term
bundle: captcha_widgets
label: 'Site key'
description: ''
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: string
29 changes: 29 additions & 0 deletions config/optional/field.storage.taxonomy_term.field_captcha_type.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
langcode: en
status: true
dependencies:
module:
- options
- taxonomy
id: taxonomy_term.field_captcha_type
field_name: field_captcha_type
entity_type: taxonomy_term
type: list_string
settings:
allowed_values:
-
value: google_recaptcha_v3
label: 'Google reCAPTCHA v3'
-
value: google_recaptcha_v2
label: 'Google reCAPTCHA v2'
-
value: cloudfare_turnstile
label: 'Cloudfare Turnstile'
allowed_values_function: ''
module: options
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: false
custom_storage: false
20 changes: 20 additions & 0 deletions config/optional/field.storage.taxonomy_term.field_site_key.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
langcode: en
status: true
dependencies:
module:
- taxonomy
id: taxonomy_term.field_site_key
field_name: field_site_key
entity_type: taxonomy_term
type: string
settings:
max_length: 255
case_sensitive: false
is_ascii: false
module: core
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: false
custom_storage: false
7 changes: 7 additions & 0 deletions config/optional/taxonomy.vocabulary.captcha_widgets.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
langcode: en
status: true
dependencies: { }
name: 'CAPTCHA widgets'
vid: captcha_widgets
description: ''
weight: 0
23 changes: 23 additions & 0 deletions tests/behat/features/webform.feature
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,26 @@ Feature: Webform "Content Rating" exists.
And save screenshot

And I see the text "Was this page helpful"

@api @nosuggest @javascript
Scenario: Webform "Tide webform CAPTCHA" exists.
Given I am logged in as a user with the "administrator" role
And captcha_widgets terms:
| name | parent | tid | field_captcha_type | field_site_key |
| Test Site 1 | 0 | 10001 | google_recaptcha_v3 | abcd |
When I visit "admin/structure/webform/manage/contact/settings"
And I click on the detail "Third party settings"
Then I see the text "Tide webform CAPTCHA"
Then I see the text "Enable captcha"
Then I see the text "Captcha type"
Then I select "Google reCAPTCHA v3" from "Captcha type"
And I wait for AJAX to finish
Then I select "Test Site 1" from "Site key"
Then I fill in "Score threshold (reCAPTCHA v3)?" with "0.1"
Then I check "Enable captcha"
And I press "Save"
Then I visit "admin/structure/webform/manage/contact/export"
And I see the text "captcha_type: google_recaptcha_v3"
And I see the text "score_threshold: 0.1"
And I see the text "site_key: abcd"
And save screenshot
27 changes: 27 additions & 0 deletions tide_webform.install
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,30 @@ function tide_webform_update_10001() {
$config->set('element.excluded_elements', $excluded_elements_value);
$config->save();
}

/**
* Import configs for Captcha feature.
*/
function tide_webform_update_10002() {
$configs = [
'taxonomy.vocabulary.captcha_widgets' => 'taxonomy_vocabulary',
'field.storage.taxonomy_term.field_site_key' => 'field_storage_config',
'field.storage.taxonomy_term.field_captcha_type' => 'field_storage_config',
'field.field.taxonomy_term.captcha_widgets.field_site_key' => 'field_config',
'field.field.taxonomy_term.captcha_widgets.field_captcha_type' => 'field_config',
'core.entity_view_display.taxonomy_term.captcha_widgets.default' => 'entity_view_display',
'core.entity_form_display.taxonomy_term.captcha_widgets.default' => 'entity_form_display',
];

\Drupal::moduleHandler()->loadInclude('tide_core', 'inc', 'includes/helpers');
$config_location = [\Drupal::service('extension.list.module')->getPath('tide_webform') . '/config/optional'];
foreach ($configs as $config_name => $type) {
$config_read = _tide_read_config($config_name, $config_location, TRUE);
$storage = \Drupal::entityTypeManager()->getStorage($type);
$id = $storage->getIDFromConfigName($config_name, $storage->getEntityType()->getConfigPrefix());
if ($storage->load($id) == NULL) {
$config_entity = $storage->createFromStorageRecord($config_read);
$config_entity->save();
}
}
}
Loading
Loading