From 395c2be0477044e9d0e811f130c5a054b1d8d2c6 Mon Sep 17 00:00:00 2001 From: Bec White Date: Fri, 21 Oct 2016 18:13:27 -0500 Subject: [PATCH 1/3] Refinements to the "Recent content" view. - Displays all content - Uses the same columns in the block and page views - Adds view and delete links to the "Actions" column - Displays content titles as plain text when the user does not have view access It's relatively easy for users to be in a situation where they don't have view access to content, but they can edit the content: they may have all of the permissions for a specific content type, but only have the "View own unpublished" content permission. --- .../views.view.workbench_recent_content.yml | 698 +++++++----------- css/workbench.views.css | 8 + workbench.libraries.yml | 5 + workbench.module | 11 + 4 files changed, 298 insertions(+), 424 deletions(-) create mode 100644 css/workbench.views.css diff --git a/config/optional/views.view.workbench_recent_content.yml b/config/optional/views.view.workbench_recent_content.yml index 84f215e..1d9c599 100644 --- a/config/optional/views.view.workbench_recent_content.yml +++ b/config/optional/views.view.workbench_recent_content.yml @@ -40,7 +40,7 @@ display: type: basic options: submit_button: Apply - reset_button: false + reset_button: true reset_button_label: Reset exposed_sorts_label: 'Sort by' expose_sort_order: true @@ -80,11 +80,15 @@ display: description: '' columns: title: title + view_node: view_node type: type status: status name: name changed: changed + view_node_1: view_node_1 edit_node: edit_node + delete_node: delete_node + nothing: nothing info: title: sortable: true @@ -93,13 +97,20 @@ display: separator: '' empty_column: false responsive: '' + view_node: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' type: sortable: true default_sort_order: asc align: '' separator: '' empty_column: false - responsive: priority-low + responsive: priority-medium status: sortable: true default_sort_order: asc @@ -121,6 +132,13 @@ display: separator: '' empty_column: false responsive: priority-low + view_node_1: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' edit_node: sortable: false default_sort_order: asc @@ -128,6 +146,20 @@ display: separator: '' empty_column: false responsive: priority-medium + delete_node: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + nothing: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' default: changed empty_table: false row: @@ -143,7 +175,7 @@ display: group_type: group admin_label: '' label: Title - exclude: false + exclude: true alter: alter_text: false text: '' @@ -186,7 +218,7 @@ display: click_sort_column: value type: string settings: - link_to_entity: true + link_to_entity: false group_column: value group_columns: { } group_rows: true @@ -198,6 +230,57 @@ display: separator: ', ' field_api_classes: false plugin_id: field + view_node: + id: view_node + table: node + field: view_node + relationship: none + group_type: group + admin_label: '' + label: Title + exclude: false + alter: + alter_text: true + text: '{{ title }}' + 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: false + empty: '{{ title }}' + hide_empty: false + empty_zero: false + hide_alter_empty: true + text: view + entity_type: node + plugin_id: entity_link type: id: type table: node_field_data @@ -270,7 +353,7 @@ display: relationship: none group_type: group admin_label: '' - label: Published + label: Status exclude: false alter: alter_text: false @@ -314,9 +397,9 @@ display: click_sort_column: value type: boolean settings: - format: yes-no - format_custom_true: '' - format_custom_false: '' + format: custom + format_custom_true: Published + format_custom_false: Unpublished group_column: value group_columns: { } group_rows: true @@ -462,6 +545,57 @@ display: entity_type: node entity_field: changed plugin_id: field + view_node_1: + id: view_node_1 + table: node + field: view_node + relationship: none + group_type: group + admin_label: '' + label: '' + exclude: true + 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 + text: view + entity_type: node + plugin_id: entity_link edit_node: id: edit_node table: node @@ -469,8 +603,8 @@ display: relationship: none group_type: group admin_label: '' - label: Actions - exclude: false + label: '' + exclude: true alter: alter_text: false text: '' @@ -502,7 +636,7 @@ display: element_class: '' element_label_type: '' element_label_class: '' - element_label_colon: true + element_label_colon: false element_wrapper_type: '' element_wrapper_class: '' element_default_classes: true @@ -513,6 +647,106 @@ display: text: edit entity_type: node plugin_id: entity_link_edit + delete_node: + id: delete_node + table: node + field: delete_node + relationship: none + group_type: group + admin_label: '' + label: 'Link to delete Content' + exclude: true + 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 + text: delete + entity_type: node + plugin_id: entity_link_delete + nothing: + id: nothing + table: views + field: nothing + relationship: none + group_type: group + admin_label: '' + label: Actions + exclude: false + alter: + alter_text: true + text: '{{ view_node_1 }} {{ edit_node }} {{ delete_node }}' + 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: title: id: title @@ -605,7 +839,7 @@ display: group_type: group admin_label: '' operator: '=' - value: true + value: All group: 1 exposed: true expose: @@ -622,59 +856,29 @@ display: authenticated: authenticated anonymous: '0' administrator: '0' - editor: '0' - is_grouped: false + is_grouped: true group_info: - label: '' + label: Status description: '' - identifier: '' + identifier: status optional: true widget: select multiple: false - remember: false + remember: true default_group: All default_group_multiple: { } - group_items: { } + group_items: + 1: + title: Published + operator: '=' + value: '1' + 2: + title: Unpublished + operator: '=' + value: '0' plugin_id: boolean entity_type: node entity_field: status - status_extra: - id: status_extra - table: node_field_data - field: status_extra - relationship: none - group_type: group - admin_label: '' - operator: '=' - value: false - group: 1 - exposed: false - expose: - operator_id: '' - label: '' - description: '' - use_operator: false - operator: '' - identifier: '' - required: false - remember: false - multiple: false - remember_roles: - authenticated: authenticated - 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: node - plugin_id: node_status sorts: changed: id: changed @@ -731,6 +935,8 @@ display: operator: AND groups: 1: AND + link_url: '' + link_display: page_1 cache_metadata: max-age: 0 contexts: @@ -738,7 +944,6 @@ display: - 'languages:language_interface' - url - url.query_args - - user - 'user.node_grants:view' - user.permissions tags: { } @@ -753,7 +958,7 @@ display: style: true row: true pager: false - fields: false + fields: true filters: false filter_groups: false use_more: false @@ -766,372 +971,14 @@ display: items_per_page: 10 offset: 0 display_description: '' - filters: - status: - id: status - table: node_field_data - field: status - relationship: none - group_type: group - admin_label: '' - operator: '=' - value: true - group: 1 - exposed: false - expose: - operator_id: '' - label: Published - description: '' - use_operator: false - operator: status_op - identifier: published - required: false - remember: false - multiple: false - remember_roles: - authenticated: authenticated - anonymous: '0' - administrator: '0' - editor: '0' - 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: boolean - entity_type: node - entity_field: status - filter_groups: - operator: AND - groups: - 1: AND - 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 - plugin_id: field - type: - id: type - table: node_field_data - field: type - relationship: none - group_type: group - admin_label: '' - label: 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 - entity_type: node - entity_field: type - plugin_id: field - name: - id: name - table: users_field_data - field: name - relationship: uid - group_type: group - admin_label: '' - label: 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: value - type: user_name - 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: user - entity_field: name - plugin_id: field - changed: - id: changed - table: node_field_data - field: changed - relationship: none - group_type: group - admin_label: '' - label: 'Last updated' - 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_ago - settings: - date_format: medium - custom_date_format: '' - timezone: '' - 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: changed - plugin_id: field - edit_node: - id: edit_node - table: node - field: edit_node - relationship: none - group_type: group - admin_label: '' - label: Actions - 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 - text: edit - entity_type: node - plugin_id: entity_link_edit - use_more: true - use_more_always: false - use_more_text: 'view all' - header: - area: - id: area - table: views - field: area + use_more: true + use_more_always: false + use_more_text: 'view all' + header: + area: + id: area + table: views + field: area relationship: none group_type: group admin_label: '' @@ -1141,6 +988,10 @@ display: value: '

