From 6f181823877fa525db9444fdcce8ed29cd6dee33 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Tue, 22 Aug 2023 13:32:43 +0200 Subject: [PATCH 1/4] FORSLAG-77: Added allow email field on proposal --- CHANGELOG.md | 2 ++ ..._display.node.citizen_proposal.default.yml | 18 +++++++++++---- ....citizen_proposal.citizen_proposal_add.yml | 2 ++ ...zen_proposal.citizen_proposal_approval.yml | 2 ++ ..._display.node.citizen_proposal.default.yml | 1 + ...lay.node.citizen_proposal.list_display.yml | 2 ++ ...w_display.node.citizen_proposal.teaser.yml | 2 ++ ...izen_proposal.field_author_allow_email.yml | 23 +++++++++++++++++++ ....storage.node.field_author_allow_email.yml | 18 +++++++++++++++ 9 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 config/sync/field.field.node.citizen_proposal.field_author_allow_email.yml create mode 100644 config/sync/field.storage.node.field_author_allow_email.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ac0df06..b85e9109 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +* [PR-353](https://github.com/itk-dev/hoeringsportal/pull/353) + Added “Allow email” checkboxes * [PR-351](https://github.com/itk-dev/hoeringsportal/pull/351) Added and used citizen proposal text format * [PR-350](https://github.com/itk-dev/hoeringsportal/pull/350) diff --git a/config/sync/core.entity_form_display.node.citizen_proposal.default.yml b/config/sync/core.entity_form_display.node.citizen_proposal.default.yml index a086dd48..b23e4b8c 100644 --- a/config/sync/core.entity_form_display.node.citizen_proposal.default.yml +++ b/config/sync/core.entity_form_display.node.citizen_proposal.default.yml @@ -3,6 +3,7 @@ langcode: da status: true dependencies: config: + - field.field.node.citizen_proposal.field_author_allow_email - field.field.node.citizen_proposal.field_author_email - field.field.node.citizen_proposal.field_author_email_display - field.field.node.citizen_proposal.field_author_name @@ -42,6 +43,13 @@ targetEntityType: node bundle: citizen_proposal mode: default content: + field_author_allow_email: + type: boolean_checkbox + weight: 4 + region: content + settings: + display_label: true + third_party_settings: { } field_author_email: type: email_default weight: 2 @@ -83,7 +91,7 @@ content: third_party_settings: { } field_more_info: type: text_textarea - weight: 7 + weight: 8 region: content settings: rows: 5 @@ -94,7 +102,7 @@ content: hide_guidelines: '1' field_proposal: type: text_textarea - weight: 5 + weight: 6 region: content settings: rows: 5 @@ -105,7 +113,7 @@ content: hide_guidelines: '1' field_remarks: type: text_textarea - weight: 6 + weight: 7 region: content settings: rows: 5 @@ -116,14 +124,14 @@ content: hide_guidelines: '1' status: type: boolean_checkbox - weight: 8 + weight: 9 region: content settings: display_label: true third_party_settings: { } title: type: string_textfield - weight: 4 + weight: 5 region: content settings: size: 60 diff --git a/config/sync/core.entity_view_display.node.citizen_proposal.citizen_proposal_add.yml b/config/sync/core.entity_view_display.node.citizen_proposal.citizen_proposal_add.yml index ed1c1f7a..4926e446 100644 --- a/config/sync/core.entity_view_display.node.citizen_proposal.citizen_proposal_add.yml +++ b/config/sync/core.entity_view_display.node.citizen_proposal.citizen_proposal_add.yml @@ -4,6 +4,7 @@ status: true dependencies: config: - core.entity_view_mode.node.citizen_proposal_add + - field.field.node.citizen_proposal.field_author_allow_email - field.field.node.citizen_proposal.field_author_email - field.field.node.citizen_proposal.field_author_email_display - field.field.node.citizen_proposal.field_author_name @@ -122,6 +123,7 @@ content: weight: 100 region: content hidden: + field_author_allow_email: true field_author_email_display: true field_author_phone: true field_author_uuid: true diff --git a/config/sync/core.entity_view_display.node.citizen_proposal.citizen_proposal_approval.yml b/config/sync/core.entity_view_display.node.citizen_proposal.citizen_proposal_approval.yml index d9cc4cd1..c2d187ac 100644 --- a/config/sync/core.entity_view_display.node.citizen_proposal.citizen_proposal_approval.yml +++ b/config/sync/core.entity_view_display.node.citizen_proposal.citizen_proposal_approval.yml @@ -4,6 +4,7 @@ status: true dependencies: config: - core.entity_view_mode.node.citizen_proposal_approval + - field.field.node.citizen_proposal.field_author_allow_email - field.field.node.citizen_proposal.field_author_email - field.field.node.citizen_proposal.field_author_email_display - field.field.node.citizen_proposal.field_author_name @@ -55,6 +56,7 @@ content: weight: 1 region: content hidden: + field_author_allow_email: true field_author_email_display: true field_author_phone: true field_author_uuid: true diff --git a/config/sync/core.entity_view_display.node.citizen_proposal.default.yml b/config/sync/core.entity_view_display.node.citizen_proposal.default.yml index 7c387cf1..4d7e624c 100644 --- a/config/sync/core.entity_view_display.node.citizen_proposal.default.yml +++ b/config/sync/core.entity_view_display.node.citizen_proposal.default.yml @@ -136,6 +136,7 @@ content: weight: 9 region: right hidden: + field_author_allow_email: true field_author_email_display: true field_author_phone: true field_author_uuid: true diff --git a/config/sync/core.entity_view_display.node.citizen_proposal.list_display.yml b/config/sync/core.entity_view_display.node.citizen_proposal.list_display.yml index 0935b2f2..68ea9fc6 100644 --- a/config/sync/core.entity_view_display.node.citizen_proposal.list_display.yml +++ b/config/sync/core.entity_view_display.node.citizen_proposal.list_display.yml @@ -4,6 +4,7 @@ status: true dependencies: config: - core.entity_view_mode.node.list_display + - field.field.node.citizen_proposal.field_author_allow_email - field.field.node.citizen_proposal.field_author_email - field.field.node.citizen_proposal.field_author_email_display - field.field.node.citizen_proposal.field_author_name @@ -103,6 +104,7 @@ content: weight: 100 region: content hidden: + field_author_allow_email: true field_author_email_display: true field_author_phone: true field_author_uuid: true diff --git a/config/sync/core.entity_view_display.node.citizen_proposal.teaser.yml b/config/sync/core.entity_view_display.node.citizen_proposal.teaser.yml index ddde63b7..f081829a 100644 --- a/config/sync/core.entity_view_display.node.citizen_proposal.teaser.yml +++ b/config/sync/core.entity_view_display.node.citizen_proposal.teaser.yml @@ -4,6 +4,7 @@ status: true dependencies: config: - core.entity_view_mode.node.teaser + - field.field.node.citizen_proposal.field_author_allow_email - field.field.node.citizen_proposal.field_author_email - field.field.node.citizen_proposal.field_author_email_display - field.field.node.citizen_proposal.field_author_name @@ -51,6 +52,7 @@ content: weight: 1 region: content hidden: + field_author_allow_email: true field_author_email: true field_author_email_display: true field_author_phone: true diff --git a/config/sync/field.field.node.citizen_proposal.field_author_allow_email.yml b/config/sync/field.field.node.citizen_proposal.field_author_allow_email.yml new file mode 100644 index 00000000..b887e80e --- /dev/null +++ b/config/sync/field.field.node.citizen_proposal.field_author_allow_email.yml @@ -0,0 +1,23 @@ +uuid: 8d3748de-e723-46a5-b473-0135dd28153e +langcode: da +status: true +dependencies: + config: + - field.storage.node.field_author_allow_email + - node.type.citizen_proposal +id: node.citizen_proposal.field_author_allow_email +field_name: field_author_allow_email +entity_type: node +bundle: citizen_proposal +label: 'Allow email' +description: 'Author accepts receiving emails.' +required: false +translatable: false +default_value: + - + value: 0 +default_value_callback: '' +settings: + on_label: 'On' + off_label: 'Off' +field_type: boolean diff --git a/config/sync/field.storage.node.field_author_allow_email.yml b/config/sync/field.storage.node.field_author_allow_email.yml new file mode 100644 index 00000000..42168f75 --- /dev/null +++ b/config/sync/field.storage.node.field_author_allow_email.yml @@ -0,0 +1,18 @@ +uuid: a831ce9e-944a-45fa-a981-3978c9841237 +langcode: da +status: true +dependencies: + module: + - node +id: node.field_author_allow_email +field_name: field_author_allow_email +entity_type: node +type: boolean +settings: { } +module: core +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false From b93a4225ffee0a3d5f099f118c97c4ef35f48e58 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Tue, 22 Aug 2023 15:04:03 +0200 Subject: [PATCH 2/4] FORSLAG-77: Handled allow email field on proposal --- .../src/Form/ProposalAdminForm.php | 7 +++++++ .../src/Form/ProposalFormAdd.php | 9 +++++++++ .../src/Form/ProposalFormApprove.php | 11 +++++++++++ .../src/Form/ProposalFormBase.php | 1 + 4 files changed, 28 insertions(+) diff --git a/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalAdminForm.php b/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalAdminForm.php index ba387e10..f96d4483 100644 --- a/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalAdminForm.php +++ b/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalAdminForm.php @@ -113,6 +113,13 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#default_value' => $adminFormStateValues['email_display_help'] ?? '', ]; + $form['add_form']['allow_email_help'] = [ + '#type' => 'textfield', + '#title' => $this->t('Allow email help'), + '#default_value' => $adminFormStateValues['allow_email_help'] ?? '', + '#description' => $this->t('Use <a target="_blank" href="…">Read more about the emails we may send</a> to insert a link to details on what emails might be sent.'), + ]; + $form['add_form']['proposal_intro'] = [ '#type' => 'text_format', '#title' => $this->t('Proposal intro'), diff --git a/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormAdd.php b/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormAdd.php index 91b454c2..46a2d2a7 100644 --- a/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormAdd.php +++ b/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormAdd.php @@ -88,6 +88,14 @@ public function buildProposalForm(array $form, FormStateInterface $formState): a '#description_display' => 'before', ]; + $form['allow_email'] = [ + '#type' => 'checkbox', + '#title' => $this + ->t('Allow email'), + '#default_value' => $defaltValues['allow_email'] ?? FALSE, + '#description' => $this->getAdminFormStateValue('allow_email_help'), + ]; + $form['proposal_intro_container'] = [ '#type' => 'container', '#attributes' => ['class' => ['mt-5']], @@ -280,6 +288,7 @@ public function submitForm(array &$form, FormStateInterface $formState): void { 'field_author_email_display' => $formState->getValue('email_display'), 'field_proposal' => $formState->getValue('proposal'), 'field_remarks' => $formState->getValue('remarks'), + 'field_author_allow_email' => $formState->getValue('allow_email'), ]); $this->helper->setDraftProposal($entity); $formState diff --git a/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormApprove.php b/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormApprove.php index 77766114..66bdee6b 100644 --- a/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormApprove.php +++ b/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormApprove.php @@ -122,6 +122,17 @@ public function buildProposalForm(array $form, FormStateInterface $formState): a ], ]; + $form['allow_email'] = [ + '#type' => 'checkbox', + '#title' => $this + ->t('Allow email'), + '#default_value' => $defaltValues['allow_email'], + '#description' => $this->getAdminFormStateValue('allow_email_help'), + '#attributes' => [ + 'disabled' => 'disabled', + ], + ]; + $form['actions']['#type'] = 'actions'; $form['actions']['submit'] = [ '#type' => 'submit', diff --git a/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormBase.php b/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormBase.php index 3d9b6487..b309500f 100644 --- a/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormBase.php +++ b/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormBase.php @@ -142,6 +142,7 @@ protected function getDefaultFormValues(): array { 'title' => $entity?->title->value ?? NULL, 'proposal' => $entity?->field_proposal->value ?? '', 'remarks' => $entity?->field_remarks->value ?? '', + 'allow_email' => $entity?->field_author_allow_email->value ?? FALSE, ]; } From b06d04db5df2f8c8d4c461c723dcf6a8ba5f259a Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Tue, 22 Aug 2023 15:14:59 +0200 Subject: [PATCH 3/4] FORSLAG-77: Added allow email field on support --- .../views.view.citizen_proposal_support.yml | 114 ++++++++++++++++++ .../hoeringsportal_citizen_proposal.install | 27 +++++ .../src/Form/ProposalAdminForm.php | 7 ++ .../src/Form/ProposalFormSupport.php | 15 ++- .../src/Helper/Helper.php | 1 + 5 files changed, 163 insertions(+), 1 deletion(-) diff --git a/config/sync/views.view.citizen_proposal_support.yml b/config/sync/views.view.citizen_proposal_support.yml index 854a4cdf..da571fe2 100644 --- a/config/sync/views.view.citizen_proposal_support.yml +++ b/config/sync/views.view.citizen_proposal_support.yml @@ -126,6 +126,63 @@ display: hide_empty: false empty_zero: false hide_alter_empty: true + allow_email: + id: allow_email + table: hoeringsportal_citizen_proposal_support + field: allow_email + relationship: none + group_type: group + admin_label: '' + plugin_id: numeric + label: 'Allow email' + exclude: false + alter: + alter_text: true + text: '{{ allow_email ? 1 }}' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: true + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + set_precision: false + precision: 0 + decimal: . + separator: '' + format_plural: false + format_plural_string: !!binary MQNAY291bnQ= + prefix: '' + suffix: '' created: id: created table: hoeringsportal_citizen_proposal_support @@ -456,6 +513,63 @@ display: hide_empty: false empty_zero: false hide_alter_empty: true + allow_email: + id: allow_email + table: hoeringsportal_citizen_proposal_support + field: allow_email + relationship: none + group_type: group + admin_label: '' + plugin_id: numeric + label: 'Allow email' + exclude: false + alter: + alter_text: true + text: '{{ allow_email ? 1 }}' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: true + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + set_precision: false + precision: 0 + decimal: . + separator: '' + format_plural: false + format_plural_string: !!binary MQNAY291bnQ= + prefix: '' + suffix: '' style: type: data_export options: diff --git a/web/modules/custom/hoeringsportal_citizen_proposal/hoeringsportal_citizen_proposal.install b/web/modules/custom/hoeringsportal_citizen_proposal/hoeringsportal_citizen_proposal.install index 9d233aa4..54d5685f 100644 --- a/web/modules/custom/hoeringsportal_citizen_proposal/hoeringsportal_citizen_proposal.install +++ b/web/modules/custom/hoeringsportal_citizen_proposal/hoeringsportal_citizen_proposal.install @@ -47,6 +47,14 @@ function hoeringsportal_citizen_proposal_schema(): array { 'length' => 255, 'not null' => FALSE, ], + 'allow_email' => [ + 'description' => 'The proposal supporter allows email', + 'type' => 'int', + 'size' => 'tiny', + 'unsigned' => TRUE, + 'not null' => TRUE, + 'default' => 0, + ], 'created' => [ 'description' => 'The time of creation', 'type' => 'int', @@ -183,3 +191,22 @@ function hoeringsportal_citizen_proposal_update_9003(): void { 'symfony_mailer', ]); } + +/** + * Adds allow email column. + */ +function hoeringsportal_citizen_proposal_update_9004(): void { + $schema = \Drupal::database()->schema(); + + $table_name = 'hoeringsportal_citizen_proposal_support'; + $field_name = 'allow_email'; + $spec = [ + 'description' => 'The proposal supporter allows email', + 'type' => 'int', + 'size' => 'tiny', + 'unsigned' => TRUE, + 'not null' => TRUE, + 'default' => 0, + ]; + $schema->addField($table_name, $field_name, $spec); +} diff --git a/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalAdminForm.php b/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalAdminForm.php index f96d4483..fc54f1e1 100644 --- a/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalAdminForm.php +++ b/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalAdminForm.php @@ -222,6 +222,13 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#default_value' => $adminFormStateValues['support_email_help'] ?? '', ]; + $form['support_form']['support_allow_email_help'] = [ + '#type' => 'textfield', + '#title' => $this->t('Allow email help'), + '#default_value' => $adminFormStateValues['support_allow_email_help'] ?? '', + '#description' => $this->t('Use <a target="_blank" href="…">Read more about the emails we may send</a> to insert a link to details on what emails might be sent.'), + ]; + $form['support_form']['support_goto_url'] = [ '#type' => 'textfield', '#title' => $this->t('Redirect URL after a proposal has been supported'), diff --git a/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormSupport.php b/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormSupport.php index 382ac4da..080009ad 100644 --- a/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormSupport.php +++ b/web/modules/custom/hoeringsportal_citizen_proposal/src/Form/ProposalFormSupport.php @@ -95,7 +95,6 @@ protected function buildProposalForm(array $form, FormStateInterface $formState) $form['email'] = [ '#type' => 'email', - '#required' => TRUE, '#title' => $this ->t('Email'), '#default_value' => $defaltValues['email'], @@ -103,6 +102,19 @@ protected function buildProposalForm(array $form, FormStateInterface $formState) '#description_display' => 'before', ]; + $form['allow_email'] = [ + '#type' => 'checkbox', + '#title' => $this + ->t('Allow email'), + '#default_value' => $defaltValues['support_allow_email_help'] ?? FALSE, + '#description' => $this->getAdminFormStateValue('support_allow_email_help'), + '#states' => [ + 'visible' => [ + ':input[name="email"]' => ['filled' => TRUE], + ], + ], + ]; + $form['consent'] = [ '#type' => 'checkbox', '#title' => $this @@ -154,6 +166,7 @@ public function submitForm(array &$form, FormStateInterface $form_state): void { [ 'user_name' => $form_state->getValue('name'), 'user_email' => $form_state->getValue('email'), + 'allow_email' => $form_state->getValue('allow_email'), ], ); $this->messenger()->addStatus($this->getAdminFormStateValue('support_submission_text', $this->t('Thank you for your support.'))); diff --git a/web/modules/custom/hoeringsportal_citizen_proposal/src/Helper/Helper.php b/web/modules/custom/hoeringsportal_citizen_proposal/src/Helper/Helper.php index 4c43852b..761db36f 100644 --- a/web/modules/custom/hoeringsportal_citizen_proposal/src/Helper/Helper.php +++ b/web/modules/custom/hoeringsportal_citizen_proposal/src/Helper/Helper.php @@ -218,6 +218,7 @@ public function saveSupport(string $userIdentifier, NodeInterface $node, array $ try { $values['user_identifier'] = $userIdentifier; $values['node_id'] = $node->id(); + $values['allow_email'] = ($values['allow_email'] ?? FALSE) ? 1 : 0; // Set some defaults. $values += [ 'created' => $this->time->getRequestTime(), From 8922a0e3048542011bb8c5e0415f8982fcc61cef Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Tue, 22 Aug 2023 15:43:50 +0200 Subject: [PATCH 4/4] FORSLAG-77: Fixed issue with exception not being thrown --- config/sync/views.view.citizen_proposal_support.yml | 10 +++++----- .../src/Helper/Helper.php | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/config/sync/views.view.citizen_proposal_support.yml b/config/sync/views.view.citizen_proposal_support.yml index da571fe2..fef4f33f 100644 --- a/config/sync/views.view.citizen_proposal_support.yml +++ b/config/sync/views.view.citizen_proposal_support.yml @@ -134,11 +134,11 @@ display: group_type: group admin_label: '' plugin_id: numeric - label: 'Allow email' + label: 'Tillad e-mail' exclude: false alter: alter_text: true - text: '{{ allow_email ? 1 }}' + text: '{{ allow_email ? ''ja'' }}' make_link: false path: '' absolute: false @@ -423,7 +423,7 @@ display: group_type: group admin_label: '' plugin_id: standard - label: Name + label: Navn exclude: false alter: alter_text: false @@ -472,7 +472,7 @@ display: group_type: group admin_label: '' plugin_id: standard - label: Email + label: E-mail exclude: false alter: alter_text: false @@ -521,7 +521,7 @@ display: group_type: group admin_label: '' plugin_id: numeric - label: 'Allow email' + label: 'Tillad e-mail' exclude: false alter: alter_text: true diff --git a/web/modules/custom/hoeringsportal_citizen_proposal/src/Helper/Helper.php b/web/modules/custom/hoeringsportal_citizen_proposal/src/Helper/Helper.php index 761db36f..ad67157f 100644 --- a/web/modules/custom/hoeringsportal_citizen_proposal/src/Helper/Helper.php +++ b/web/modules/custom/hoeringsportal_citizen_proposal/src/Helper/Helper.php @@ -239,7 +239,8 @@ public function saveSupport(string $userIdentifier, NodeInterface $node, array $ 'exception' => $exception, 'values' => $values, ]); - $this->messenger()->addError($this->t('Something went wrong. Your support was not registered.')); + + throw $exception; } }