diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index e98272e1a5..c830bcf533 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -13,6 +13,7 @@ Changelog
* Remove unidecode and use anyascii in for Unicode to ASCII conversion (Robbie Mackay)
* Add `render` helper to `RoutablePageMixin` to support serving template responses according to Wagtail conventions (Andy Babic)
* Specify minimum Python version in setup.py (Vince Salvino)
+ * Show user's full name in report views (Matt Westcott)
* Fix: Make page-level actions accessible to keyboard users in page listing tables (Jesse Menn)
* Fix: `WAGTAILFRONTENDCACHE_LANGUAGES` was being interpreted incorrectly. It now accepts a list of strings, as documented (Karl Hobley)
* Fix: Update oEmbed endpoints to use https where available (Matt Westcott)
diff --git a/docs/releases/2.11.rst b/docs/releases/2.11.rst
index 6a19443ab3..b554098083 100644
--- a/docs/releases/2.11.rst
+++ b/docs/releases/2.11.rst
@@ -22,6 +22,7 @@ Other features
* Specify minimum Python version in setup.py (Vince Salvino)
* Extend treebeard's ``fix_tree`` method with the ability to non-destructively fix path issues and add a --full option to apply path fixes (Matt Westcott)
* Add support for hierarchical/nested Collections (Robert Rollins)
+ * Show user's full name in report views (Matt Westcott)
Bug fixes
diff --git a/wagtail/admin/templates/wagtailadmin/home.html b/wagtail/admin/templates/wagtailadmin/home.html
index ebd325ee01..c58b044cec 100644
--- a/wagtail/admin/templates/wagtailadmin/home.html
+++ b/wagtail/admin/templates/wagtailadmin/home.html
@@ -18,7 +18,7 @@
{% block branding_welcome %}{% blocktrans %}Welcome to the {{ site_name }} Wagtail CMS{% endblocktrans %}{% endblock %}
-
{{ user.get_full_name|default:user.get_username }}
+
{{ user|user_display_name }}
diff --git a/wagtail/admin/templates/wagtailadmin/home/pages_for_moderation.html b/wagtail/admin/templates/wagtailadmin/home/pages_for_moderation.html
index 325f366635..67c513cb26 100644
--- a/wagtail/admin/templates/wagtailadmin/home/pages_for_moderation.html
+++ b/wagtail/admin/templates/wagtailadmin/home/pages_for_moderation.html
@@ -63,7 +63,7 @@
{% blocktrans with time_period=revision.created_at|timesince_simple %}{{ time_period }}{% endblocktrans %}
{% if revision.user %}
- by {{ revision.user.get_full_name|default:revision.user.get_username }}
+ by {{ revision.user|user_display_name }}
{% endif %}
|
diff --git a/wagtail/admin/templates/wagtailadmin/notifications/submitted.html b/wagtail/admin/templates/wagtailadmin/notifications/submitted.html
index 9296baa91c..8ff34d9804 100644
--- a/wagtail/admin/templates/wagtailadmin/notifications/submitted.html
+++ b/wagtail/admin/templates/wagtailadmin/notifications/submitted.html
@@ -1,9 +1,9 @@
{% extends 'wagtailadmin/notifications/base.html' %}
-{% load i18n %}
+{% load wagtailadmin_tags i18n %}
{% block content %}
- {% blocktrans with page=revision.page|safe editor=revision.user.get_full_name|default:revision.user.get_username %}The page "{{ page }}" has been submitted for moderation by {{ editor }}.{% endblocktrans %}
+ {% blocktrans with page=revision.page|safe editor=revision.user|user_display_name %}The page "{{ page }}" has been submitted for moderation by {{ editor }}.{% endblocktrans %}
{% if revision.page.is_previewable %}
diff --git a/wagtail/admin/templates/wagtailadmin/notifications/submitted.txt b/wagtail/admin/templates/wagtailadmin/notifications/submitted.txt
index 647ddbdd55..0ede6d527d 100644
--- a/wagtail/admin/templates/wagtailadmin/notifications/submitted.txt
+++ b/wagtail/admin/templates/wagtailadmin/notifications/submitted.txt
@@ -1,8 +1,8 @@
{% extends 'wagtailadmin/notifications/base.txt' %}
-{% load i18n %}
+{% load wagtailadmin_tags i18n %}
{% block content %}
-{% blocktrans with page=revision.page|safe editor=revision.user.get_full_name|default:revision.user.get_username %}The page "{{ page }}" has been submitted for moderation by {{ editor }}.{% endblocktrans %}
+{% blocktrans with page=revision.page|safe editor=revision.user|user_display_name %}The page "{{ page }}" has been submitted for moderation by {{ editor }}.{% endblocktrans %}
{% if revision.page.is_previewable %}{% trans "You can preview the page here:" %} {{ settings.BASE_URL }}{% url 'wagtailadmin_pages:preview_for_moderation' revision.id %}{% endif %}
{% trans "You can edit the page here:" %} {{ settings.BASE_URL }}{% url 'wagtailadmin_pages:edit' revision.page.id %}
diff --git a/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_rejected.html b/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_rejected.html
index d796b30899..61db962fe6 100644
--- a/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_rejected.html
+++ b/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_rejected.html
@@ -1,9 +1,9 @@
{% extends 'wagtailadmin/notifications/base.html' %}
-{% load i18n %}
+{% load wagtailadmin_tags i18n %}
{% block content %}
{% if task_state.finished_by %}
-
{% blocktrans with title=page.get_admin_display_title workflow=workflow.name task=task.name rejector=task_state.finished_by.get_full_name|default:task_state.finished_by.get_username %}The page "{{ title }}" has been rejected during "{{ task }}" in workflow "{{ workflow }}" by {{ rejector }}.{% endblocktrans %}
+ {% blocktrans with title=page.get_admin_display_title workflow=workflow.name task=task.name rejector=task_state.finished_by|user_display_name %}The page "{{ title }}" has been rejected during "{{ task }}" in workflow "{{ workflow }}" by {{ rejector }}.{% endblocktrans %}
{% else %}
{% blocktrans with title=page.get_admin_display_title workflow=workflow.name task=task.name %}The page "{{ title }}" has been rejected during "{{ task }}" in workflow "{{ workflow }}".{% endblocktrans %}
{% endif %}
diff --git a/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_rejected.txt b/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_rejected.txt
index fd2a4b542a..037dfaa80f 100644
--- a/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_rejected.txt
+++ b/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_rejected.txt
@@ -1,9 +1,9 @@
{% extends 'wagtailadmin/notifications/base.txt' %}
-{% load i18n %}
+{% load wagtailadmin_tags i18n %}
{% block content %}
{% if task_state.finished_by %}
- {% blocktrans with title=page.get_admin_display_title|safe workflow=workflow.name|safe task=task.name|safe rejector=task_state.finished_by.get_full_name|default:task_state.finished_by.get_username %}The page "{{ title }}" has been rejected during "{{ task }}" in workflow "{{ workflow }}" by {{ rejector }}.{% endblocktrans %}
+ {% blocktrans with title=page.get_admin_display_title|safe workflow=workflow.name|safe task=task.name|safe rejector=task_state.finished_by|user_display_name %}The page "{{ title }}" has been rejected during "{{ task }}" in workflow "{{ workflow }}" by {{ rejector }}.{% endblocktrans %}
{% else %}
{% blocktrans with title=page.get_admin_display_title|safe workflow=workflow.name|safe task=task.name|safe %}The page "{{ title }}" has been rejected during "{{ task }}" in workflow "{{ workflow }}".{% endblocktrans %}
{% endif %}
diff --git a/wagtail/admin/templates/wagtailadmin/pages/history.html b/wagtail/admin/templates/wagtailadmin/pages/history.html
index aecdd16c52..8c3d9088b4 100644
--- a/wagtail/admin/templates/wagtailadmin/pages/history.html
+++ b/wagtail/admin/templates/wagtailadmin/pages/history.html
@@ -44,7 +44,7 @@
{% endif %}
- {% include "wagtailadmin/shared/user_avatar.html" with user=entry.user username=entry.username %}
+ {% include "wagtailadmin/shared/user_avatar.html" with user=entry.user username=entry.user_display_name %}
|
{% blocktrans with time_period=entry.timestamp|timesince %}{{ time_period }} ago{% endblocktrans %}
diff --git a/wagtail/admin/templates/wagtailadmin/pages/workflow_history/detail.html b/wagtail/admin/templates/wagtailadmin/pages/workflow_history/detail.html
index eca07eac4f..28e53b6a66 100644
--- a/wagtail/admin/templates/wagtailadmin/pages/workflow_history/detail.html
+++ b/wagtail/admin/templates/wagtailadmin/pages/workflow_history/detail.html
@@ -17,7 +17,7 @@
{% icon "clipboard-list" class_name="initial" %} {{ workflow_state.workflow.name }}
- {% blocktrans with modified_by=workflow_state.requested_by.get_full_name|default:workflow_state.requested_by.get_username %}Requested by {{ modified_by }}{% endblocktrans %}
+ {% blocktrans with modified_by=workflow_state.requested_by|user_display_name %}Requested by {{ modified_by }}{% endblocktrans %}
@@ -57,7 +57,7 @@
{% if not forloop.first %}
{% trans "Page edited" as action %}
{% if revision.user %}
- {% blocktrans with ''|add:action|add:'' as action and revision.user.get_full_name|default:revision.user.get_username as who and revision.created_at as at %}
+ {% blocktrans with ''|add:action|add:'' as action and revision.user|user_display_name as who and revision.created_at as at %}
{{ action }} by {{ who }} at {{ at }}
{% endblocktrans %}
{% else %}
@@ -72,7 +72,7 @@
|
{% if task_state.status == 'approved' or task_state.status == 'rejected' %}
{% if task_state.finished_by %}
- {% blocktrans with action=' '|add:task_state.get_status_display|add:' '|safe who=task_state.finished_by.get_full_name|default:task_state.finished_by.get_username at=task_state.finished_at %}
+ {% blocktrans with action=''|add:task_state.get_status_display|add:' '|safe who=task_state.finished_by|user_display_name at=task_state.finished_at %}
{{ action }} by {{ who }} at {{ at }}
{% endblocktrans %}
{% else %}
@@ -113,7 +113,7 @@
{% elif timeline_item.action == 'page_edited' %}
{% trans "Page edited" as action %}
{% if revision.user %}
- {% blocktrans with ''|add:action|add:'' as action and timeline_item.revision.user.get_full_name|default:timeline_item.revision.user.get_username as who %}
+ {% blocktrans with ''|add:action|add:'' as action and timeline_item.revision.user|user_display_name as who %}
{{ action }} by {{ who }}
{% endblocktrans %}
{% else %}
@@ -123,7 +123,7 @@
{{ timeline_item.task_state.task }}
{% if timeline_item.task_state.finished_by %}
- {% blocktrans with action=''|add:timeline_item.task_state.get_status_display|add:' '|safe who=timeline_item.task_state.finished_by.get_full_name|default:timeline_item.task_state.finished_by.get_username %}
+ {% blocktrans with action=''|add:timeline_item.task_state.get_status_display|add:' '|safe who=timeline_item.task_state.finished_by|user_display_name %}
{{ action }} by {{ who }}
{% endblocktrans %}
{% else %}
diff --git a/wagtail/admin/templates/wagtailadmin/pages/workflow_history/list.html b/wagtail/admin/templates/wagtailadmin/pages/workflow_history/list.html
index cd1fa7d698..a19f88b8b8 100644
--- a/wagtail/admin/templates/wagtailadmin/pages/workflow_history/list.html
+++ b/wagtail/admin/templates/wagtailadmin/pages/workflow_history/list.html
@@ -42,7 +42,7 @@
{% endfor %}
|
- {{ workflow_state.requested_by.get_full_name|default:workflow_state.requested_by.get_username }} |
+ {{ workflow_state.requested_by|user_display_name }} |
{% blocktrans with time_period=workflow_state.created_at|timesince %}{{ time_period }} ago{% endblocktrans %}
diff --git a/wagtail/admin/templates/wagtailadmin/reports/site_history.html b/wagtail/admin/templates/wagtailadmin/reports/site_history.html
index 2f00dfb60b..5f0297209a 100644
--- a/wagtail/admin/templates/wagtailadmin/reports/site_history.html
+++ b/wagtail/admin/templates/wagtailadmin/reports/site_history.html
@@ -39,7 +39,7 @@
{{ entry|format_action_log_message }}
|
- {% include "wagtailadmin/shared/user_avatar.html" with user=entry.user username=entry.username %}
+ {% include "wagtailadmin/shared/user_avatar.html" with user=entry.user username=entry.user_display_name %}
|
{% blocktrans with time_period=entry.timestamp|timesince %}{{ time_period }} ago{% endblocktrans %}
diff --git a/wagtail/admin/templates/wagtailadmin/reports/workflow.html b/wagtail/admin/templates/wagtailadmin/reports/workflow.html
index 6b4868d454..f0c160f38a 100644
--- a/wagtail/admin/templates/wagtailadmin/reports/workflow.html
+++ b/wagtail/admin/templates/wagtailadmin/reports/workflow.html
@@ -64,7 +64,7 @@
{% endfor %}
|
- {{ workflow_state.requested_by.get_full_name|default:workflow_state.requested_by.get_username }} |
+ {{ workflow_state.requested_by|user_display_name }} |
{{ workflow_state.created_at }} |
{% endfor %}
diff --git a/wagtail/admin/templates/wagtailadmin/shared/workflow_status.html b/wagtail/admin/templates/wagtailadmin/shared/workflow_status.html
index 5487938826..3b52ec2cc7 100644
--- a/wagtail/admin/templates/wagtailadmin/shared/workflow_status.html
+++ b/wagtail/admin/templates/wagtailadmin/shared/workflow_status.html
@@ -24,7 +24,7 @@
{% with latest_revision=page.get_latest_revision %}
{% if latest_revision %}
{% if latest_revision.user %}
-
+
{% endif %}
{% if latest_revision == page.live_revision %}
{% trans "Published" %}
diff --git a/wagtail/admin/templates/wagtailadmin/workflows/workflow_status.html b/wagtail/admin/templates/wagtailadmin/workflows/workflow_status.html
index 5e202b1ee4..8786239749 100644
--- a/wagtail/admin/templates/wagtailadmin/workflows/workflow_status.html
+++ b/wagtail/admin/templates/wagtailadmin/workflows/workflow_status.html
@@ -9,7 +9,7 @@
Submitted to {{ workflow_name }} at {{ started_at }}
{% endblocktrans %}
{% if workflow_state.requested_by %}
- {% blocktrans with modified_by=workflow_state.requested_by.get_full_name|default:workflow_state.requested_by.get_username %}by {{ modified_by }}{% endblocktrans %}
+ {% blocktrans with modified_by=workflow_state.requested_by|user_display_name %}by {{ modified_by }}{% endblocktrans %}
{% endif %}
@@ -24,7 +24,7 @@
{% icon name="warning" class_name="default" %}{{ task.name }}
{% if task.task_state.finished_by %}
- {% blocktrans trimmed with requested_by=task.task_state.finished_by.get_full_name|default:task.task_state.finished_by.get_username %}
+ {% blocktrans trimmed with requested_by=task.task_state.finished_by|user_display_name %}
Changes requested by {{ requested_by }}
{% endblocktrans %}
{% else %}
@@ -33,7 +33,7 @@
{% else %}
{% icon name="success" class_name="default" %}{{ task.name }}
{% if task.task_state.finished_by %}
- {% blocktrans trimmed with approved_by=task.task_state.finished_by.get_full_name|default:task.task_state.finished_by.get_username %}
+ {% blocktrans trimmed with approved_by=task.task_state.finished_by|user_display_name %}
Approved by {{ approved_by }}
{% endblocktrans %}
{% endif %}
diff --git a/wagtail/admin/templatetags/wagtailadmin_tags.py b/wagtail/admin/templatetags/wagtailadmin_tags.py
index fd28abfd6f..5c20634df6 100644
--- a/wagtail/admin/templatetags/wagtailadmin_tags.py
+++ b/wagtail/admin/templatetags/wagtailadmin_tags.py
@@ -628,3 +628,24 @@ def minimum_collection_depth(collections: QuerySet) -> int:
use {% format_collection collection min_depth %}.
"""
return collections.aggregate(Min('depth'))['depth__min'] or 2
+
+
+@register.filter
+def user_display_name(user):
+ """
+ Returns the preferred display name for the given user object: the result of
+ user.get_full_name() if implemented and non-empty, or user.get_username() otherwise.
+ """
+ try:
+ full_name = user.get_full_name().strip()
+ if full_name:
+ return full_name
+ except AttributeError:
+ pass
+
+ try:
+ return user.get_username()
+ except AttributeError:
+ # we were passed None or something else that isn't a valid user object; return
+ # empty string to replicate the behaviour of {{ user.get_full_name|default:user.get_username }}
+ return ''
diff --git a/wagtail/core/models.py b/wagtail/core/models.py
index a66759d5fa..ee0ac47d57 100644
--- a/wagtail/core/models.py
+++ b/wagtail/core/models.py
@@ -4151,16 +4151,25 @@ class BaseLogEntry(models.Model):
)
@cached_property
- def username(self):
+ def user_display_name(self):
"""
- Returns the associated username. Defaults to 'system' when none is provided
+ Returns the display name of the associated user;
+ get_full_name if available and non-empty, otherwise get_username.
+ Defaults to 'system' when none is provided
"""
if self.user_id:
try:
- return self.user.get_username()
+ user = self.user
except self._meta.get_field('user').related_model.DoesNotExist:
# User has been deleted
return _('user %(id)d (deleted)') % {'id': self.user_id}
+
+ try:
+ full_name = user.get_full_name().strip()
+ except AttributeError:
+ full_name = ''
+ return full_name or user.get_username()
+
else:
return _('system')
diff --git a/wagtail/users/templates/wagtailusers/users/list.html b/wagtail/users/templates/wagtailusers/users/list.html
index 94944193e9..35091ff31d 100644
--- a/wagtail/users/templates/wagtailusers/users/list.html
+++ b/wagtail/users/templates/wagtailusers/users/list.html
@@ -35,7 +35,7 @@
{% user_listing_buttons user %}
|