Recent content

' format: basic_html plugin_id: text + filters: { } + filter_groups: + operator: AND + groups: { } cache_metadata: max-age: 0 contexts: @@ -1174,7 +1025,6 @@ display: - 'languages:language_interface' - url - url.query_args - - user - 'user.node_grants:view' - user.permissions tags: { } diff --git a/css/workbench.views.css b/css/workbench.views.css new file mode 100644 index 0000000..6a4eb51 --- /dev/null +++ b/css/workbench.views.css @@ -0,0 +1,8 @@ +/** + * CSS for Workbench views. + */ + +.view[class*=workbench] .workbench-action-link { + width: 3em; + display: inline-block; +} diff --git a/workbench.libraries.yml b/workbench.libraries.yml index aa58257..90ec912 100644 --- a/workbench.libraries.yml +++ b/workbench.libraries.yml @@ -13,3 +13,8 @@ workbench.toolbar: css: theme: css/workbench.toolbar.css: {} +workbench.views: + version: VERSION + css: + theme: + css/workbench.views.css: {} diff --git a/workbench.module b/workbench.module index 5d8520c..683a862 100644 --- a/workbench.module +++ b/workbench.module @@ -78,3 +78,14 @@ function workbench_toolbar_prerender_tray(array $element) { $element['administration_menu'] = $menu_tree->build($tree); return $element; } + +/** + * Implements hook_views_pre_render(). + * + * Add custom CSS to Workbench views. + */ +function workbench_views_pre_render(\Drupal\views\ViewExecutable $view) { + if (isset($view) && $view->storage->get('tag') == 'Workbench') { + $view->element['#attached']['library'][] = 'workbench/workbench.views'; + } +} From a7f57e5ccc58312e0efac0b7323a60743449ae7a Mon Sep 17 00:00:00 2001 From: Bec White Date: Thu, 27 Oct 2016 17:26:49 -0500 Subject: [PATCH 2/3] Only include edit and delete links in the all recent content view. --- .../views.view.workbench_recent_content.yml | 53 +------------------ 1 file changed, 1 insertion(+), 52 deletions(-) diff --git a/config/optional/views.view.workbench_recent_content.yml b/config/optional/views.view.workbench_recent_content.yml index 1d9c599..920b0a8 100644 --- a/config/optional/views.view.workbench_recent_content.yml +++ b/config/optional/views.view.workbench_recent_content.yml @@ -545,57 +545,6 @@ display: entity_type: node entity_field: changed plugin_id: field - view_node_1: - id: view_node_1 - table: node - field: view_node - relationship: none - group_type: group - admin_label: '' - label: '' - exclude: true - 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 - text: view - entity_type: node - plugin_id: entity_link edit_node: id: edit_node table: node @@ -709,7 +658,7 @@ display: exclude: false alter: alter_text: true - text: '{{ view_node_1 }} {{ edit_node }} {{ delete_node }}' + text: '{{ edit_node }} {{ delete_node }}' make_link: false path: '' absolute: false From 5c86646569f67d278efcc394ba8493a20d991e58 Mon Sep 17 00:00:00 2001 From: Bec White Date: Thu, 27 Oct 2016 17:33:05 -0500 Subject: [PATCH 3/3] Add a description to the 'access workbench' permission with info about viewing unpublished node titles. --- workbench.permissions.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/workbench.permissions.yml b/workbench.permissions.yml index c1859f6..36e29c5 100644 --- a/workbench.permissions.yml +++ b/workbench.permissions.yml @@ -1,2 +1,3 @@ access workbench: - title: 'Access My Workbench' \ No newline at end of file + title: 'Access My Workbench' + description: 'Users with this permission will see titles of unpublished content in the default "All Recent Content" listing.'