From 6c274a19b02fbfa79081ec104ed27c4cebcadd18 Mon Sep 17 00:00:00 2001 From: Mohit Aghera Date: Fri, 21 May 2021 11:20:54 +0530 Subject: [PATCH 1/2] CONT-0: Add the field for issue tag and related vocabulary terms. --- ...entity_form_display.node.issue.default.yml | 11 + ...display.node.issue.inline_issue_create.yml | 2 + ..._display.node.code_contribution.teaser.yml | 1 + ...entity_view_display.node.event.default.yml | 2 +- ...entity_view_display.node.issue.default.yml | 9 + ....entity_view_display.node.issue.teaser.yml | 2 + ...d.field.node.event.field_event_address.yml | 2 +- ....field.node.event.field_event_location.yml | 2 +- ...ield.field.node.issue.field_issue_tags.yml | 29 + .../field.storage.node.field_issue_tags.yml | 24 + .../sync/taxonomy.vocabulary.issue_tags.yml | 8 + ...iew.code_contributions_advanced_filter.yml | 1264 +++++++++++++++++ 12 files changed, 1353 insertions(+), 3 deletions(-) create mode 100644 config/sync/field.field.node.issue.field_issue_tags.yml create mode 100644 config/sync/field.storage.node.field_issue_tags.yml create mode 100644 config/sync/taxonomy.vocabulary.issue_tags.yml create mode 100644 config/sync/views.view.code_contributions_advanced_filter.yml diff --git a/config/sync/core.entity_form_display.node.issue.default.yml b/config/sync/core.entity_form_display.node.issue.default.yml index 6eeccd48..a62f5609 100644 --- a/config/sync/core.entity_form_display.node.issue.default.yml +++ b/config/sync/core.entity_form_display.node.issue.default.yml @@ -5,6 +5,7 @@ dependencies: config: - field.field.node.issue.body - field.field.node.issue.field_issue_link + - field.field.node.issue.field_issue_tags - node.type.issue module: - link @@ -39,6 +40,16 @@ content: third_party_settings: { } type: link_default region: content + field_issue_tags: + weight: 121 + settings: + match_operator: CONTAINS + match_limit: 10 + size: 60 + placeholder: '' + third_party_settings: { } + type: entity_reference_autocomplete + region: content path: type: path weight: 30 diff --git a/config/sync/core.entity_form_display.node.issue.inline_issue_create.yml b/config/sync/core.entity_form_display.node.issue.inline_issue_create.yml index 7bbfd0f0..1bfe3be2 100644 --- a/config/sync/core.entity_form_display.node.issue.inline_issue_create.yml +++ b/config/sync/core.entity_form_display.node.issue.inline_issue_create.yml @@ -6,6 +6,7 @@ dependencies: - core.entity_form_mode.node.inline_issue_create - field.field.node.issue.body - field.field.node.issue.field_issue_link + - field.field.node.issue.field_issue_tags - node.type.issue module: - link @@ -50,6 +51,7 @@ content: region: content hidden: created: true + field_issue_tags: true path: true promote: true sticky: true diff --git a/config/sync/core.entity_view_display.node.code_contribution.teaser.yml b/config/sync/core.entity_view_display.node.code_contribution.teaser.yml index 4fa51aa4..16d6502b 100644 --- a/config/sync/core.entity_view_display.node.code_contribution.teaser.yml +++ b/config/sync/core.entity_view_display.node.code_contribution.teaser.yml @@ -15,6 +15,7 @@ dependencies: - field.field.node.code_contribution.field_contribution_date - field.field.node.code_contribution.field_contribution_description - field.field.node.code_contribution.field_contribution_technology + - field.field.node.code_contribution.field_contribution_type - node.type.code_contribution module: - user diff --git a/config/sync/core.entity_view_display.node.event.default.yml b/config/sync/core.entity_view_display.node.event.default.yml index 7ff6b20f..be15c509 100644 --- a/config/sync/core.entity_view_display.node.event.default.yml +++ b/config/sync/core.entity_view_display.node.event.default.yml @@ -95,7 +95,7 @@ content: label: visually_hidden settings: output_format: json - output_escape: '1' + output_escape: true third_party_settings: { } type: geofield_default region: content diff --git a/config/sync/core.entity_view_display.node.issue.default.yml b/config/sync/core.entity_view_display.node.issue.default.yml index 6f0e1ceb..4861bfdd 100644 --- a/config/sync/core.entity_view_display.node.issue.default.yml +++ b/config/sync/core.entity_view_display.node.issue.default.yml @@ -5,6 +5,7 @@ dependencies: config: - field.field.node.issue.body - field.field.node.issue.field_issue_link + - field.field.node.issue.field_issue_tags - node.type.issue module: - link @@ -34,6 +35,14 @@ content: third_party_settings: { } type: link region: content + field_issue_tags: + weight: 103 + label: above + settings: + link: true + third_party_settings: { } + type: entity_reference_label + region: content links: weight: 100 region: content diff --git a/config/sync/core.entity_view_display.node.issue.teaser.yml b/config/sync/core.entity_view_display.node.issue.teaser.yml index 20d64d08..4ede324d 100644 --- a/config/sync/core.entity_view_display.node.issue.teaser.yml +++ b/config/sync/core.entity_view_display.node.issue.teaser.yml @@ -6,6 +6,7 @@ dependencies: - core.entity_view_mode.node.teaser - field.field.node.issue.body - field.field.node.issue.field_issue_link + - field.field.node.issue.field_issue_tags - node.type.issue module: - text @@ -28,3 +29,4 @@ content: region: content hidden: field_issue_link: true + field_issue_tags: true diff --git a/config/sync/field.field.node.event.field_event_address.yml b/config/sync/field.field.node.event.field_event_address.yml index 7a7c118b..37455332 100644 --- a/config/sync/field.field.node.event.field_event_address.yml +++ b/config/sync/field.field.node.event.field_event_address.yml @@ -14,7 +14,7 @@ third_party_settings: weight: 0 geocode_field: body reverse_geocode_field: field_event_location - skip_not_empty_value: 0 + skip_not_empty_value: false disabled: false hidden: false plugins: diff --git a/config/sync/field.field.node.event.field_event_location.yml b/config/sync/field.field.node.event.field_event_location.yml index 02df359d..526a37b6 100644 --- a/config/sync/field.field.node.event.field_event_location.yml +++ b/config/sync/field.field.node.event.field_event_location.yml @@ -12,7 +12,7 @@ third_party_settings: geocoder_field: method: geocode weight: 0 - skip_not_empty_value: 0 + skip_not_empty_value: false disabled: false hidden: true providers: diff --git a/config/sync/field.field.node.issue.field_issue_tags.yml b/config/sync/field.field.node.issue.field_issue_tags.yml new file mode 100644 index 00000000..6189e31a --- /dev/null +++ b/config/sync/field.field.node.issue.field_issue_tags.yml @@ -0,0 +1,29 @@ +uuid: 8e252708-000e-46ce-9c30-996c164655af +langcode: en +status: true +dependencies: + config: + - field.storage.node.field_issue_tags + - node.type.issue + - taxonomy.vocabulary.issue_tags +id: node.issue.field_issue_tags +field_name: field_issue_tags +entity_type: node +bundle: issue +label: 'Issue Tags' +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: + handler: 'default:taxonomy_term' + handler_settings: + target_bundles: + issue_tags: issue_tags + sort: + field: name + direction: asc + auto_create: false + auto_create_bundle: '' +field_type: entity_reference diff --git a/config/sync/field.storage.node.field_issue_tags.yml b/config/sync/field.storage.node.field_issue_tags.yml new file mode 100644 index 00000000..1e5f5a40 --- /dev/null +++ b/config/sync/field.storage.node.field_issue_tags.yml @@ -0,0 +1,24 @@ +uuid: babf5932-6a8a-4851-828a-346cc4e42bc5 +langcode: en +status: true +dependencies: + module: + - field_permissions + - node + - taxonomy +third_party_settings: + field_permissions: + permission_type: public +id: node.field_issue_tags +field_name: field_issue_tags +entity_type: node +type: entity_reference +settings: + target_type: taxonomy_term +module: core +locked: false +cardinality: -1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/taxonomy.vocabulary.issue_tags.yml b/config/sync/taxonomy.vocabulary.issue_tags.yml new file mode 100644 index 00000000..888ad4d8 --- /dev/null +++ b/config/sync/taxonomy.vocabulary.issue_tags.yml @@ -0,0 +1,8 @@ +uuid: 12f38c67-6e20-42fa-8c25-9d8067ed4a63 +langcode: en +status: true +dependencies: { } +name: 'Issue Tags' +vid: issue_tags +description: 'Drupa.org issue tags' +weight: 0 diff --git a/config/sync/views.view.code_contributions_advanced_filter.yml b/config/sync/views.view.code_contributions_advanced_filter.yml new file mode 100644 index 00000000..ac30c88f --- /dev/null +++ b/config/sync/views.view.code_contributions_advanced_filter.yml @@ -0,0 +1,1264 @@ +uuid: f7955664-e070-4bf4-b85d-18e80ac14462 +langcode: en +status: true +dependencies: + config: + - core.entity_view_mode.node.teaser + - field.storage.node.field_code_contrib_files_count + - field.storage.node.field_code_contrib_issue_status + - field.storage.node.field_code_contrib_link + - field.storage.node.field_code_contrib_patches_count + - field.storage.node.field_code_contrib_project + - field.storage.node.field_contribution_author + - field.storage.node.field_contribution_date + - field.storage.node.field_contribution_technology + - node.type.code_contribution + - system.menu.main + - taxonomy.vocabulary.issue_tags + - taxonomy.vocabulary.project + - taxonomy.vocabulary.technology + module: + - better_exposed_filters + - datetime + - link + - node + - options + - taxonomy + - user +id: code_contributions_advanced_filter +label: 'Code Contributions Advanced Filter' +module: views +description: '' +tag: '' +base_table: node_field_data +base_field: nid +display: + default: + display_plugin: default + id: default + display_title: Master + position: 0 + display_options: + access: + type: perm + options: + perm: 'access content' + cache: + type: tag + options: { } + query: + type: views_query + options: + disable_sql_rewrite: false + distinct: false + replica: false + query_comment: '' + query_tags: { } + exposed_form: + type: bef + options: + submit_button: Apply + reset_button: true + reset_button_label: Reset + exposed_sorts_label: 'Sort by' + expose_sort_order: true + sort_asc_label: Asc + sort_desc_label: Desc + bef: + general: + allow_secondary: false + secondary_label: 'Advanced options' + autosubmit: false + autosubmit_hide: false + field_code_contrib_issue_status_value: + bef_format: default + more_options: + bef_select_all_none: false + bef_collapsible: false + is_secondary: false + rewrite: + filter_rewrite_values: '' + field_contribution_technology_target_id: + bef_format: default + more_options: + bef_select_all_none: false + bef_collapsible: false + is_secondary: false + rewrite: + filter_rewrite_values: '' + field_code_contrib_project_target_id: + bef_format: default + more_options: + bef_select_all_none: false + bef_collapsible: false + is_secondary: false + rewrite: + filter_rewrite_values: '' + uid: + bef_format: default + more_options: + bef_select_all_none: false + bef_collapsible: false + is_secondary: false + rewrite: + filter_rewrite_values: '' + field_contribution_date_value: + bef_format: bef_datepicker + more_options: + is_secondary: false + rewrite: + filter_rewrite_values: '' + pager: + type: full + options: + items_per_page: 50 + offset: 0 + id: 0 + total_pages: null + tags: + previous: ‹‹ + next: ›› + first: '« First' + last: 'Last »' + expose: + items_per_page: false + items_per_page_label: 'Items per page' + items_per_page_options: '5, 10, 25, 50' + items_per_page_options_all: false + items_per_page_options_all_label: '- All -' + offset: false + offset_label: Offset + quantity: 9 + style: + type: table + options: + grouping: { } + row_class: '' + default_row_class: true + override: true + sticky: true + caption: '' + summary: '' + description: '' + columns: + title: title + field_code_contrib_files_count: field_code_contrib_files_count + field_code_contrib_patches_count: field_code_contrib_patches_count + field_contribution_date: field_contribution_date + field_code_contrib_link: field_code_contrib_link + field_contribution_author: field_contribution_author + field_code_contrib_project: field_code_contrib_project + field_code_contrib_issue_status: field_code_contrib_issue_status + field_contribution_technology: field_contribution_technology + info: + title: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + field_code_contrib_files_count: + sortable: true + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + field_code_contrib_patches_count: + sortable: true + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + field_contribution_date: + sortable: true + default_sort_order: desc + align: '' + separator: '' + empty_column: false + responsive: '' + field_code_contrib_link: + align: '' + separator: '' + empty_column: false + responsive: '' + field_contribution_author: + align: '' + separator: '' + empty_column: false + responsive: '' + field_code_contrib_project: + sortable: true + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + field_code_contrib_issue_status: + sortable: true + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + field_contribution_technology: + sortable: true + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + default: field_contribution_date + empty_table: false + row: + type: 'entity:node' + options: + view_mode: teaser + fields: + title: + id: title + table: node_field_data + field: title + relationship: none + group_type: group + admin_label: '' + label: Title + 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: string + settings: + link_to_entity: 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: node + entity_field: title + plugin_id: field + title_1: + id: title_1 + table: node_field_data + field: title + relationship: field_code_contrib_issue_link + group_type: group + admin_label: '' + label: 'Issue Title' + 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: string + settings: + link_to_entity: 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: node + entity_field: title + plugin_id: field + field_code_contrib_files_count: + id: field_code_contrib_files_count + table: node__field_code_contrib_files_count + field: field_code_contrib_files_count + relationship: none + group_type: group + admin_label: '' + label: Files + 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 + plugin_id: field + field_code_contrib_patches_count: + id: field_code_contrib_patches_count + table: node__field_code_contrib_patches_count + field: field_code_contrib_patches_count + relationship: none + group_type: group + admin_label: '' + label: Patches + 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 + plugin_id: field + field_contribution_date: + id: field_contribution_date + table: node__field_contribution_date + field: field_contribution_date + relationship: none + group_type: group + admin_label: '' + label: 'Contribution 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: 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: datetime_default + settings: + timezone_override: '' + format_type: short + 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 + plugin_id: field + field_code_contrib_link: + id: field_code_contrib_link + table: node__field_code_contrib_link + field: field_code_contrib_link + relationship: none + group_type: group + admin_label: '' + label: 'Contribution Link' + 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: uri + type: link + settings: + trim_length: 80 + url_only: false + url_plain: false + rel: '0' + target: '0' + group_column: '' + 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 + plugin_id: field + field_contribution_author: + id: field_contribution_author + table: node__field_contribution_author + field: field_contribution_author + relationship: none + group_type: group + admin_label: '' + label: 'Contribution Author' + 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: target_id + type: entity_reference_label + settings: + link: true + 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 + plugin_id: field + field_code_contrib_project: + id: field_code_contrib_project + table: node__field_code_contrib_project + field: field_code_contrib_project + relationship: none + group_type: group + admin_label: '' + label: 'Contribution Project' + 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: target_id + type: entity_reference_label + settings: + link: true + 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 + plugin_id: field + field_code_contrib_issue_status: + id: field_code_contrib_issue_status + table: node__field_code_contrib_issue_status + field: field_code_contrib_issue_status + relationship: none + group_type: group + admin_label: '' + label: 'Issue Status' + 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: list_default + settings: { } + 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 + plugin_id: field + field_contribution_technology: + id: field_contribution_technology + table: node__field_contribution_technology + field: field_contribution_technology + relationship: none + group_type: group + admin_label: '' + label: Technology + 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: target_id + type: entity_reference_label + settings: + link: true + 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 + plugin_id: field + filters: + status: + value: '1' + table: node_field_data + field: status + plugin_id: boolean + entity_type: node + entity_field: status + id: status + expose: + operator: '' + operator_limit_selection: false + operator_list: { } + group: 1 + type: + id: type + table: node_field_data + field: type + value: + code_contribution: code_contribution + entity_type: node + entity_field: type + plugin_id: bundle + group: 1 + expose: + operator_limit_selection: false + operator_list: { } + field_code_contrib_issue_status_value: + id: field_code_contrib_issue_status_value + table: node__field_code_contrib_issue_status + field: field_code_contrib_issue_status_value + relationship: none + group_type: group + admin_label: '' + operator: or + value: { } + group: 1 + exposed: true + expose: + operator_id: field_code_contrib_issue_status_value_op + label: 'Issue Status' + description: '' + use_operator: false + operator: field_code_contrib_issue_status_value_op + identifier: field_code_contrib_issue_status_value + required: false + remember: false + multiple: true + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '0' + contribution_moderator: '0' + reduce: false + operator_limit_selection: false + operator_list: { } + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + reduce_duplicates: false + plugin_id: list_field + field_contribution_technology_target_id: + id: field_contribution_technology_target_id + table: node__field_contribution_technology + field: field_contribution_technology_target_id + relationship: none + group_type: group + admin_label: '' + operator: or + value: { } + group: 1 + exposed: true + expose: + operator_id: field_contribution_technology_target_id_op + label: Technology + description: '' + use_operator: false + operator: field_contribution_technology_target_id_op + identifier: field_contribution_technology_target_id + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '0' + contribution_moderator: '0' + reduce: false + operator_limit_selection: false + operator_list: { } + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + reduce_duplicates: false + type: select + limit: true + vid: technology + hierarchy: false + error_message: true + plugin_id: taxonomy_index_tid + field_code_contrib_project_target_id: + id: field_code_contrib_project_target_id + table: node__field_code_contrib_project + field: field_code_contrib_project_target_id + relationship: none + group_type: group + admin_label: '' + operator: or + value: { } + group: 1 + exposed: true + expose: + operator_id: field_code_contrib_project_target_id_op + label: 'Contribution Project' + description: '' + use_operator: false + operator: field_code_contrib_project_target_id_op + identifier: field_code_contrib_project_target_id + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '0' + contribution_moderator: '0' + reduce: false + operator_limit_selection: false + operator_list: { } + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + reduce_duplicates: false + type: select + limit: true + vid: project + hierarchy: false + error_message: true + plugin_id: taxonomy_index_tid + uid: + id: uid + table: users_field_data + field: uid + relationship: field_contribution_author + group_type: group + admin_label: '' + operator: in + value: { } + group: 1 + exposed: true + expose: + operator_id: uid_op + label: Contributor + description: '' + use_operator: false + operator: uid_op + identifier: uid + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '0' + contribution_moderator: '0' + reduce: false + operator_limit_selection: false + operator_list: { } + 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: user + entity_field: uid + plugin_id: user_name + field_contribution_date_value: + id: field_contribution_date_value + table: node__field_contribution_date + field: field_contribution_date_value + relationship: none + group_type: group + admin_label: '' + operator: between + value: + min: '' + max: '' + value: '' + type: date + group: 1 + exposed: true + expose: + operator_id: field_contribution_date_value_op + label: 'Contribution Date' + description: '' + use_operator: false + operator: field_contribution_date_value_op + identifier: field_contribution_date_value + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '0' + contribution_moderator: '0' + placeholder: '' + min_placeholder: '' + max_placeholder: '' + operator_limit_selection: false + operator_list: { } + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + plugin_id: datetime + field_issue_tags_target_id: + id: field_issue_tags_target_id + table: node__field_issue_tags + field: field_issue_tags_target_id + relationship: field_code_contrib_issue_link + group_type: group + admin_label: '' + operator: or + value: { } + group: 1 + exposed: true + expose: + operator_id: field_issue_tags_target_id_op + label: 'Issue Tags' + description: '' + use_operator: false + operator: field_issue_tags_target_id_op + operator_limit_selection: false + operator_list: { } + identifier: field_issue_tags + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + anonymous: '0' + contribution_moderator: '0' + administrator: '0' + api_basic_read: '0' + reduce: false + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + reduce_duplicates: false + type: select + limit: true + vid: issue_tags + hierarchy: false + error_message: true + plugin_id: taxonomy_index_tid + sorts: + field_contribution_date_value: + id: field_contribution_date_value + table: node__field_contribution_date + field: field_contribution_date_value + relationship: none + group_type: group + admin_label: '' + order: DESC + exposed: false + expose: + label: '' + granularity: second + plugin_id: datetime + title: 'Code Contributions' + header: { } + footer: { } + empty: { } + relationships: + field_contribution_author: + id: field_contribution_author + table: node__field_contribution_author + field: field_contribution_author + relationship: none + group_type: group + admin_label: 'field_contribution_author: User' + required: false + plugin_id: standard + field_code_contrib_issue_link: + id: field_code_contrib_issue_link + table: node__field_code_contrib_issue_link + field: field_code_contrib_issue_link + relationship: none + group_type: group + admin_label: 'field_code_contrib_issue_link: Content' + required: false + plugin_id: standard + arguments: { } + display_extenders: { } + filter_groups: + operator: AND + groups: + 1: AND + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url + - url.query_args + - user + - 'user.node_grants:view' + - user.permissions + tags: + - 'config:field.storage.node.field_code_contrib_files_count' + - 'config:field.storage.node.field_code_contrib_issue_status' + - 'config:field.storage.node.field_code_contrib_link' + - 'config:field.storage.node.field_code_contrib_patches_count' + - 'config:field.storage.node.field_code_contrib_project' + - 'config:field.storage.node.field_contribution_author' + - 'config:field.storage.node.field_contribution_date' + - 'config:field.storage.node.field_contribution_technology' + page_1: + display_plugin: page + id: page_1 + display_title: Page + position: 1 + display_options: + display_extenders: { } + path: code-contributions-advanced + menu: + type: normal + title: 'Code Contribution' + description: '' + expanded: false + parent: 'views_view:views.all_contributions.page_1' + weight: -50 + context: '0' + menu_name: main + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url + - url.query_args + - user + - 'user.node_grants:view' + - user.permissions + tags: + - 'config:field.storage.node.field_code_contrib_files_count' + - 'config:field.storage.node.field_code_contrib_issue_status' + - 'config:field.storage.node.field_code_contrib_link' + - 'config:field.storage.node.field_code_contrib_patches_count' + - 'config:field.storage.node.field_code_contrib_project' + - 'config:field.storage.node.field_contribution_author' + - 'config:field.storage.node.field_contribution_date' + - 'config:field.storage.node.field_contribution_technology' From f5488d7102b14f49d19bc7a397dcd4dc61d7287f Mon Sep 17 00:00:00 2001 From: Mohit Aghera Date: Fri, 21 May 2021 11:23:44 +0530 Subject: [PATCH 2/2] CONT-0: Implement issue tag retriever logic. Update issue with appropriate terms on sync process. --- .../src/ContributionManager.php | 19 +++++++++++ .../src/ContributionRetrieverInterface.php | 11 ++++++ .../src/ContributionStorage.php | 21 ++++++++++++ .../src/DrupalOrg/ContributionRetriever.php | 34 +++++++++++++++++++ 4 files changed, 85 insertions(+) diff --git a/web/modules/custom/contrib_tracker/src/ContributionManager.php b/web/modules/custom/contrib_tracker/src/ContributionManager.php index 5c4ac19b..25a64cbe 100644 --- a/web/modules/custom/contrib_tracker/src/ContributionManager.php +++ b/web/modules/custom/contrib_tracker/src/ContributionManager.php @@ -131,9 +131,28 @@ public function getIssueNodeDetails($nid, $issueData, $user) { if (!$issueNode) { $issueNode = $this->contribStorage->saveIssue($issueData, $user); } + $issueTags = $this->getIssueTagsDetails($issueData); + $this->contribStorage->saveIssueTags($issueNode, $issueTags); return $issueNode; } + /** + * Retrieve the taxonomy term data from the issue. + * + * @param array $issueData + */ + public function getIssueTagsDetails($issueData) { + // Fetch the issue tags for the current issue. + $issueTags = []; + if (!empty($issueData->taxonomy_vocabulary_9)) { + foreach ($issueData->taxonomy_vocabulary_9 as $tag) { + $issueTags[] = $this->contribRetriever->getDrupalOrgTaxonomy($tag->id, REQUEST_TIME + (6 * 3600)); + } + } + var_dump($issueTags); + return $issueTags; + } + /** * Sends Slack message to project group. */ diff --git a/web/modules/custom/contrib_tracker/src/ContributionRetrieverInterface.php b/web/modules/custom/contrib_tracker/src/ContributionRetrieverInterface.php index 357d6a03..c6003938 100644 --- a/web/modules/custom/contrib_tracker/src/ContributionRetrieverInterface.php +++ b/web/modules/custom/contrib_tracker/src/ContributionRetrieverInterface.php @@ -44,6 +44,17 @@ public function getDrupalOrgNode($nid, $cacheExpiry = Cache::PERMANENT); */ public function getDrupalOrgNodeFromApi($nid); + /** + * Get taxonomy term data from drupal.org + * + * @param int $tid + * Taxonomy term id. + * + * @return \Hussainweb\DrupalApi\Entity\TaxonomyTerm + * Taxonomy term data from drupal.org + */ + public function getDrupalOrgTaxonomyFromApi($tid); + /** * Get comments by an user on drupal.org. * diff --git a/web/modules/custom/contrib_tracker/src/ContributionStorage.php b/web/modules/custom/contrib_tracker/src/ContributionStorage.php index 653c2fe5..5c52d15d 100644 --- a/web/modules/custom/contrib_tracker/src/ContributionStorage.php +++ b/web/modules/custom/contrib_tracker/src/ContributionStorage.php @@ -3,6 +3,7 @@ namespace Drupal\contrib_tracker; use Drupal\contrib_tracker\DrupalOrg\CommentDetails; +use Drupal\node\Entity\Node; use Drupal\user\UserInterface; use Drupal\node\NodeInterface; use Drupal\taxonomy\TermInterface; @@ -101,6 +102,26 @@ public function saveIssue(DrupalOrgNode $issueData, UserInterface $user) { return $node; } + /** + * Update issue tags on the node. + * + * @param \Drupal\node\Entity\Node $issue + * Issue node object in contrib tracker. + * + * @param array $issueTags + * Array of Taxonomy term data of Drupal.org taxonomy. + */ + public function saveIssueTags(Node $issue, array $issueTags) { + // @todo: Check if term exists on node, don't add it if it exists. + $issue_tags = []; + foreach ($issueTags as $issueTag) { + $term = $this->getOrCreateTerm($issueTag->name, 'issue_tags'); + $issue_tags[] = ['target_id' => $term->id()]; + } + $issue->set('field_issue_tags', $issue_tags); + $issue->save(); + } + /** * {@inheritdoc} */ diff --git a/web/modules/custom/contrib_tracker/src/DrupalOrg/ContributionRetriever.php b/web/modules/custom/contrib_tracker/src/DrupalOrg/ContributionRetriever.php index b1ad628b..a21ef22c 100644 --- a/web/modules/custom/contrib_tracker/src/DrupalOrg/ContributionRetriever.php +++ b/web/modules/custom/contrib_tracker/src/DrupalOrg/ContributionRetriever.php @@ -9,6 +9,7 @@ use Hussainweb\DrupalApi\Request\Collection\UserCollectionRequest; use Hussainweb\DrupalApi\Request\FileRequest; use Hussainweb\DrupalApi\Request\NodeRequest; +use Hussainweb\DrupalApi\Request\TaxonomyTermRequest; use RuntimeException; /** @@ -91,6 +92,31 @@ public function getDrupalOrgNode($nid, $cacheExpiry = Cache::PERMANENT) { return $node; } + /** + * Get the taxonomy term from Drupal.org + * + * @param int $tid + * Taxonomy term id of term on Drupal.org. + * @param int $cacheExpiry + * The cache expiry for the item. + * + * @return \Hussainweb\DrupalApi\Entity\TaxonomyTerm + * Return the taxonomy term. + */ + public function getDrupalOrgTaxonomy($tid, $cacheExpiry = Cache::PERMANENT) { + $cid = 'contrib_tracker:taxonomy:' . $tid; + + $cache = $this->cache->get($cid); + if ($cache) { + return $cache->data; + } + + $taxonomy = $this->getDrupalOrgTaxonomyFromApi($tid); + $this->cache->set($cid, $taxonomy, $cacheExpiry); + + return $taxonomy; + } + /** * {@inheritdoc} */ @@ -99,6 +125,14 @@ public function getDrupalOrgNodeFromApi($nid) { return $this->client->getEntity($req); } + /** + * {@inheritdoc} + */ + public function getDrupalOrgTaxonomyFromApi($tid) { + $req = new TaxonomyTermRequest($tid); + return $this->client->getEntity($req); + } + /** * {@inheritdoc} */