diff --git a/config/schema/webform_encrypt.schema.yml b/config/schema/webform_encrypt.schema.yml index beb0fc2..ac6a70c 100644 --- a/config/schema/webform_encrypt.schema.yml +++ b/config/schema/webform_encrypt.schema.yml @@ -1,5 +1,5 @@ -webform_encrypt.settings: - type: config_object +webform.settings.third_party.webform_encrypt: + type: mapping label: 'Webform encrypt configuration' mapping: element: @@ -10,15 +10,11 @@ webform_encrypt.settings: type: sequence label: 'Element settings' sequence: - type: sequence - label: 'Webform ID' - sequence: - type: mapping - mapping: - encrypt: - type: string - label: 'Encrypt enabled' - encrypt_profile: - type: string - label: 'Encrypt profile' - + type: mapping + mapping: + encrypt: + type: string + label: 'Encrypt enabled' + encrypt_profile: + type: string + label: 'Encrypt profile' diff --git a/src/Element/WebformElementEncrypt.php b/src/Element/WebformElementEncrypt.php index 9c9712b..5836511 100644 --- a/src/Element/WebformElementEncrypt.php +++ b/src/Element/WebformElementEncrypt.php @@ -38,8 +38,8 @@ class WebformElementEncrypt extends FormElement { * Processes element attributes. */ public static function processWebformElementEncrypt(&$element, FormStateInterface $form_state, &$complete_form) { - $webform_id = $form_state->getFormObject()->getWebform()->id(); - $config = \Drupal::service('config.factory')->get('webform_encrypt.settings')->get("element.settings.$webform_id"); + $webform = $config = $form_state->getFormObject()->getWebform(); + $config = $webform->getThirdPartySetting('webform_encrypt', 'element')['settings']; $values = $form_state->getValues(); $field_name = $values['key']; @@ -60,7 +60,7 @@ class WebformElementEncrypt extends FormElement { '#default_value' => isset($config[$field_name]['encrypt_profile']) ? $config[$field_name]['encrypt_profile'] : NULL, '#states' => [ 'visible' => [ - [':input[name="properties[encrypt]"]' => ['checked' => TRUE]], + [':input[name="encrypt"]' => ['checked' => TRUE]], ] ] ]; @@ -80,17 +80,28 @@ class WebformElementEncrypt extends FormElement { * Validates element attributes. */ public static function validateWebformElementEncrypt(&$element, FormStateInterface $form_state, &$complete_form) { - $webform_id = $form_state->getFormObject()->getWebform()->id(); - $config = \Drupal::service('config.factory')->getEditable('webform_encrypt.settings')->get("element.settings.$webform_id"); + $webform = $config = $form_state->getFormObject()->getWebform(); + $config = $webform->getThirdPartySetting('webform_encrypt', 'element'); + $values = $form_state->getValues(); $field_name = $values['key']; - $config[$field_name] = array( - 'encrypt' => $values['encrypt'], - 'encrypt_profile' => $values['encrypt_profile'], - ); + if (empty($values['encrypt'])) { + unset($config['settings'][$field_name]); + } + else { + $config['settings'][$field_name] = array( + 'encrypt' => $values['encrypt'], + 'encrypt_profile' => $values['encrypt_profile'], + ); + } - \Drupal::service('config.factory')->getEditable('webform_encrypt.settings')->set("element.settings.$webform_id", $config)->save(); + if (empty($config['settings'])) { + $webform->unsetThirdPartySetting('webform_encrypt', 'element'); + } + else { + $webform->setThirdPartySetting('webform_encrypt', 'element', $config); + } } } diff --git a/src/WebformEncryptSubmissionStorage.php b/src/WebformEncryptSubmissionStorage.php index fe0473b..ced5608 100644 --- a/src/WebformEncryptSubmissionStorage.php +++ b/src/WebformEncryptSubmissionStorage.php @@ -50,9 +50,8 @@ class WebformEncryptSubmissionStorage extends WebformSubmissionStorage { * An array containing the Webform Submission decrypted data. */ protected function getDecryptedData(WebformSubmission $webform_submission, $check_permissions = TRUE) { - $webform_id = $webform_submission->getWebform()->id(); - $config = \Drupal::service('config.factory')->get('webform_encrypt.settings')->get("element.settings.$webform_id"); $webform = $webform_submission->getWebform(); + $config = $webform->getThirdPartySetting('webform_encrypt', 'element')['settings']; $elements = $webform->getElementsInitializedFlattenedAndHasValue(); $data = $webform_submission->getData(); diff --git a/tests/modules/webform_encrypt_test/config/install/webform.encrypt.yml b/tests/modules/webform_encrypt_test/config/install/webform.encrypt.yml deleted file mode 100644 index 148bf38..0000000 --- a/tests/modules/webform_encrypt_test/config/install/webform.encrypt.yml +++ /dev/null @@ -1,11 +0,0 @@ -element: - settings: - test_text_field: - encrypt: '1' - encrypt_profile: test_encryption_profile - test_text_area: - encrypt: '1' - encrypt_profile: test_encryption_profile - test_not_encrypted: - encrypt: '' - encrypt_profile: test_encryption_profile diff --git a/tests/modules/webform_encrypt_test/config/install/webform.webform.test_encryption.yml b/tests/modules/webform_encrypt_test/config/install/webform.webform.test_encryption.yml index fe69e79..7a4aedc 100644 --- a/tests/modules/webform_encrypt_test/config/install/webform.webform.test_encryption.yml +++ b/tests/modules/webform_encrypt_test/config/install/webform.webform.test_encryption.yml @@ -1,6 +1,21 @@ langcode: en status: open -dependencies: { } +dependencies: + module: + - webform_encrypt +third_party_settings: + webform_encrypt: + element: + settings: + test_text_field: + encrypt: '1' + encrypt_profile: test_encryption_profile + test_text_area: + encrypt: '1' + encrypt_profile: test_encryption_profile + test_not_encrypted: + encrypt: '1' + encrypt_profile: test_encryption_profile open: null close: null uid: 1 diff --git a/webform_encrypt.install b/webform_encrypt.install index 38d8354..21bd351 100644 --- a/webform_encrypt.install +++ b/webform_encrypt.install @@ -6,6 +6,9 @@ * module. */ +use Drupal\encrypt\Entity\EncryptionProfile; +use Drupal\webform\Entity\Webform; + /** * Implementation of hook_uninstall(). */ @@ -15,11 +18,12 @@ function webform_encrypt_uninstall() { ->fields('wsd', array()) ->execute() ->fetchAll(); - $config = \Drupal::service('config.factory')->get('webform_encrypt.settings')->get("element.settings"); foreach ($submissions as $submission) { - if (isset($config[$submission->webform_id][$submission->name]['encrypt']) && $config[$submission->webform_id][$submission->name]['encrypt']) { - $encryption_profile = \Drupal\encrypt\Entity\EncryptionProfile::load($config[$submission->webform_id][$submission->name]['encrypt_profile']); + $webform = Webform::load($submission->webform_id); + $config = $webform->getThirdPartySetting('webform_encrypt', 'element'); + if (!empty($config['settings'][$submission->name])) { + $encryption_profile = EncryptionProfile::load($config['settings'][$submission->name]['encrypt_profile']); $value = Drupal::service('encryption')->decrypt($submission->value, $encryption_profile); \Drupal::database()->update('webform_submission_data') ->fields(array('value' => $value)) @@ -27,6 +31,4 @@ function webform_encrypt_uninstall() { ->execute(); } } - - \Drupal::configFactory()->getEditable('webform_encrypt.settings')->delete(); } diff --git a/webform_encrypt.module b/webform_encrypt.module index 307efd8..27a3eed 100644 --- a/webform_encrypt.module +++ b/webform_encrypt.module @@ -44,8 +44,7 @@ function webform_encrypt_form_webform_ui_element_form_alter(&$form, FormStateInt */ function webform_encrypt_entity_presave(EntityInterface $entity) { if ($entity instanceof WebformSubmission) { - $webform_id = $entity->getWebform()->id(); - $config = \Drupal::service('config.factory')->get('webform_encrypt.settings')->get("element.settings.$webform_id"); + $config = $entity->getWebform()->getThirdPartySetting('webform_encrypt', 'element')['settings']; $data_original = $entity->getData(); $encryption = Drupal::service('encryption');