diff --git a/core/modules/dblog/dblog.post_update.php b/core/modules/dblog/dblog.post_update.php new file mode 100644 index 0000000..ec6e4ce --- /dev/null +++ b/core/modules/dblog/dblog.post_update.php @@ -0,0 +1,77 @@ +listAll('views.view.') as $view_config_name) { + $view = $config_factory->getEditable($view_config_name); + if ($view->get('base_table') != 'watchdog') { + continue; + } + + $numeric_attributes_to_delete = [ + 'set_precision', + 'precision', + 'decimal', + 'separator', + 'format_plural', + 'format_plural_string', + 'prefix', + 'suffix', + ]; + + $save = FALSE; + foreach ($view->get('display') as $display_name => $display) { + // Iterate through all the fields of watchdog views based tables. + if (isset($display['display_options']['fields'])) { + foreach ($display['display_options']['fields'] as $field_name => $field) { + // We are only interested in wid and uid fields from the watchdog + // table that still use the numeric id + if (isset($field['table']) && + $field['table'] === 'watchdog' && + $field['plugin_id'] == 'numeric' && + in_array($field['field'], ['wid', 'uid'])) { + $save = TRUE; + + $new_value = $field; + $new_value['plugin_id'] = 'standard'; + + // Delete all the attributes related to numeric fields. + foreach ($numeric_attributes_to_delete as $key) { + if (isset($new_value[$key])) { + unset($new_value[$key]); + } + } + $view->set("display.$display_name.display_options.fields.$field_name", $new_value); + } + } + } + + } + if ($save) { + $view->save(); + } + } +} + +/** + * @} End of "addtogroup updates-8.3.x". + */ diff --git a/core/modules/dblog/dblog.views.inc b/core/modules/dblog/dblog.views.inc index dfc1fde..1d07de1 100644 --- a/core/modules/dblog/dblog.views.inc +++ b/core/modules/dblog/dblog.views.inc @@ -20,11 +20,19 @@ function dblog_views_data() { 'help' => t('Contains a list of log entries.'), ); + $data['watchdog']['table']['join'] = array( + // Link ourselves to the {users_field_data} table + 'users_field_data' => array( + 'field' => 'uid', + 'left_field' => 'uid', + ), + ); + $data['watchdog']['wid'] = array( 'title' => t('WID'), 'help' => t('Unique watchdog event ID.'), 'field' => array( - 'id' => 'numeric', + 'id' => 'standard', ), 'filter' => array( 'id' => 'numeric', @@ -39,9 +47,8 @@ function dblog_views_data() { $data['watchdog']['uid'] = array( 'title' => t('UID'), - 'help' => t('The user ID of the user on which the log entry was written..'), 'field' => array( - 'id' => 'numeric', + 'id' => 'standard', ), 'filter' => array( 'id' => 'numeric', @@ -52,7 +59,7 @@ function dblog_views_data() { 'relationship' => array( 'title' => t('User'), 'help' => t('The user on which the log entry as written.'), - 'base' => 'users', + 'base' => 'users_field_data', 'base field' => 'uid', 'id' => 'standard', ), @@ -120,7 +127,7 @@ function dblog_views_data() { ), 'filter' => array( 'id' => 'in_operator', - 'options callback' => 'Drupal\dblog\Controller\DbLogController::getLogLevelClassMap', + 'options callback' => 'Drupal\Core\Logger\RfcLogLevel::getLevels', ), 'sort' => array( 'id' => 'standard', diff --git a/core/modules/dblog/src/Tests/Update/DblogUpgradeWidUidFieldsPlugin.php b/core/modules/dblog/src/Tests/Update/DblogUpgradeWidUidFieldsPlugin.php new file mode 100644 index 0000000..5695661 --- /dev/null +++ b/core/modules/dblog/src/Tests/Update/DblogUpgradeWidUidFieldsPlugin.php @@ -0,0 +1,59 @@ +databaseDumpFiles = [ + __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz', + __DIR__ . '/../../../tests/fixtures/update/dblog-upgrade-wid-uid-fields.php', + ]; + } + + /** + * Tests that field handlers are updated properly. + */ + public function testDblogUpgradePath() { + + $view = Views::getView('dblog_upgrade_test'); + $view->setDisplay('page_1'); + $data = $view->storage->toArray(); + $fields = $data['display']['default']['display_options']['fields']; + + // wid and uid should should be numeric before the update. + $this->assertEqual('numeric', $fields['wid']['plugin_id']); + $this->assertEqual('numeric', $fields['uid']['plugin_id']); + + $this->runUpdates(); + + $view = Views::getView('dblog_upgrade_test'); + $view->setDisplay('page_1'); + $data = $view->storage->toArray(); + $fields = $data['display']['default']['display_options']['fields']; + + // wid and uid should use the standard plugin now. + $this->assertEqual('standard', $fields['wid']['plugin_id']); + $this->assertEqual('standard', $fields['uid']['plugin_id']); + + // The uid relationship should now join to the {users_field_data} table. + $tables = array_keys($view->getBaseTables()); + $this->assertTrue(in_array('users_field_data', $tables)); + $this->assertFalse(in_array('users', $tables)); + $this->assertTrue(in_array('watchdog', $tables)); + } + +} diff --git a/core/modules/dblog/tests/fixtures/update/dblog-upgrade-wid-uid-fields.php b/core/modules/dblog/tests/fixtures/update/dblog-upgrade-wid-uid-fields.php new file mode 100644 index 0000000..857c9b2 --- /dev/null +++ b/core/modules/dblog/tests/fixtures/update/dblog-upgrade-wid-uid-fields.php @@ -0,0 +1,19 @@ +insert('config') + ->fields(array( + 'collection' => '', + 'name' => 'views.view.dblog_upgrade_test', + 'data' => serialize(Yaml::decode(file_get_contents('core/modules/dblog/tests/modules/dblog_test_views/test_views/views.view.dblog_upgrade_test.yml'))), + )) + ->execute(); diff --git a/core/modules/dblog/tests/modules/dblog_test_views/test_views/views.view.dblog_upgrade_test.yml b/core/modules/dblog/tests/modules/dblog_test_views/test_views/views.view.dblog_upgrade_test.yml new file mode 100644 index 0000000..56d675e --- /dev/null +++ b/core/modules/dblog/tests/modules/dblog_test_views/test_views/views.view.dblog_upgrade_test.yml @@ -0,0 +1,608 @@ +langcode: en +status: true +dependencies: + module: + - dblog + - user +id: dblog_upgrade_test +label: dblog_upgrade_test +module: views +description: '' +tag: '' +base_table: watchdog +base_field: wid +core: 8.x +display: + default: + display_plugin: default + id: default + display_title: Master + position: 0 + display_options: + access: + type: perm + options: + perm: 'access site reports' + 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: Filter + 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: mini + options: + items_per_page: 10 + offset: 0 + id: 0 + total_pages: null + 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 + tags: + previous: ‹‹ + next: ›› + style: + type: default + row: + type: fields + fields: + wid: + table: watchdog + field: wid + id: wid + entity_type: null + entity_field: null + plugin_id: numeric + 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: true + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + set_precision: false + precision: 0 + decimal: . + separator: ',' + format_plural: false + format_plural_string: "1\x03@count" + prefix: '' + suffix: '' + message: + id: message + table: watchdog + field: message + 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 + replace_variables: true + plugin_id: dblog_message + link: + id: link + table: watchdog + field: link + 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 + plugin_id: dblog_operations + severity: + id: severity + table: watchdog + field: severity + 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 + machine_name: false + plugin_id: machine_name + timestamp: + id: timestamp + table: watchdog + field: timestamp + 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 + date_format: fallback + custom_date_format: '' + timezone: '' + plugin_id: date + type: + id: type + table: watchdog + field: type + 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 + plugin_id: standard + uid: + id: uid + table: watchdog + field: uid + 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 + set_precision: false + precision: 0 + decimal: . + separator: ',' + format_plural: false + format_plural_string: "1\x03@count" + prefix: '' + suffix: '' + plugin_id: numeric + filters: + severity: + id: severity + table: watchdog + field: severity + relationship: none + group_type: group + admin_label: '' + operator: in + value: { } + group: 1 + exposed: true + expose: + operator_id: severity_op + label: 'Severity level' + description: '' + use_operator: false + operator: severity_op + identifier: severity + required: false + remember: false + multiple: true + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '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: { } + plugin_id: in_operator + type: + id: type + table: watchdog + field: type + relationship: none + group_type: group + admin_label: '' + operator: in + value: { } + group: 1 + exposed: true + expose: + operator_id: type_op + label: Type + description: '' + use_operator: false + operator: type_op + identifier: type + required: false + remember: false + multiple: true + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '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: { } + plugin_id: in_operator + uid: + id: uid + table: watchdog + field: uid + relationship: none + group_type: group + admin_label: '' + operator: '>=' + value: + min: '' + max: '' + value: '0' + group: 1 + exposed: true + expose: + operator_id: uid_op + label: UID + description: '' + use_operator: false + operator: uid_op + identifier: uid + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '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: numeric + sorts: + wid: + id: wid + table: watchdog + field: wid + relationship: none + group_type: group + admin_label: '' + order: DESC + exposed: false + expose: + label: '' + plugin_id: standard + title: dblog_upgrade_test + header: { } + footer: { } + empty: { } + relationships: + uid: + id: uid + table: watchdog + field: uid + relationship: none + group_type: group + admin_label: uid + required: false + plugin_id: standard + arguments: { } + display_extenders: { } + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_interface' + - url + - url.query_args + - user.permissions + tags: { } + page_1: + display_plugin: page + id: page_1 + display_title: Page + position: 1 + display_options: + display_extenders: { } + path: dblog-upgrade-test + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_interface' + - url + - url.query_args + - user.permissions + tags: { }