From 7be0a333a8b0242c820688116720dcd5745ed74f Mon Sep 17 00:00:00 2001 From: Mark Conroy Date: Thu, 3 Apr 2025 10:39:39 +0100 Subject: [PATCH 1/6] Add view to list where paragraphs are used on nodes --- .../view.view.localgov_paragraphs_usage.yml | 644 ++++++++++++++++++ 1 file changed, 644 insertions(+) create mode 100644 config/install/view.view.localgov_paragraphs_usage.yml diff --git a/config/install/view.view.localgov_paragraphs_usage.yml b/config/install/view.view.localgov_paragraphs_usage.yml new file mode 100644 index 0000000..0372a05 --- /dev/null +++ b/config/install/view.view.localgov_paragraphs_usage.yml @@ -0,0 +1,644 @@ +langcode: en +status: true +dependencies: + module: + - paragraphs + - user +id: localgov_paragraphs_usage +label: 'Paragraphs Usage' +module: views +description: 'List all the paragraphs on the website.' +tag: '' +base_table: paragraphs_item_field_data +base_field: id +display: + default: + id: default + display_title: Default + display_plugin: default + position: 0 + display_options: + title: 'Paragraphs Usage' + fields: + id: + id: id + table: paragraphs_item_field_data + field: id + relationship: none + group_type: group + admin_label: '' + entity_type: null + entity_field: id + plugin_id: field + label: 'Paragraph 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 + type: + id: type + table: paragraphs_item_field_data + field: type + relationship: none + group_type: group + admin_label: '' + entity_type: paragraph + entity_field: type + plugin_id: field + label: 'Paragraph type' + 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 + created: + id: created + table: paragraphs_item_field_data + field: created + relationship: none + group_type: group + admin_label: '' + entity_type: paragraph + entity_field: created + plugin_id: field + label: 'Authored on' + 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: timestamp + settings: + date_format: html_date + custom_date_format: '' + timezone: '' + tooltip: + date_format: long + custom_date_format: '' + time_diff: + enabled: false + future_format: '@interval hence' + past_format: '@interval ago' + granularity: 2 + refresh: 60 + description: '' + 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 + parent_id_1: + id: parent_id_1 + table: paragraphs_item_field_data + field: parent_id + relationship: none + group_type: group + admin_label: 'Node ID' + entity_type: paragraph + entity_field: parent_id + plugin_id: field + label: 'Node 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: string + 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 + parent_id: + id: parent_id + table: paragraphs_item_field_data + field: parent_id + relationship: none + group_type: group + admin_label: View + entity_type: paragraph + entity_field: parent_id + plugin_id: field + label: View + exclude: false + alter: + alter_text: true + text: 'View' + 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: { } + 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 + pager: + type: mini + options: + offset: 0 + pagination_heading_level: h4 + items_per_page: 25 + total_pages: null + id: 0 + tags: + next: ›› + previous: ‹‹ + 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 + 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 + access: + type: perm + options: + perm: 'access content overview' + cache: + type: tag + options: { } + empty: { } + sorts: { } + arguments: { } + filters: + type: + id: type + table: paragraphs_item_field_data + field: type + relationship: none + group_type: group + admin_label: '' + entity_type: paragraph + entity_field: type + plugin_id: bundle + operator: in + value: + all: all + group: 1 + exposed: true + expose: + operator_id: type_op + label: 'Paragraph type' + description: '' + use_operator: false + operator: type_op + operator_limit_selection: false + operator_list: { } + identifier: type + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + emergency_publisher: '0' + anonymous: '0' + localgov_editor: '0' + localgov_author: '0' + localgov_contributor: '0' + localgov_news_editor: '0' + localgov_user_manager: '0' + localgov_admin: '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: { } + parent_type: + id: parent_type + table: paragraphs_item_field_data + field: parent_type + relationship: none + group_type: group + admin_label: '' + entity_type: paragraph + entity_field: parent_type + plugin_id: string + operator: '=' + value: node + group: 1 + exposed: false + expose: + operator_id: parent_type_op + label: 'Parent type' + description: null + use_operator: false + operator: parent_type_op + operator_limit_selection: false + operator_list: { } + identifier: parent_type + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + placeholder: null + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + created: + id: created + table: paragraphs_item_field_data + field: created + relationship: none + group_type: group + admin_label: 'Created after' + entity_type: paragraph + entity_field: created + plugin_id: date + operator: '>=' + value: + min: '' + max: '' + value: '' + type: date + group: 1 + exposed: true + expose: + operator_id: created_op + label: 'Created after' + description: '' + use_operator: false + operator: created_op + operator_limit_selection: false + operator_list: { } + identifier: created_after + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + emergency_publisher: '0' + anonymous: '0' + localgov_editor: '0' + localgov_author: '0' + localgov_contributor: '0' + localgov_news_editor: '0' + localgov_user_manager: '0' + localgov_admin: '0' + min_placeholder: '' + max_placeholder: '' + placeholder: '2025-01-24' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + created_1: + id: created_1 + table: paragraphs_item_field_data + field: created + relationship: none + group_type: group + admin_label: 'Created before' + entity_type: paragraph + entity_field: created + plugin_id: date + operator: '<=' + value: + min: '' + max: '' + value: '' + type: date + group: 1 + exposed: true + expose: + operator_id: created_1_op + label: 'Created before' + description: '' + use_operator: false + operator: created_1_op + operator_limit_selection: false + operator_list: { } + identifier: created_before + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + emergency_publisher: '0' + anonymous: '0' + localgov_editor: '0' + localgov_author: '0' + localgov_contributor: '0' + localgov_news_editor: '0' + localgov_user_manager: '0' + localgov_admin: '0' + min_placeholder: '' + max_placeholder: '' + placeholder: '2025-01-24' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + style: + type: table + row: + type: fields + query: + type: views_query + options: + query_comment: '' + disable_sql_rewrite: false + distinct: false + replica: false + query_tags: { } + relationships: { } + header: { } + footer: { } + display_extenders: { } + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url + - url.query_args + - user.permissions + tags: { } + localgov_paragraphs_usage: + id: localgov_paragraphs_usage + display_title: Page + display_plugin: page + position: 1 + display_options: + display_extenders: + localgov_page_header_display_extender: + lede: '' + tokenize: false + path: admin/content/paragraphs/usage + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url + - url.query_args + - user.permissions + tags: { } From d4d44d786219d2c800c510cae8e5dd5973ff0e69 Mon Sep 17 00:00:00 2001 From: Mark Conroy Date: Sat, 25 Oct 2025 12:16:12 +0100 Subject: [PATCH 2/6] rename file so it imports correctly --- ...agraphs_usage.yml => views.view.localgov_paragraphs_usage.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename config/install/{view.view.localgov_paragraphs_usage.yml => views.view.localgov_paragraphs_usage.yml} (100%) diff --git a/config/install/view.view.localgov_paragraphs_usage.yml b/config/install/views.view.localgov_paragraphs_usage.yml similarity index 100% rename from config/install/view.view.localgov_paragraphs_usage.yml rename to config/install/views.view.localgov_paragraphs_usage.yml From 1a52ad0dfd1db12d5d148e94e061ee5c5035a5aa Mon Sep 17 00:00:00 2001 From: Mark Conroy Date: Sat, 25 Oct 2025 16:03:37 +0100 Subject: [PATCH 3/6] adds tabs for admin/content menu page --- localgov_paragraphs.links.task.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 localgov_paragraphs.links.task.yml diff --git a/localgov_paragraphs.links.task.yml b/localgov_paragraphs.links.task.yml new file mode 100644 index 0000000..90d668b --- /dev/null +++ b/localgov_paragraphs.links.task.yml @@ -0,0 +1,15 @@ +# Secondary tab - Overview (default paragraphs library page) +localgov_paragraphs.overview: + route_name: view.paragraphs_library.page_1 + title: 'Overview' + parent_id: entity.paragraphs_library_item.collection + base_route: system.admin_content + weight: 0 + +# Secondary tab - Usage +localgov_paragraphs.usage: + route_name: view.localgov_paragraphs_usage.localgov_paragraphs_usage + title: 'Usage' + parent_id: entity.paragraphs_library_item.collection + base_route: system.admin_content + weight: 1 From 93beab6da59cff951725359ec56af496196a6096 Mon Sep 17 00:00:00 2001 From: Mark Conroy Date: Sat, 25 Oct 2025 16:03:49 +0100 Subject: [PATCH 4/6] enable view if it has not been enabled yet --- localgov_paragraphs.install | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/localgov_paragraphs.install b/localgov_paragraphs.install index f04265f..8453752 100644 --- a/localgov_paragraphs.install +++ b/localgov_paragraphs.install @@ -110,3 +110,15 @@ function localgov_paragraphs_update_9004() { $entityFormDisplayConfig = Yaml::parseFile($modulePath . '/config/install/core.entity_form_display.paragraph.localgov_numbered_text.default.yml'); EntityFormDisplay::create($entityFormDisplayConfig)->save(); } + +function localgov_paragraphs_update_10001() { + // If the view for paragraphs usage does not exist, import the config for it + // from the config/install folder. + $view_storage = \Drupal::entityTypeManager()->getStorage('view'); + $view = $view_storage->load('localgov_paragraphs_usage'); + if (!$view) { + $modulePath = \Drupal::service('extension.list.module')->getPath('localgov_paragraphs'); + $viewConfig = Yaml::parseFile($modulePath . '/config/install/views.view.localgov_paragraphs_usage.yml'); + $view_storage->create($viewConfig)->save(); + } +} \ No newline at end of file From 2a1866cf2b844f8d985f158f5119883910eb0ac0 Mon Sep 17 00:00:00 2001 From: Mark Conroy Date: Sat, 25 Oct 2025 16:10:10 +0100 Subject: [PATCH 5/6] coding standards fixes --- localgov_paragraphs.install | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/localgov_paragraphs.install b/localgov_paragraphs.install index 8453752..e79672e 100644 --- a/localgov_paragraphs.install +++ b/localgov_paragraphs.install @@ -111,6 +111,11 @@ function localgov_paragraphs_update_9004() { EntityFormDisplay::create($entityFormDisplayConfig)->save(); } +/** + * Implements hook_update_N(). + * + * Ensure the localgov_paragraphs_usage view is installed. + */ function localgov_paragraphs_update_10001() { // If the view for paragraphs usage does not exist, import the config for it // from the config/install folder. @@ -121,4 +126,4 @@ function localgov_paragraphs_update_10001() { $viewConfig = Yaml::parseFile($modulePath . '/config/install/views.view.localgov_paragraphs_usage.yml'); $view_storage->create($viewConfig)->save(); } -} \ No newline at end of file +} From 2596eafe546e854ed369ccfa9ef77f77c0c3fbbd Mon Sep 17 00:00:00 2001 From: Mark Conroy Date: Sat, 25 Oct 2025 16:15:11 +0100 Subject: [PATCH 6/6] adds return type --- localgov_paragraphs.install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localgov_paragraphs.install b/localgov_paragraphs.install index e79672e..d56051d 100644 --- a/localgov_paragraphs.install +++ b/localgov_paragraphs.install @@ -116,7 +116,7 @@ function localgov_paragraphs_update_9004() { * * Ensure the localgov_paragraphs_usage view is installed. */ -function localgov_paragraphs_update_10001() { +function localgov_paragraphs_update_10001(): void { // If the view for paragraphs usage does not exist, import the config for it // from the config/install folder. $view_storage = \Drupal::entityTypeManager()->getStorage('view');