diff --git a/frappe/core/doctype/version/version.py b/frappe/core/doctype/version/version.py index 4b8f9d854b..1b6914feb9 100644 --- a/frappe/core/doctype/version/version.py +++ b/frappe/core/doctype/version/version.py @@ -30,10 +30,18 @@ class Version(Document): else: return self.set_diff(old, new) + @staticmethod + def set_impersonator(data): + if not frappe.session: + return + if impersonator := frappe.session.data.get("impersonated_by"): + data["impersonated_by"] = impersonator + def set_diff(self, old: Document, new: Document) -> bool: """Set the data property with the diff of the docs if present""" diff = get_diff(old, new) if diff: + self.set_impersonator(diff) self.ref_doctype = new.doctype self.docname = new.name self.data = frappe.as_json(diff, indent=None, separators=(",", ":")) @@ -51,6 +59,7 @@ class Version(Document): "updater_reference": updater_reference, "created_by": doc.owner, } + self.set_impersonator(data) self.ref_doctype = doc.doctype self.docname = doc.name self.data = frappe.as_json(data, indent=None, separators=(",", ":")) diff --git a/frappe/public/js/frappe/form/footer/version_timeline_content_builder.js b/frappe/public/js/frappe/form/footer/version_timeline_content_builder.js index 2072273b86..3302e4d250 100644 --- a/frappe/public/js/frappe/form/footer/version_timeline_content_builder.js +++ b/frappe/public/js/frappe/form/footer/version_timeline_content_builder.js @@ -227,7 +227,12 @@ function get_version_timeline_content(version_doc, frm) { } } }); + const impersonated_by = data.impersonated_by; + if (impersonated_by) { + const impersonated_msg = __("Impersonated by {0}", [get_user_link(impersonated_by)]); + out = out.map((message) => `${message} ยท ${impersonated_msg.bold()}`); + } return out; } diff --git a/frappe/public/js/frappe/ui/toolbar/navbar.html b/frappe/public/js/frappe/ui/toolbar/navbar.html index c717fb22c2..db478939b8 100644 --- a/frappe/public/js/frappe/ui/toolbar/navbar.html +++ b/frappe/public/js/frappe/ui/toolbar/navbar.html @@ -16,6 +16,11 @@ {%= __("Read Only Mode") %} {% } %} + {% if (frappe.boot.user.impersonated_by) { %} + + {%= __("Impersonating {0}", [frappe.boot.user.name]) %} + + {% } %}