diff --git a/.gitlab-ci/aggregated-entity-fields-cause-schema-exception-2976616-11.patch b/.gitlab-ci/aggregated-entity-fields-cause-schema-exception-2976616-11.patch new file mode 100644 index 0000000000000000000000000000000000000000..d9a407ebf2b3d558f01686a3e61ac9629af15695 --- /dev/null +++ b/.gitlab-ci/aggregated-entity-fields-cause-schema-exception-2976616-11.patch @@ -0,0 +1,36 @@ +diff --git a/core/modules/views/config/schema/views.data_types.schema.yml b/core/modules/views/config/schema/views.data_types.schema.yml +index 708e12f..bb5c107 100644 +--- a/core/modules/views/config/schema/views.data_types.schema.yml ++++ b/core/modules/views/config/schema/views.data_types.schema.yml +@@ -574,6 +574,31 @@ views_field: + plugin_id: + type: string + label: 'Plugin ID' ++ # In case of using aggregation, field has numeric settings. ++ set_precision: ++ type: boolean ++ label: 'Round' ++ precision: ++ type: integer ++ label: 'Precision' ++ decimal: ++ type: string ++ label: 'Decimal point' ++ separator: ++ type: string ++ label: 'Thousands marker' ++ format_plural: ++ type: boolean ++ label: 'Format plural' ++ format_plural_string: ++ type: plural_label ++ label: 'Plural variants' ++ prefix: ++ type: label ++ label: 'Prefix' ++ suffix: ++ type: label ++ label: 'Suffix' + + views_pager: + type: mapping diff --git a/.gitlab-ci/build.php b/.gitlab-ci/build.php index f1c8e4489189d8827b4070695f34de63b9be306c..d091f65dc6dc1fc2c3b10b44b45ba140e19edeb8 100644 --- a/.gitlab-ci/build.php +++ b/.gitlab-ci/build.php @@ -40,50 +40,82 @@ $this->taskComposerConfig() ->noInteraction() ->noAnsi() ->workingDir($this->docRoot) - ->repository("0", "https://packages.startx.be", "composer") + ->repository("1", "https://packages.startx.be", "composer") ->run(); $this->taskComposerConfig() ->noInteraction() ->noAnsi() ->workingDir($this->docRoot) - ->repository("1", "https://packages.drupal.org/8", "composer") + ->repository("0", "https://packages.drupal.org/8", "composer") ->run(); +$this->taskComposerConfig() + ->noInteraction() + ->noAnsi() + ->workingDir($this->docRoot) + ->args(["minimum-stability", "dev"]) + ->run(); + +$repo = <<<EOT +{ + "type": "package", + "package": { + "name": "google/charts", + "version": "45", + "type": "drupal-library", + "extra": { + "installer-name": "google_charts" + }, + "dist": { + "url": "https://www.gstatic.com/charts/loader.js", + "type": "file" + }, + "require": { + "composer/installers": "~1.0" + } + } +} +EOT; + +$this->_exec("composer config --working-dir {$this->docRoot} repositories.100 '{$repo}' --no-interaction --no-ansi"); + $this->composerRequire() - ->dependency("drupal/accounting", "^1.0.10") + ->dependency("drupal/accounting", "^1.0.11") ->dependency('drupal/address', '^1.8') - ->dependency("drupal/admin_toolbar", "^2.2") ->dependency("drupal/advanced_help", "^1.0@alpha") ->dependency("drupal/charts", "3.x-dev") ->dependency("drupal/cleave_js", "^1.0") ->dependency("drupal/currency", "^3.2") ->dependency("drupal/drush_language", "^1.0@RC") - ->dependency("drupal/dsr", "^1.0") + ->dependency("drupal/dsr", "^1.0.21") ->dependency("drupal/formtips", "^1.1") ->dependency("drupal/banking", "^v1.0.20") ->dependency("drupal/banking_import_coda", "^1.0.2") ->dependency("drupal/banking_import_myponto", "^1.0.0") ->dependency("drupal/banking_orders", "^1.0.2") - ->dependency("drupal/banking_orders_accounting", "^1.0.2") + ->dependency("drupal/banking_orders_accounting", "^1.0.3") ->dependency("drupal/iban_bic_field", "^1.0") ->dependency('drupal/inline_entity_form', '^1.0') ->dependency("drupal/mail_template", "^1.0.7") - ->dependency("drupal/mollie_payment", "^2.0@RC") + ->dependency("drupal/mollie_payment", "^3.0") ->dependency("drupal/page_manager", "4.x-dev") ->dependency("drupal/panels", "^4.3") ->dependency("drupal/payment", "^2.0") ->dependency("drupal/shareholder_register", "^1.0.21") ->dependency("drupal/shareholder_register_accounting", "^1.0.21") ->dependency("drupal/simple_workflows", "^1.0.3") - ->dependency('drupal/views_bulk_operations', '^2.6.0') + ->dependency("drupal/swiftmailer", "^2.0") + ->dependency('drupal/views_bulk_operations', '^4.0') ->dependency("drupal/vbo_export", "~3.0") ->dependency("drupal/webform", "^6.0") ->dependency("drupal/webform_views", "^5.0@alpha") // ->dependency("google/charts", "45") - ->dependency("drupal/swiftmailer", "^1.0") ->dependency("drupal/twig_tweak", "^2.0") ->dependency("drupal/drush_language", "1.x-dev") + ->dependency("drupal/email_registration", "^1.1") ->run(); -$this->_exec("cat /builds/DAR/dsr_demo/.gitlab-ci/webform_views-schema.patch | patch -p 1 -d {$this->webRoot}/modules/contrib/webform_views/"); +$this->_exec("cat /builds/DAR/dsr_portal/.gitlab-ci/webform_views-schema.patch | patch -p 1 -d {$this->webRoot}/modules/contrib/webform_views/"); +$this->_exec("cat /builds/DAR/dsr_portal/.gitlab-ci/vbo_export-schema.patch | patch -p 1 -d {$this->webRoot}/modules/contrib/vbo_export/"); +$this->_exec("cat /builds/DAR/dsr_portal/.gitlab-ci/aggregated-entity-fields-cause-schema-exception-2976616-11.patch | patch -p 1 -d {$this->webRoot}/"); diff --git a/.gitlab-ci/vbo_export-schema.patch b/.gitlab-ci/vbo_export-schema.patch new file mode 100644 index 0000000000000000000000000000000000000000..ff257c7dc160e614e9f3119f54b22aeec51845d9 --- /dev/null +++ b/.gitlab-ci/vbo_export-schema.patch @@ -0,0 +1,15 @@ +diff --git a/config/schema/vbo_export.schema.yml b/config/schema/vbo_export.schema.yml +index 5b4eaa9..e64e1dc 100644 +--- a/config/schema/vbo_export.schema.yml ++++ b/config/schema/vbo_export.schema.yml +@@ -17,6 +17,9 @@ views_bulk_operations.action_config.vbo_export_generate_xlsx_action: + type: views_bulk_operations_action_config + label: 'Export to xlsx' + mapping: ++ strip_tags: ++ type: boolean ++ label: 'Should HTML be stripped?' + field_override: + type: boolean + field_config: + diff --git a/composer.json b/composer.json index 50efdcb6fbd1dd7bdcc0d52a63752cc13b00ecd5..f2f2b9310a710e6d720000e97f10f656d1cbf1f8 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,8 @@ "source": "http://cgit.drupalcode.org/dsr_portal" }, "require": { - "drupal/dsr": "^1.0.21" + "drupal/dsr": "^1.0.21", + "drupal/email_registration": "^1.1" }, "extra": { "drush": { diff --git a/config/install/core.entity_view_mode.shareholder.portal.yml b/config/install/core.entity_view_mode.shareholder.portal.yml new file mode 100644 index 0000000000000000000000000000000000000000..cc3ae7e68201483b36e5a6caacd8d9787f6f2577 --- /dev/null +++ b/config/install/core.entity_view_mode.shareholder.portal.yml @@ -0,0 +1,10 @@ +uuid: d1f93f0a-c2ce-4ad3-b776-10125eccc130 +langcode: en +status: true +dependencies: + module: + - shareholder_register +id: shareholder.portal +label: Portal +targetEntityType: shareholder +cache: true diff --git a/config/install/user.role.shareholder_register_portal.yml b/config/install/user.role.shareholder_register_portal.yml new file mode 100644 index 0000000000000000000000000000000000000000..61c6e3a0f716a1553f0bef2da327eb262242d0fb --- /dev/null +++ b/config/install/user.role.shareholder_register_portal.yml @@ -0,0 +1,13 @@ +langcode: en +status: true +dependencies: { } +id: shareholder_register_portal +label: 'Shareholder register portal' +weight: 6 +is_admin: null +permissions: + - 'access user profiles' + - 'edit own shareholder entities' + - 'view all share issue entities' + - 'view own share transaction entities' + - 'view own shareholder entities' diff --git a/config/install/views.view.portal_share_transactions.yml b/config/install/views.view.portal_share_transactions.yml new file mode 100644 index 0000000000000000000000000000000000000000..1eef7b4c3d338db9def2e5c5a3f06c6d949767b3 --- /dev/null +++ b/config/install/views.view.portal_share_transactions.yml @@ -0,0 +1,509 @@ +langcode: en +status: true +dependencies: + module: + - datetime + - shareholder_register + - user +id: portal_share_transactions +label: 'portal share transactions' +module: views +description: '' +tag: '' +base_table: users_field_data +base_field: uid +display: + default: + display_plugin: default + id: default + display_title: Master + position: 0 + display_options: + access: + type: perm + options: + perm: 'access user profiles' + cache: + type: tag + options: { } + query: + type: views_query + options: + disable_sql_rewrite: false + distinct: false + replica: false + query_comment: '' + query_tags: { } + exposed_form: + type: basic + options: + submit_button: Apply + reset_button: false + reset_button_label: Reset + exposed_sorts_label: 'Sort by' + expose_sort_order: true + sort_asc_label: Asc + sort_desc_label: Desc + pager: + type: some + options: + items_per_page: 5 + offset: 0 + style: + type: table + options: + grouping: { } + row_class: '' + default_row_class: true + override: true + sticky: false + caption: '' + summary: '' + description: '' + columns: + id: id + date: date + quantity: quantity + share_issue_id: share_issue_id + info: + id: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + date: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + quantity: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + share_issue_id: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + default: '-1' + empty_table: false + row: + type: fields + fields: + id: + id: id + table: share_transaction + field: id + relationship: transactions + group_type: group + admin_label: '' + label: ID + exclude: false + alter: + alter_text: false + text: '' + 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: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: number_integer + settings: + thousand_separator: '' + prefix_suffix: true + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + entity_type: share_transaction + entity_field: id + plugin_id: field + date: + id: date + table: share_transaction + field: date + relationship: transactions + group_type: group + admin_label: '' + label: Date + exclude: false + alter: + alter_text: false + text: '' + 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: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: datetime_default + settings: + timezone_override: '' + format_type: shareholder_register_date + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + entity_type: share_transaction + entity_field: date + plugin_id: field + quantity: + id: quantity + table: share_transaction + field: quantity + relationship: transactions + group_type: group + admin_label: '' + label: Quantity + exclude: false + alter: + alter_text: false + text: '' + 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: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: number_integer + settings: + thousand_separator: '' + prefix_suffix: true + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + entity_type: share_transaction + entity_field: quantity + plugin_id: field + share_issue_id: + id: share_issue_id + table: share_transaction + field: share_issue_id + relationship: transactions + group_type: group + admin_label: '' + label: 'Share Issue' + exclude: false + alter: + alter_text: false + text: '' + 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: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: target_id + type: entity_reference_label + settings: + link: false + group_column: target_id + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + entity_type: share_transaction + entity_field: share_issue_id + plugin_id: field + filters: + status: + value: '1' + table: users_field_data + field: status + plugin_id: boolean + entity_type: user + entity_field: status + id: status + expose: + operator: '' + operator_limit_selection: false + operator_list: { } + group: 1 + state: + id: state + table: share_transaction + field: state + relationship: transactions + group_type: group + admin_label: '' + operator: '=' + value: valid + group: 1 + exposed: false + expose: + operator_id: '' + label: '' + description: '' + use_operator: false + operator: '' + operator_limit_selection: false + operator_list: { } + identifier: '' + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + placeholder: '' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + entity_type: share_transaction + entity_field: state + plugin_id: string + sorts: { } + title: 'Portal shares' + header: { } + footer: { } + empty: { } + relationships: + shareholders_target_id: + id: shareholders_target_id + table: user__shareholders + field: shareholders_target_id + relationship: none + group_type: group + admin_label: Shareholder + required: true + entity_type: user + entity_field: shareholders + plugin_id: standard + transactions: + id: transactions + table: shareholder + field: transactions + relationship: shareholders_target_id + group_type: group + admin_label: 'Share Transactions' + required: false + entity_type: shareholder + plugin_id: standard + arguments: + uid: + id: uid + table: users_field_data + field: uid + relationship: none + group_type: group + admin_label: '' + default_action: default + exception: + value: all + title_enable: false + title: All + title_enable: false + title: '' + default_argument_type: current_user + default_argument_options: { } + default_argument_skip_url: false + summary_options: + base_path: '' + count: true + items_per_page: 25 + override: false + summary: + sort_order: asc + number_of_records: 0 + format: default_summary + specify_validation: false + validate: + type: none + fail: 'not found' + validate_options: { } + break_phrase: false + not: false + entity_type: user + entity_field: uid + plugin_id: user_uid + display_extenders: { } + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url + - user + - user.permissions + tags: { } + block_1: + display_plugin: block + id: block_1 + display_title: Block + position: 1 + display_options: + display_extenders: { } + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url + - user + - user.permissions + tags: { } diff --git a/config/install/views.view.portal_shares.yml b/config/install/views.view.portal_shares.yml new file mode 100644 index 0000000000000000000000000000000000000000..102cd8e03f9467d3dc298f907cacf8a675abb29b --- /dev/null +++ b/config/install/views.view.portal_shares.yml @@ -0,0 +1,549 @@ +langcode: en +status: true +dependencies: + module: + - shareholder_register + - user +id: portal_shares +label: 'Portal shares' +module: views +description: '' +tag: '' +base_table: users_field_data +base_field: uid +display: + default: + display_plugin: default + id: default + display_title: Master + position: 0 + display_options: + access: + type: perm + options: + perm: 'access user profiles' + cache: + type: tag + options: { } + query: + type: views_query + options: + disable_sql_rewrite: false + distinct: false + replica: false + query_comment: '' + query_tags: { } + exposed_form: + type: basic + options: + submit_button: Apply + reset_button: false + reset_button_label: Reset + exposed_sorts_label: 'Sort by' + expose_sort_order: true + sort_asc_label: Asc + sort_desc_label: Desc + pager: + type: some + options: + items_per_page: 5 + offset: 0 + style: + type: table + options: + grouping: { } + row_class: '' + default_row_class: true + override: true + sticky: false + caption: '' + summary: '' + description: '' + columns: + payment_date: payment_date + id: id + field_project: field_project + quantity: quantity + share_issue_id: share_issue_id + share_numbers_field: share_numbers_field + shares_total_value: shares_total_value + share_value: share_value + state: state + date: date + info: + payment_date: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + id: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + field_project: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + quantity: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + share_issue_id: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + share_numbers_field: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + shares_total_value: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + share_value: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + state: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + date: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + default: '-1' + empty_table: false + row: + type: fields + fields: + share_issue_id: + id: share_issue_id + table: share_transaction + field: share_issue_id + relationship: transactions + group_type: group + admin_label: '' + label: 'Share Issue' + exclude: false + alter: + alter_text: false + text: '' + 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: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: target_id + type: entity_reference_label + settings: + link: false + group_column: target_id + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + entity_type: share_transaction + entity_field: share_issue_id + plugin_id: field + quantity: + id: quantity + table: share_transaction + field: quantity + relationship: transactions + group_type: sum + admin_label: '' + label: Quantity + exclude: false + alter: + alter_text: false + text: '' + 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: false + 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: '' + click_sort_column: value + type: number_integer + settings: + thousand_separator: '' + prefix_suffix: true + group_column: null + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + field_api_classes: false + entity_type: share_transaction + entity_field: quantity + plugin_id: field + share_value: + id: share_value + table: share_transaction + field: share_value + relationship: transactions + group_type: group + admin_label: '' + label: 'Share Value' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: true + 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: true + 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 + click_sort_column: value + type: number_decimal + settings: + thousand_separator: '' + prefix_suffix: false + decimal_separator: . + scale: 2 + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + entity_type: share_transaction + entity_field: share_value + plugin_id: field + nothing: + id: nothing + table: views + field: nothing + relationship: none + group_type: group + admin_label: '' + label: 'Share Total Value' + exclude: false + alter: + alter_text: true + text: '{{quantity|number_format * share_value|striptags}} ( {{ quantity }} x {{ share_value }} )' + 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: false + plugin_id: custom + filters: + status: + value: '1' + table: users_field_data + field: status + plugin_id: boolean + entity_type: user + entity_field: status + id: status + expose: + operator: '' + operator_limit_selection: false + operator_list: { } + group: 1 + state: + id: state + table: share_transaction + field: state + relationship: transactions + group_type: group + admin_label: '' + operator: '=' + value: valid + group: 1 + exposed: false + expose: + operator_id: '' + label: '' + description: '' + use_operator: false + operator: '' + operator_limit_selection: false + operator_list: { } + identifier: '' + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + placeholder: '' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + entity_type: share_transaction + entity_field: state + plugin_id: string + sorts: { } + title: 'Portal share transactions' + header: { } + footer: { } + empty: { } + relationships: + shareholders_target_id: + id: shareholders_target_id + table: user__shareholders + field: shareholders_target_id + relationship: none + group_type: group + admin_label: Shareholder + required: true + entity_type: user + entity_field: shareholders + plugin_id: standard + transactions: + id: transactions + table: shareholder + field: transactions + relationship: shareholders_target_id + group_type: group + admin_label: 'Share Transactions' + required: false + entity_type: shareholder + plugin_id: standard + arguments: + uid: + id: uid + table: users_field_data + field: uid + relationship: none + group_type: group + admin_label: '' + default_action: default + exception: + value: all + title_enable: false + title: All + title_enable: false + title: '' + default_argument_type: current_user + default_argument_options: { } + default_argument_skip_url: false + summary_options: + base_path: '' + count: true + items_per_page: 25 + override: false + summary: + sort_order: asc + number_of_records: 0 + format: default_summary + specify_validation: false + validate: + type: none + fail: 'not found' + validate_options: { } + break_phrase: false + not: false + entity_type: user + entity_field: uid + plugin_id: user_uid + display_extenders: { } + group_by: true + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url + - user + - user.permissions + tags: { } + block_1: + display_plugin: block + id: block_1 + display_title: Block + position: 1 + display_options: + display_extenders: { } + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url + - user + - user.permissions + tags: { } diff --git a/config/install/views.view.portal_user.yml b/config/install/views.view.portal_user.yml new file mode 100644 index 0000000000000000000000000000000000000000..a36c99604c9d09455e01778e672965196e3c5083 --- /dev/null +++ b/config/install/views.view.portal_user.yml @@ -0,0 +1,333 @@ +langcode: en +status: true +dependencies: + module: + - shareholder_register + - user +id: portal_user +label: 'Portal user' +module: views +description: '' +tag: '' +base_table: users_field_data +base_field: uid +display: + default: + display_plugin: default + id: default + display_title: Master + position: 0 + display_options: + access: + type: perm + options: + perm: 'access user profiles' + cache: + type: tag + options: { } + query: + type: views_query + options: + disable_sql_rewrite: false + distinct: false + replica: false + query_comment: '' + query_tags: { } + exposed_form: + type: basic + options: + submit_button: Apply + reset_button: false + reset_button_label: Reset + exposed_sorts_label: 'Sort by' + expose_sort_order: true + sort_asc_label: Asc + sort_desc_label: Desc + pager: + type: some + options: + items_per_page: 5 + offset: 0 + style: + type: default + options: + grouping: { } + row_class: '' + default_row_class: true + row: + type: fields + fields: + shareholders_target_id: + id: shareholders_target_id + table: user__shareholders + field: shareholders_target_id + relationship: none + group_type: group + admin_label: '' + label: '' + exclude: false + alter: + alter_text: false + text: '' + 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: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: target_id + type: entity_reference_entity_view + settings: + view_mode: portal + group_column: target_id + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + entity_type: user + entity_field: shareholders + plugin_id: field + id: + id: id + table: shareholder + field: id + relationship: shareholders_target_id + group_type: group + admin_label: '' + label: ID + exclude: false + alter: + alter_text: false + text: '' + 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 + click_sort_column: value + type: number_integer + settings: + thousand_separator: '' + prefix_suffix: true + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + entity_type: shareholder + entity_field: id + plugin_id: field + nothing: + id: nothing + table: views + field: nothing + relationship: none + group_type: group + admin_label: '' + label: '' + exclude: false + alter: + alter_text: true + text: '{{ ''Download certificate'' | t }}' + make_link: true + path: '/admin/shareholder_register/shareholder/{{ id }}/certificate' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: button + 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: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: false + plugin_id: custom + filters: + status: + value: '1' + table: users_field_data + field: status + plugin_id: boolean + entity_type: user + entity_field: status + id: status + expose: + operator: '' + operator_limit_selection: false + operator_list: { } + group: 1 + sorts: { } + title: 'Portal user' + header: { } + footer: { } + empty: { } + relationships: + shareholders_target_id: + id: shareholders_target_id + table: user__shareholders + field: shareholders_target_id + relationship: none + group_type: group + admin_label: Shareholder + required: true + entity_type: user + entity_field: shareholders + plugin_id: standard + arguments: + uid: + id: uid + table: users_field_data + field: uid + relationship: none + group_type: group + admin_label: '' + default_action: default + exception: + value: all + title_enable: false + title: All + title_enable: false + title: '' + default_argument_type: current_user + default_argument_options: { } + default_argument_skip_url: false + summary_options: + base_path: '' + count: true + items_per_page: 25 + override: false + summary: + sort_order: asc + number_of_records: 0 + format: default_summary + specify_validation: false + validate: + type: none + fail: 'not found' + validate_options: { } + break_phrase: false + not: false + entity_type: user + entity_field: uid + plugin_id: user_uid + display_extenders: { } + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url + - user + - user.permissions + tags: { } + block_1: + display_plugin: block + id: block_1 + display_title: Block + position: 1 + display_options: + display_extenders: { } + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url + - user + - user.permissions + tags: { } diff --git a/dsr_portal.info.yml b/dsr_portal.info.yml index 3a88ac586c74a39764f894e6adb5726a6e584743..73737f275fdea6c0d06d1e6a255c4b87fad62ec1 100644 --- a/dsr_portal.info.yml +++ b/dsr_portal.info.yml @@ -5,3 +5,4 @@ core_version_requirement: ^8.8 || ^9 package: 'startx' dependencies: - dsr + - email_registration diff --git a/dsr_portal.module b/dsr_portal.module index 6dc178e340d2196382824087a7e5df4c1200cb14..730f7f8cc57b10aba9a0c1b3447ad1af56249e59 100644 --- a/dsr_portal.module +++ b/dsr_portal.module @@ -52,3 +52,18 @@ function dsr_portal_user_insert(EntityInterface $entity) { } } } + +/** + * Implements hook_form_FORM_ID_alter(). + */ +function dsr_portal_form_user_form_alter(&$form, &$form_state) { + // Redirect users to their profile pages. + $form['actions']['submit']['#submit'][] = 'dsr_portal_user_edit_form_submit'; +} + +/** + * Redirect users to their profile pages when submitting the edit form. + */ +function dsr_portal_user_edit_form_submit($form, &$form_state) { + $form_state->setRedirect('entity.user.canonical', ['user' => \Drupal::currentUser()->id()]); +} diff --git a/tests/src/Functional/LoadTest.php b/tests/src/Functional/LoadTest.php index 7c802c7b0e0590e35e57a300e7e287aeb3cc9592..4fd963e02a402776a72ae70336a0df3cec55b2af 100644 --- a/tests/src/Functional/LoadTest.php +++ b/tests/src/Functional/LoadTest.php @@ -19,6 +19,11 @@ class LoadTest extends BrowserTestBase { */ public static $modules = ['dsr_portal']; + /** + * {@inheritdoc} + */ + protected $defaultTheme = 'stark'; + /** * A user with permission to administer site configuration. * @@ -31,7 +36,13 @@ class LoadTest extends BrowserTestBase { */ protected function setUp() { parent::setUp(); - $this->user = $this->drupalCreateUser(['administer site configuration']); + // $this->user = $this->drupalCreateUser(['administer site configuration']); + // Check if custom username stays the same when user is edited. + $this->container->get('config.factory') + ->getEditable('email_registration.settings') + ->set('login_with_username', TRUE) + ->save(TRUE); + $this->user = $this->createUser(['administer site configuration'], 'info@startx.be'); $this->drupalLogin($this->user); }