From cabde70b2ca0f0905fde02d5e859b2b23e18242d Mon Sep 17 00:00:00 2001 From: Stanislav Kutasevits Date: Fri, 20 Sep 2024 15:45:48 +0300 Subject: [PATCH 01/12] Release 3.16.1 --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e5f9ef..9a80db0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,10 @@ before starting to add changes. Use example [placed in the end of the page](#exa ## [Unreleased] -- [OS-119] Keeping value of CPR clean, not adding address protection text +## [3.16.1] 2024-09-20 + +- [#133]https://github.com/OS2Forms/os2forms/pull/133 +[OS-119] Keeping value of CPR clean, not adding address protection text ## [3.16.0] 2024-08-27 From 64193362cccd7e0e5e1f2ab45a2eb39eb2969749 Mon Sep 17 00:00:00 2001 From: Jesper Kristensen Date: Fri, 23 Aug 2024 12:41:07 +0200 Subject: [PATCH 02/12] 1743: Added os2web audit module --- CHANGELOG.md | 2 ++ composer.json | 1 + 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9003889..52d4b6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ before starting to add changes. Use example [placed in the end of the page](#exa - [OS-119] Keeping value of CPR clean, not adding address protection text - Applied coding standards +- [#192](https://github.com/OS2Forms/os2forms/pull/129) + Added audit logging module from os2web ## [3.16.0-beta1] 2024-08-27 diff --git a/composer.json b/composer.json index b2ccef7..0cd5bb6 100644 --- a/composer.json +++ b/composer.json @@ -69,6 +69,7 @@ "http-interop/http-factory-guzzle": "^1.0.0", "itk-dev/beskedfordeler-drupal": "^1.0", "itk-dev/serviceplatformen": "^1.5", + "os2web/os2web_audit": "^0.0.1", "os2web/os2web_datalookup": "^1.5", "os2web/os2web_nemlogin": "^1.0", "php-http/guzzle7-adapter": "^1.0", From fb92a97b5e8f96bdc7b56dea7a25a88039edbc2b Mon Sep 17 00:00:00 2001 From: Jesper Kristensen Date: Wed, 16 Oct 2024 11:02:13 +0200 Subject: [PATCH 03/12] ITKDev: Updated audit module --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 0cd5bb6..7ee7be7 100644 --- a/composer.json +++ b/composer.json @@ -69,7 +69,7 @@ "http-interop/http-factory-guzzle": "^1.0.0", "itk-dev/beskedfordeler-drupal": "^1.0", "itk-dev/serviceplatformen": "^1.5", - "os2web/os2web_audit": "^0.0.1", + "os2web/os2web_audit": "^0.0.2", "os2web/os2web_datalookup": "^1.5", "os2web/os2web_nemlogin": "^1.0", "php-http/guzzle7-adapter": "^1.0", From 3be3b24d94c3340f5c4fee2742834bce8ca57892 Mon Sep 17 00:00:00 2001 From: Jesper Kristensen Date: Thu, 17 Oct 2024 12:54:19 +0200 Subject: [PATCH 04/12] ITKDev: Updated os2web audit module --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 7ee7be7..76a8260 100644 --- a/composer.json +++ b/composer.json @@ -69,7 +69,7 @@ "http-interop/http-factory-guzzle": "^1.0.0", "itk-dev/beskedfordeler-drupal": "^1.0", "itk-dev/serviceplatformen": "^1.5", - "os2web/os2web_audit": "^0.0.2", + "os2web/os2web_audit": "^0.0.3", "os2web/os2web_datalookup": "^1.5", "os2web/os2web_nemlogin": "^1.0", "php-http/guzzle7-adapter": "^1.0", From 1bcddd6d39267246f3aa67b710b2765826e67331 Mon Sep 17 00:00:00 2001 From: Jesper Kristensen Date: Tue, 20 Feb 2024 15:15:29 +0100 Subject: [PATCH 05/12] Remove webform migrations --- CHANGELOG.md | 1 + composer.json | 1 - os2forms.info.yml | 1 - os2forms.module | 266 ---------------------------------------------- 4 files changed, 1 insertion(+), 268 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52d4b6b..1a8de0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -99,6 +99,7 @@ before starting to add changes. Use example [placed in the end of the page](#exa ## [3.14.1] 2024-01-16 - CprFetchData adding ajax error fix +- Remove dependency on webform migration module ## [3.14.0] 2024-01-14 diff --git a/composer.json b/composer.json index 76a8260..5134e24 100644 --- a/composer.json +++ b/composer.json @@ -58,7 +58,6 @@ "drupal/webform": "^6.1", "drupal/webform_composite": "^1.0@RC", "drupal/webform_encrypt": "^2.0@alpha", - "drupal/webform_migrate": "^2.0@alpha", "drupal/webform_node_element": "^1.2", "drupal/webform_remote_handlers": "^3.0", "drupal/webform_remote_select": "^1.0.6", diff --git a/os2forms.info.yml b/os2forms.info.yml index f28e5d4..d08e8e9 100644 --- a/os2forms.info.yml +++ b/os2forms.info.yml @@ -22,7 +22,6 @@ dependencies: - 'drupal:webform_composite' - 'drupal:webform_entity_print' - 'drupal:webform_entity_print_attachment' - - 'drupal:webform_migrate' - 'drupal:webform_scheduled_email' - 'drupal:webform_submission_export_import' - 'drupal:webform_submission_log' diff --git a/os2forms.module b/os2forms.module index 1357b45..f3e0b9f 100644 --- a/os2forms.module +++ b/os2forms.module @@ -6,9 +6,6 @@ */ use Drupal\Core\Form\FormStateInterface; -use Drupal\migrate\Plugin\MigrateSourceInterface; -use Drupal\migrate\Plugin\MigrationInterface; -use Drupal\migrate\Row; /** * Implements hook_entity_type_build(). @@ -65,269 +62,6 @@ function os2forms_theme() { ]; } -/** - * Implements hook_webform_migrate_d7_webform_element_ELEMENT_TYPE_alter(). - * - * Adjusts migration from Drupal 7. - * - * @See https://www.drupal.org/project/webform_migrate/issues/3155073 - */ -function os2forms_webform_migrate_d7_webform_element_date_popup_alter(&$markup, $indent, array $element) { - $markup .= "$indent '#type': date\n"; - $markup .= "$indent '#datepicker': true\n"; - $markup .= "$indent '#date_date_format': d/m/Y\n"; - - $extra = unserialize($element['extra'], ['allowed_classes' => FALSE]); - $options = [ - 'disabled', - 'readonly', - 'placehoder', - 'description', - ]; - foreach ($options as $option) { - if (!empty($extra[$option])) { - $value = 'true'; - switch ($option) { - case 'description': - case 'placeholder': - $value = "\"" . str_replace(['"', "\n", "\r"], ["'", '\n', ''], $extra[$option]) . "\""; - break; - } - $markup .= "$indent #$option: $value\n"; - } - } -} - -/** - * Implements hook_webform_migrate_d7_webform_element_ELEMENT_TYPE_alter(). - * - * Adjusts migration from Drupal 7. - * - * @See https://www.drupal.org/project/webform_migrate/issues/3155073 - */ -function os2forms_webform_migrate_d7_webform_element_bt_layout_row_alter(&$markup, $indent, array $element) { - $markup .= "$indent '#type': webform_flexbox\n"; - - $extra = unserialize($element['extra'], ['allowed_classes' => FALSE]); - if (!empty($extra['description'])) { - $value = "\"" . str_replace(['"', "\n", "\r"], ["'", '\n', ''], $extra['description']) . "\""; - $markup .= "$indent #description: $value\n"; - } -} - -/** - * Implements hook_webform_migrate_d7_webform_element_ELEMENT_TYPE_alter(). - * - * Adjusts migration from Drupal 7. - * - * @See https://www.drupal.org/project/webform_migrate/issues/3155073 - */ -function os2forms_webform_migrate_d7_webform_element_bt_layout_cols_alter(&$markup, $indent, array $element) { - $markup .= "$indent '#type': container\n"; - $extra = unserialize($element['extra'], ['allowed_classes' => FALSE]); - if (!empty($extra['description'])) { - $value = "\"" . str_replace(['"', "\n", "\r"], ["'", '\n', ''], $extra['description']) . "\""; - $markup .= "$indent #description: $value\n"; - } -} - -/** - * Implements hook_migrate_prepare_row(). - */ -function os2forms_migrate_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) { - _os2forms_migrate_prepare_row_pdf($row, $source, $migration); - _os2forms_migrate_prepare_row_doc($row, $source, $migration); - /** @var \Drupal\webform\WebformThirdPartySettingsManagerInterface $third_party_settings_manager */ - $migrate_to_category = \Drupal::service('webform.third_party_settings_manager')->getThirdPartySetting('os2forms', 'migrate_to_category'); - if (!empty($migrate_to_category)) { - $row->setDestinationProperty('category', $migrate_to_category); - } -} - -/** - * Implements support of PDF attachment migration. - */ -function _os2forms_migrate_prepare_row_pdf(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) { - // Adding migration path for Webform PDF Entity print attachment. - $nid = $row->getSourceProperty('nid'); - $default = $source->getDatabase()->select('webform2pdf', 'w2p') - ->fields('w2p') - ->condition('nid', $nid, '=') - ->execute() - ->fetchAssoc(); - - if (!empty($default['data'])) { - $data = unserialize($default['data'], ['allowed_classes' => FALSE]); - unset($default['data']); - $default = array_merge($default, $data); - } - - if (empty($default['enabled'])) { - return; - } - - $of_default = $source->getDatabase()->select('os2forms_frontend_webform_settings', 'of') - ->fields('of') - ->condition('nid', $nid, '=') - ->condition('submodule', 'os2forms_webform2pdf', '=') - ->execute() - ->fetchAssoc(); - - if (!empty($of_default['data'])) { - $data = unserialize($of_default['data'], ['allowed_classes' => FALSE]); - unset($of_default['data']); - $default = array_merge($of_default, $data); - } - - $markup = "webform_attachment_pdf:\n"; - $markup .= " '#title': 'PDF Attachment'\n"; - $markup .= " '#type': webform_entity_print_attachment:pdf\n"; - $filename = 'webform_submission-[webform:id]-[webform_submission:sid].pdf'; - if ($default['custom_pdf_name']) { - $filename = str_replace( - ['@nid', '@sid'], - ['[webform:id]', '[webform_submission:sid]'], - $data['custom_pdf_name'] - ); - } - $markup .= " '#filename': '$filename'\n"; - $template = _os2forms_migrate_prepare_webform2pdf_get_template($nid, $source); - if ($template) { - $template_arr = explode("\n", $template); - $markup .= " '#view_mode': twig\n"; - $markup .= " '#template': |\n " . implode("\n ", $template_arr) . "\n"; - } - - // Saving new form element. - $elements = $row->getSourceProperty('elements'); - $elements .= $markup; - $row->setSourceProperty('elements', $elements); - $dependencies = $row->getDestinationProperty('dependencies'); - if (empty($dependencies) || !array_search('os2forms', $dependencies)) { - $dependencies['module'][] = 'os2forms'; - $row->setDestinationProperty('dependencies', $dependencies); - } -} - -/** - * Implements support of DOC attachment migration. - */ -function _os2forms_migrate_prepare_row_doc(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) { - // Adding migration path for Webform DOC Entity print attachment. - $nid = $row->getSourceProperty('nid'); - $default = $source->getDatabase()->select('os2forms_frontend_webform_settings', 'of') - ->fields('of') - ->condition('nid', $nid, '=') - ->condition('submodule', 'os2forms_doc', '=') - ->execute() - ->fetchAssoc(); - - if (!empty($default['data'])) { - $data = unserialize($default['data'], ['allowed_classes' => FALSE]); - unset($default['data']); - $default = array_merge($default, $data); - } - - if (empty($default['enabled'])) { - return; - } - - $markup = "webform_attachment_docx:\n"; - $markup .= " '#title': 'PDF Attachment'\n"; - $markup .= " '#type': webform_entity_print_attachment:word_docx\n"; - $markup .= " '#filename': 'webform_submission-[webform:id]-[webform_submission:sid].docx'\n"; - $template = _os2forms_migrate_prepare_webform2pdf_get_template($nid, $source); - if ($template) { - $template_arr = explode("\n", $template); - $markup .= " '#view_mode': twig\n"; - $markup .= " '#template': |\n " . implode("\n ", $template_arr) . "\n"; - } - - // Saving new form element. - $elements = $row->getSourceProperty('elements'); - $elements .= $markup; - $row->setSourceProperty('elements', $elements); - - $dependencies = $row->getDestinationProperty('dependencies'); - if (empty($dependencies) || !array_search('os2forms', $dependencies)) { - $dependencies['module'][] = 'os2forms'; - $row->setDestinationProperty('dependencies', $dependencies); - } -} - -/** - * Preprocesses PDF template for webform. - */ -function _os2forms_migrate_prepare_webform2pdf_get_template($nid, $source) { - $template = &drupal_static(__FUNCTION__ . '_' . $nid, FALSE); - if ($template) { - return $template; - } - $settings = $source->getDatabase()->select('webform2pdf', 'w2p') - ->fields('w2p') - ->condition('nid', $nid, '=') - ->execute() - ->fetchAssoc(); - - if (!empty($settings['data'])) { - $data = unserialize($settings['data'], ['allowed_classes' => FALSE]); - unset($settings['data']); - $settings = array_merge($settings, $data); - } - - if (empty($settings['p_body']['value'])) { - return FALSE; - } - $template = $settings['p_body']['value']; - - // Due to changed form_keys we should replace old form_key to new one. - // Collecting mapping array for form_keys. - $query = $source->getDatabase()->select('webform_component', 'wc'); - $query->fields('wc', [ - 'pid', - 'form_key', - ]); - $components = $query->condition('nid', $nid)->execute(); - $keys = []; - foreach ($components as $component) { - $keys[$component->form_key] = $component->form_key . ($component->pid ? '_' . $component->pid : ''); - } - - // Replacing D7 webform tokens to D8. - $template = str_replace('[submission:', '[webform_submission:', $template); - foreach ($keys as $old_key => $new_key) { - $template = str_replace(':' . $old_key . ']', ':' . $new_key . ']', $template); - $template = str_replace(':' . $old_key . ':', ':' . $new_key . ':', $template); - } - - // Check valid tokens. - preg_match_all('/\[(.*)\]/', $template, $matches); - $tokens = array_unique($matches[0]); - $valid_tokens = array_filter($tokens, function ($token) { - return empty(\Drupal::token()->getInvalidTokensByContext($token, [ - 0 => 'webform', - 1 => 'webform_submission', - 2 => 'webform_handler', - 3 => 'site', - 4 => 'date', - ])); - }); - - // Making tokens available for twig template. - foreach ($valid_tokens as $token) { - $template = str_replace($token, "{{ webform_token('" . $token . "', webform_submission, [], options) }}", $template); - $unset_key = array_search($token, $tokens); - unset($tokens[$unset_key]); - } - - // Removing invalid tokens. - foreach ($tokens as $invalid_token) { - $template = str_replace($invalid_token, '', $template); - } - - return $template; -} - /** * Implements hook_menu_local_tasks_alter(). */ From 2c013afb6e4d27baf667380576537672b3967949 Mon Sep 17 00:00:00 2001 From: jekuaitk Date: Fri, 23 Feb 2024 12:31:21 +0100 Subject: [PATCH 06/12] Remove webforms_migrate dependency from os2forms_forloeb module --- modules/os2forms_forloeb/CHANGELOG.md | 1 + modules/os2forms_forloeb/os2forms_forloeb.info.yml | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/os2forms_forloeb/CHANGELOG.md b/modules/os2forms_forloeb/CHANGELOG.md index 0ab070a..3338d10 100644 --- a/modules/os2forms_forloeb/CHANGELOG.md +++ b/modules/os2forms_forloeb/CHANGELOG.md @@ -9,6 +9,7 @@ before starting to add changes. ## [Unreleased] +- Remove dependency on webform_migrate module - Implemented `hook_maestro_zero_user_notification` and added *Maestro notification* handler for sending notifications via email or digital post. - Cleaned up prefilling of forms in `MaestroWebformInheritTask`. diff --git a/modules/os2forms_forloeb/os2forms_forloeb.info.yml b/modules/os2forms_forloeb/os2forms_forloeb.info.yml index 72d453d..9aee352 100644 --- a/modules/os2forms_forloeb/os2forms_forloeb.info.yml +++ b/modules/os2forms_forloeb/os2forms_forloeb.info.yml @@ -38,7 +38,6 @@ dependencies: - 'drupal:webform_composite' - 'drupal:webform_entity_print' - 'drupal:webform_entity_print_attachment' - - 'drupal:webform_migrate' - 'drupal:webform_node_element' - 'drupal:webform_remote_handlers' - 'drupal:webform_rest' From 7811ae6e8e85f5f9daf493cefab27147ea670069 Mon Sep 17 00:00:00 2001 From: Jesper Kristensen Date: Thu, 17 Oct 2024 13:04:35 +0200 Subject: [PATCH 07/12] ITKDev: Updated change log --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a8de0d..6d04df2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ before starting to add changes. Use example [placed in the end of the page](#exa - Applied coding standards - [#192](https://github.com/OS2Forms/os2forms/pull/129) Added audit logging module from os2web +- Remove dependency on webform migration module ## [3.16.0-beta1] 2024-08-27 @@ -99,7 +100,6 @@ before starting to add changes. Use example [placed in the end of the page](#exa ## [3.14.1] 2024-01-16 - CprFetchData adding ajax error fix -- Remove dependency on webform migration module ## [3.14.0] 2024-01-14 From c3ec528594bb98f4411bb7841929b350e073d1e9 Mon Sep 17 00:00:00 2001 From: jekuaitk Date: Thu, 25 Apr 2024 13:05:30 +0200 Subject: [PATCH 08/12] Removed unused package --- composer.json | 1 - .../patches/tcpdf-doesnt-render-base64.patch | 14 -------------- 2 files changed, 15 deletions(-) delete mode 100644 modules/os2forms_webform_maps/patches/tcpdf-doesnt-render-base64.patch diff --git a/composer.json b/composer.json index 5134e24..1e565f1 100644 --- a/composer.json +++ b/composer.json @@ -74,7 +74,6 @@ "php-http/guzzle7-adapter": "^1.0", "phpoffice/phpword": "^0.18.2", "symfony/options-resolver": "^5.4 || ^6.0", - "tecnickcom/tcpdf": "~6", "webmozart/path-util": "^2.3", "wsdltophp/packagebase": "^5.0", "zaporylie/composer-drupal-optimizations": "^1.2", diff --git a/modules/os2forms_webform_maps/patches/tcpdf-doesnt-render-base64.patch b/modules/os2forms_webform_maps/patches/tcpdf-doesnt-render-base64.patch deleted file mode 100644 index 522c85b..0000000 --- a/modules/os2forms_webform_maps/patches/tcpdf-doesnt-render-base64.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/include/tcpdf_static.php b/include/tcpdf_static.php -index a118d05..c4657fd 100644 ---- a/include/tcpdf_static.php -+++ b/include/tcpdf_static.php -@@ -1906,6 +1906,9 @@ class TCPDF_STATIC { - if (preg_match('|^https?://|', $filename) == 1) { - return self::url_exists($filename); - } -+ if(stripos($filename,'data:')===0) { -+ return true; -+ } - if (strpos($filename, '://')) { - return false; // only support http and https wrappers for security reasons - } From 26c900e6751b58d4f1f30a002882bc81c84642d1 Mon Sep 17 00:00:00 2001 From: jekuaitk Date: Thu, 25 Apr 2024 13:08:25 +0200 Subject: [PATCH 09/12] Updated CHANGELOG --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d04df2..850eccf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ before starting to add changes. Use example [placed in the end of the page](#exa - [#192](https://github.com/OS2Forms/os2forms/pull/129) Added audit logging module from os2web - Remove dependency on webform migration module +- [#100](https://github.com/OS2Forms/os2forms/pull/100) + Removed unused `tecnickcom/tcpdf` package. ## [3.16.0-beta1] 2024-08-27 From 4af2d42594e18c15bc82225687ef9c3bed9b0547 Mon Sep 17 00:00:00 2001 From: Jesper Kristensen Date: Mon, 21 Oct 2024 12:27:02 +0200 Subject: [PATCH 10/12] ITKDev: Updated os2web audit version --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 1e565f1..660852d 100644 --- a/composer.json +++ b/composer.json @@ -68,7 +68,7 @@ "http-interop/http-factory-guzzle": "^1.0.0", "itk-dev/beskedfordeler-drupal": "^1.0", "itk-dev/serviceplatformen": "^1.5", - "os2web/os2web_audit": "^0.0.3", + "os2web/os2web_audit": "^0.1", "os2web/os2web_datalookup": "^1.5", "os2web/os2web_nemlogin": "^1.0", "php-http/guzzle7-adapter": "^1.0", From 5c369014f5cad6fcd42f9f4216c1fa73acb5a507 Mon Sep 17 00:00:00 2001 From: jekuaitk Date: Thu, 31 Oct 2024 12:21:26 +0100 Subject: [PATCH 11/12] Applied coding standards --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d2d72a0..e6c68e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,7 @@ before starting to add changes. Use example [placed in the end of the page](#exa ## [3.16.1] 2024-09-20 -- [#133]https://github.com/OS2Forms/os2forms/pull/133 +- [#133](https://github.com/OS2Forms/os2forms/pull/133) [OS-119] Keeping value of CPR clean, not adding address protection text ## [3.16.0-beta1] 2024-08-27 From 16dd4375d74d063bf02a50739b19bf1287b32a08 Mon Sep 17 00:00:00 2001 From: jekuaitk Date: Thu, 31 Oct 2024 12:29:04 +0100 Subject: [PATCH 12/12] Release 3.16.2 --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6c68e4..26daa49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ before starting to add changes. Use example [placed in the end of the page](#exa ## [Unreleased] +## [3.16.2] 2024-10-31 + - Applied coding standards - [#192](https://github.com/OS2Forms/os2forms/pull/129) Added audit logging module from os2web @@ -290,7 +292,9 @@ before starting to add changes. Use example [placed in the end of the page](#exa - Security in case of vulnerabilities. ``` -[Unreleased]: https://github.com/OS2Forms/os2forms/compare/3.16.0-beta1...HEAD +[Unreleased]: https://github.com/OS2Forms/os2forms/compare/3.16.2...HEAD +[3.16.2]: https://github.com/OS2Forms/os2forms/compare/3.16.1...3.16.2 +[3.16.1]: https://github.com/OS2Forms/os2forms/compare/3.16.0-beta1...3.16.1 [3.16.0-beta1]: https://github.com/OS2Forms/os2forms/compare/3.15.8...3.16.0-beta1 [3.15.8]: https://github.com/OS2Forms/os2forms/compare/3.15.7...3.15.8 [3.15.7]: https://github.com/OS2Forms/os2forms/compare/3.15.6...3.15.7