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.get_full_name|default:user.get_username }} + {{ user|user_display_name }}