From edd9bf2cb35114b9ef73997f4a620372b0547e41 Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Mon, 10 Nov 2025 17:45:55 +0530 Subject: [PATCH 01/11] fix: standardize sidebar icon sizes to prevent layout shift on expand/collapse - Set consistent icon size (14px/1.28571429em) across all sidebar states - Fixed row height to 41px for both collapsed and expanded states - Used flexbox alignment to maintain icon position - Prevent icon size changes between minimized, hover, and mobile states - Removed font-size inherit which caused icon scaling issues #1215 --- .../static/pretixcontrol/scss/_sidebar.scss | 198 ++++++++++-------- 1 file changed, 116 insertions(+), 82 deletions(-) diff --git a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss index bbb212c8c7..df47cc918a 100644 --- a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss +++ b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss @@ -12,7 +12,8 @@ padding-right: 0; z-index: 1; - &:hover, &:focus { + &:hover, + &:focus { background-color: transparent !important; color: rgba(255, 255, 255, 0.8); outline: none; @@ -27,7 +28,7 @@ } } -.navbar-header > .navbar-toggle[data-toggle="collapse"] { +.navbar-header>.navbar-toggle[data-toggle="collapse"] { display: none !important; } @@ -36,50 +37,50 @@ body.sidebar-minimized { width: 45px; overflow: hidden; - .nav > li > a { - display: flex; - align-items: center; - justify-content: center; - font-size: 0; - padding: 12px 0; - text-align: center; - width: 100%; - height: 45px; - box-sizing: border-box; - - span { - display: none; - } + .nav>li { + height: 41px; - .fa, svg { - font-size: 1.5rem; - margin: 0; - padding: 0; + >a { display: flex; align-items: center; justify-content: center; + font-size: 0; + padding: 10px 0; text-align: center; width: 100%; - height: 100%; - position: relative; - left: 0; - } + height: 41px; + box-sizing: border-box; - .fa.fa-fw { - width: 100%; - text-align: center; - margin: 0; - display: flex; - align-items: center; - justify-content: center; - } + span { + display: none; + } - &::after, &::before { - display: none; + .fa, + svg { + font-size: 14px; + margin: 0; + padding: 0; + display: inline-block; + width: 1.28571429em; + text-align: center; + line-height: 1; + position: static; + } + + .fa.fa-fw { + width: 1.28571429em; + text-align: center; + margin: 0; + } + + &::after, + &::before { + display: none; + } } } - .nav > li > a.arrow { + .nav>li>a.arrow { display: none; } @@ -89,7 +90,7 @@ body.sidebar-minimized { .context-selector .context-indicator .context-name, .context-selector .context-indicator .context-meta { - display: none; + display: none; } // Style the context-selector dropdown-toggle to match expanded state alignment @@ -152,17 +153,40 @@ body.sidebar-minimized { z-index: 12; transform: translateX(-100%); overflow-y: auto; - box-shadow: 2px 0 5px rgba(0,0,0,0.2); + box-shadow: 2px 0 5px rgba(0, 0, 0, 0.2); transition: transform 0.3s ease; height: calc(100vh - var(--navbar-height, 50px)); - .nav > li > a { - display: block; - font-size: inherit; - padding: 10px 15px; + .nav>li { + height: 41px; + + >a { + display: flex; + align-items: center; + font-size: 14px; + padding: 10px 15px; + height: 41px; + + span { + display: inline; + } + + .fa, + svg { + font-size: 14px; + margin: 0; + margin-right: 10px; + display: inline-block; + width: 1.28571429em; + text-align: center; + line-height: 1; + flex-shrink: 0; + } - span { - display: inline; + .fa.fa-fw { + width: 1.28571429em; + text-align: center; + } } } @@ -198,41 +222,50 @@ body.sidebar-minimized { overflow-y: auto; overflow-x: visible; - .nav > li > a { - display: block; - align-items: normal; - justify-content: normal; - font-size: inherit; - padding: 10px 15px; - text-align: left; - width: auto; - - span { - display: inline; - } + .nav>li { + height: 41px; - .fa, svg { - font-size: inherit; - margin: 0; - padding: 0; - display: inline; - text-align: inherit; + >a { + display: flex; + align-items: center; + justify-content: flex-start; + font-size: 14px; + padding: 10px 15px; + text-align: left; width: auto; - position: static; - left: auto; - } + height: 41px; - .fa.fa-fw { - width: 1.25em; - text-align: center; - } + span { + display: inline; + } - &::after, &::before { - display: block; + .fa, + svg { + font-size: 14px; + margin: 0; + margin-right: 10px; + padding: 0; + display: inline-block; + text-align: center; + width: 1.28571429em; + position: static; + line-height: 1; + flex-shrink: 0; + } + + .fa.fa-fw { + width: 1.28571429em; + text-align: center; + } + + &::after, + &::before { + display: block; + } } } - .nav > li > a.arrow { + .nav>li>a.arrow { display: block; position: absolute; right: 0; @@ -249,11 +282,11 @@ body.sidebar-minimized { } } - .nav > li.active > a > .fa.arrow:before { + .nav>li.active>a>.fa.arrow:before { content: "\f107"; } - .nav > li > a.has-children { + .nav>li>a.has-children { margin-right: 40px; } @@ -305,7 +338,7 @@ body.sidebar-minimized { } li.active { - > ul.nav-second-level { + >ul.nav-second-level { display: block; } } @@ -329,12 +362,13 @@ body.sidebar-minimized { height: 2.5em; line-height: 2.5em; } - + .context-icon .fa-circle { font-size: 2em; } - - .context-icon .fa-dashboard, .context-icon .fa-group { + + .context-icon .fa-dashboard, + .context-icon .fa-group { font-size: 1em; visibility: visible; opacity: 1; @@ -349,7 +383,7 @@ body.sidebar-minimized { padding-right: 2px; line-height: 15px; vertical-align: middle; - + span { display: block; width: 170px; @@ -357,14 +391,14 @@ body.sidebar-minimized { white-space: nowrap; overflow: hidden; } - + span.context-name { font-weight: bold; vertical-align: middle; font-size: 15px; display: block; } - + span.context-meta { opacity: 0.7; font-size: 11px; @@ -373,7 +407,7 @@ body.sidebar-minimized { } } } - + body.sidebar-minimized:has(.sidebar:hover) #page-wrapper { margin-left: 250px; } @@ -381,4 +415,4 @@ body.sidebar-minimized { body.sidebar-minimized .sidebar { min-height: 100vh; -} +} \ No newline at end of file From 49d668ac1c60a31cf58b7d73e39048650cdff623 Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Tue, 11 Nov 2025 21:21:47 +0530 Subject: [PATCH 02/11] WIP: sidebar icon text hiding - template changes not rendering - Added sidebar-text span wrappers to navigation labels in both templates - Updated CSS to hide .sidebar-text when sidebar is minimized - CSS compiles correctly but template changes not reflecting in browser - Issue: Django template caching preventing changes from appearing Status: Work in progress - debugging template rendering issue --- .../control/templates/pretixcontrol/base.html | 4 +- .../templates/eventyay_common/base.html | 4 +- .../static/pretixcontrol/scss/_sidebar.scss | 61 +++++-------------- 3 files changed, 19 insertions(+), 50 deletions(-) diff --git a/app/eventyay/control/templates/pretixcontrol/base.html b/app/eventyay/control/templates/pretixcontrol/base.html index fc9e9cda69..f3d577250c 100644 --- a/app/eventyay/control/templates/pretixcontrol/base.html +++ b/app/eventyay/control/templates/pretixcontrol/base.html @@ -289,7 +289,7 @@ {% endif %} {% endif %} - {{ nav.label }} + {{ nav.label }} {% if nav.children %} @@ -301,7 +301,7 @@ - {{ item.label }} + {{ item.label }} {% endfor %} diff --git a/app/eventyay/eventyay_common/templates/eventyay_common/base.html b/app/eventyay/eventyay_common/templates/eventyay_common/base.html index 9924c923c7..e3c273ccdf 100644 --- a/app/eventyay/eventyay_common/templates/eventyay_common/base.html +++ b/app/eventyay/eventyay_common/templates/eventyay_common/base.html @@ -228,7 +228,7 @@ {% endif %} {% endif %} - {{ nav.label }} + {{ nav.label }} {% if nav.children %} @@ -240,7 +240,7 @@ - {{ item.label }} + {{ item.label }} {% endfor %} diff --git a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss index df47cc918a..b51e5869c7 100644 --- a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss +++ b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss @@ -38,39 +38,26 @@ body.sidebar-minimized { overflow: hidden; .nav>li { - height: 41px; - >a { display: flex; align-items: center; justify-content: center; - font-size: 0; padding: 10px 0; - text-align: center; - width: 100%; - height: 41px; - box-sizing: border-box; - - span { - display: none; - } + overflow: hidden; + white-space: nowrap; .fa, svg { + margin-right: 0; font-size: 14px; - margin: 0; - padding: 0; - display: inline-block; - width: 1.28571429em; - text-align: center; - line-height: 1; - position: static; + flex-shrink: 0; } - .fa.fa-fw { - width: 1.28571429em; - text-align: center; - margin: 0; + // Hide all text spans + .fa+.sidebar-text, + svg+.sidebar-text, + .sidebar-text { + display: none !important; } &::after, @@ -223,39 +210,21 @@ body.sidebar-minimized { overflow-x: visible; .nav>li { - height: 41px; - >a { - display: flex; - align-items: center; justify-content: flex-start; - font-size: 14px; padding: 10px 15px; - text-align: left; - width: auto; - height: 41px; + overflow: visible; - span { - display: inline; + // Show text spans when hovering + .fa+.sidebar-text, + svg+.sidebar-text, + .sidebar-text { + display: inline !important; } .fa, svg { - font-size: 14px; - margin: 0; margin-right: 10px; - padding: 0; - display: inline-block; - text-align: center; - width: 1.28571429em; - position: static; - line-height: 1; - flex-shrink: 0; - } - - .fa.fa-fw { - width: 1.28571429em; - text-align: center; } &::after, From 7ecbbc0996e9051db4a5d77dd50fcd78c15495eb Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Mon, 17 Nov 2025 02:49:00 +0530 Subject: [PATCH 03/11] fix: prevent sidebar icon layout shift on expand/collapse - Standardize icon sizes to 14px in both collapsed and expanded states - Wrap menu labels in .sidebar-text spans for proper visibility control - Use display:none for text hiding instead of font-size manipulation - Maintain consistent padding and alignment in all sidebar states - Match stable behavior from Talk component sidebar --- .../static/pretixcontrol/scss/_sidebar.scss | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss index b51e5869c7..20e615f628 100644 --- a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss +++ b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss @@ -38,22 +38,30 @@ body.sidebar-minimized { overflow: hidden; .nav>li { + height: 41px; + >a { - display: flex; - align-items: center; - justify-content: center; - padding: 10px 0; - overflow: hidden; - white-space: nowrap; + display: block; + padding: 10px 15px; + font-size: 14px; + height: 41px; + line-height: 21px; .fa, svg { - margin-right: 0; + margin-right: 5px; font-size: 14px; + width: 1.28571429em; + text-align: center; + display: inline-block; flex-shrink: 0; } - // Hide all text spans + .fa.fa-fw { + width: 1.28571429em; + } + + // Hide all text spans in minimized state .fa+.sidebar-text, svg+.sidebar-text, .sidebar-text { From d13c6c72bc11297f28d5f348d3d66955cd35181b Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Mon, 17 Nov 2025 02:52:44 +0530 Subject: [PATCH 04/11] fix: hide TEST MODE text when sidebar is minimized Wrap TEST MODE label in sidebar-text span to ensure it hides properly when sidebar is collapsed, maintaining consistent behavior with other menu items. --- app/eventyay/control/templates/pretixcontrol/base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/eventyay/control/templates/pretixcontrol/base.html b/app/eventyay/control/templates/pretixcontrol/base.html index f3d577250c..9f69ab6f5d 100644 --- a/app/eventyay/control/templates/pretixcontrol/base.html +++ b/app/eventyay/control/templates/pretixcontrol/base.html @@ -272,7 +272,7 @@
  • - {% trans "TEST MODE" %} + {% trans "TEST MODE" %}
  • {% endif %} From 083da0ebe80e0665217abdeaf547ab3d4dd0d0e5 Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Mon, 17 Nov 2025 10:49:14 +0530 Subject: [PATCH 05/11] fix: simplify sidebar hover behavior to match Talk component - Remove complex flex layouts, transitions, and positioning - Use simple display:none/inline pattern like Talk component - Remove fixed heights and line-heights causing layout shifts - Keep consistent 10px 15px padding in all states - Icon sizes remain stable at 14px - Clean hover expansion without visual glitches --- .../static/pretixcontrol/scss/_sidebar.scss | 36 +++---------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss index 20e615f628..d3e1b15210 100644 --- a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss +++ b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss @@ -38,38 +38,19 @@ body.sidebar-minimized { overflow: hidden; .nav>li { - height: 41px; - >a { - display: block; padding: 10px 15px; - font-size: 14px; - height: 41px; - line-height: 21px; .fa, svg { margin-right: 5px; - font-size: 14px; - width: 1.28571429em; - text-align: center; - display: inline-block; - flex-shrink: 0; - } - - .fa.fa-fw { - width: 1.28571429em; } - // Hide all text spans in minimized state + // Hide all text spans in minimized state - simple Talk approach .fa+.sidebar-text, svg+.sidebar-text, + i+.sidebar-text, .sidebar-text { - display: none !important; - } - - &::after, - &::before { display: none; } } @@ -219,25 +200,18 @@ body.sidebar-minimized { .nav>li { >a { - justify-content: flex-start; padding: 10px 15px; - overflow: visible; - // Show text spans when hovering + // Show text spans when hovering - simple Talk approach .fa+.sidebar-text, svg+.sidebar-text, .sidebar-text { - display: inline !important; + display: inline; } .fa, svg { - margin-right: 10px; - } - - &::after, - &::before { - display: block; + margin-right: 5px; } } } From f465aa4730aa5774a420c91ece26b24097e2b444 Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Mon, 17 Nov 2025 11:05:50 +0530 Subject: [PATCH 06/11] just text adjustment now --- .../static/pretixcontrol/scss/_sidebar.scss | 78 ++++--------------- 1 file changed, 17 insertions(+), 61 deletions(-) diff --git a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss index d3e1b15210..7cb2886101 100644 --- a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss +++ b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss @@ -46,11 +46,7 @@ body.sidebar-minimized { margin-right: 5px; } - // Hide all text spans in minimized state - simple Talk approach - .fa+.sidebar-text, - svg+.sidebar-text, - i+.sidebar-text, - .sidebar-text { + i + .sidebar-text { display: none; } } @@ -64,42 +60,21 @@ body.sidebar-minimized { display: none; } - .context-selector .context-indicator .context-name, - .context-selector .context-indicator .context-meta { - display: none; - } - - // Style the context-selector dropdown-toggle to match expanded state alignment .context-selector { .dropdown-toggle { - padding: 10px 0; + padding: 8px 0 8px 4px; display: flex; align-items: center; - justify-content: center; text-decoration: none; position: relative; - width: 100%; span.caret { display: none; } .context-icon { - width: 2.5em; - height: 2.5em; - line-height: 2.5em; - margin: 0; - } - - .context-icon .fa-circle { - font-size: 2em; - } - - .context-icon .fa-dashboard, - .context-icon .fa-group { - font-size: 1em; - visibility: visible; - opacity: 1; + min-width: 38px; + flex-shrink: 0; } .context-indicator { @@ -130,7 +105,6 @@ body.sidebar-minimized { transform: translateX(-100%); overflow-y: auto; box-shadow: 2px 0 5px rgba(0, 0, 0, 0.2); - transition: transform 0.3s ease; height: calc(100vh - var(--navbar-height, 50px)); .nav>li { @@ -202,11 +176,8 @@ body.sidebar-minimized { >a { padding: 10px 15px; - // Show text spans when hovering - simple Talk approach - .fa+.sidebar-text, - svg+.sidebar-text, - .sidebar-text { - display: inline; + i + .sidebar-text { + display: inline-block; } .fa, @@ -296,8 +267,10 @@ body.sidebar-minimized { .context-selector { .dropdown-toggle { - padding: 10px 20px 9px 7px; - display: block; + padding: 8px 0 8px 4px; + display: flex; + flex-direction: row; + align-items: center; text-decoration: none; position: relative; @@ -309,35 +282,21 @@ body.sidebar-minimized { } .context-icon { - width: 2.5em; - height: 2.5em; - line-height: 2.5em; - } - - .context-icon .fa-circle { - font-size: 2em; - } - - .context-icon .fa-dashboard, - .context-icon .fa-group { - font-size: 1em; - visibility: visible; - opacity: 1; + min-width: 38px; + flex-shrink: 0; } } border-bottom: 2px solid darken($gray-lightest, 6.5%); .context-indicator { - display: inline-block; - padding-left: 5px; - padding-right: 2px; - line-height: 15px; - vertical-align: middle; + display: flex; + flex-direction: column; + flex-grow: 1; + overflow: hidden; + margin-left: 6px; span { - display: block; - width: 170px; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; @@ -345,15 +304,12 @@ body.sidebar-minimized { span.context-name { font-weight: bold; - vertical-align: middle; font-size: 15px; - display: block; } span.context-meta { opacity: 0.7; font-size: 11px; - display: block; } } } From 2b822ddc309d6b7d9842f44be828343529245f7f Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Mon, 17 Nov 2025 11:10:25 +0530 Subject: [PATCH 07/11] done --- app/eventyay/static/pretixcontrol/scss/_sidebar.scss | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss index 7cb2886101..db831c0eee 100644 --- a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss +++ b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss @@ -36,6 +36,7 @@ body.sidebar-minimized { .sidebar { width: 45px; overflow: hidden; + transition: none; .nav>li { >a { @@ -46,7 +47,7 @@ body.sidebar-minimized { margin-right: 5px; } - i + .sidebar-text { + .sidebar-text { display: none; } } @@ -171,12 +172,13 @@ body.sidebar-minimized { width: 250px; overflow-y: auto; overflow-x: visible; + transition: none; .nav>li { >a { padding: 10px 15px; - i + .sidebar-text { + .sidebar-text { display: inline-block; } From 9bb8c5408a59cae70969174c21a14a40dee34f12 Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Mon, 17 Nov 2025 15:08:21 +0530 Subject: [PATCH 08/11] when fully expanded also using 3 lines show same now --- .../static/pretixcontrol/scss/_sidebar.scss | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss index db831c0eee..d41cbb7c46 100644 --- a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss +++ b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss @@ -90,6 +90,59 @@ body.sidebar-minimized { } } +// When sidebar is fully expanded (not minimized) on desktop +body:not(.sidebar-minimized) .sidebar { + width: 250px; + + .nav>li>a { + .sidebar-text { + display: inline-block; + } + } + + .context-selector { + .dropdown-toggle { + padding: 8px 0 8px 4px; + display: flex; + flex-direction: row; + align-items: center; + + .context-icon { + min-width: 38px; + flex-shrink: 0; + } + } + + .context-indicator { + display: flex; + flex-direction: column; + flex-grow: 1; + overflow: hidden; + margin-left: 6px; + + span { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + + span.context-name { + font-weight: bold; + font-size: 15px; + } + + span.context-meta { + opacity: 0.7; + font-size: 11px; + } + } + } +} + +body:not(.sidebar-minimized) #page-wrapper { + margin-left: 250px; +} + @media (max-width: 767px) { .navbar-toggle-sidebar { display: block; @@ -151,6 +204,17 @@ body.sidebar-minimized { body:not(.sidebar-minimized) .sidebar { transform: translateX(0%); + width: 250px; + + .nav>li>a { + .sidebar-text { + display: inline-block; + } + } + + .context-selector .context-indicator { + display: flex; + } } body.sidebar-minimized .sidebar { From cd3207fc76f9dc79026634eec9de60953b211024 Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Mon, 17 Nov 2025 15:26:42 +0530 Subject: [PATCH 09/11] Fix sidebar 3 line expansion same width --- app/eventyay/base/models/information.py | 2 +- app/eventyay/control/logdisplay.py | 260 ++++++++++++++---- .../static/pretixbase/scss/_theme.scss | 1 + 3 files changed, 211 insertions(+), 52 deletions(-) diff --git a/app/eventyay/base/models/information.py b/app/eventyay/base/models/information.py index d065457673..67f0cf873b 100644 --- a/app/eventyay/base/models/information.py +++ b/app/eventyay/base/models/information.py @@ -52,7 +52,7 @@ class SpeakerInformation(PretalxModel): upload_to=resource_path, ) - log_prefix = 'speaker_information' + log_prefix = 'eventyay.speaker_information' @property def log_parent(self): diff --git a/app/eventyay/control/logdisplay.py b/app/eventyay/control/logdisplay.py index 299f7fc96a..2f13812b80 100644 --- a/app/eventyay/control/logdisplay.py +++ b/app/eventyay/control/logdisplay.py @@ -29,11 +29,11 @@ OVERVIEW_BANLIST = ['eventyay.plugins.sendmail.order.email.sent'] -def _display_order_changed(event: Event, logentry: LogEntry): +def _display_order_changed(event: Event, logentry: LogEntry, action_type: str): data = json.loads(logentry.data) text = _('The order has been changed:') - if logentry.action_type == 'eventyay.event.order.changed.product': + if action_type == 'eventyay.event.order.changed.product': old_product = str(event.products.get(pk=data['old_product'])) if data['old_variation']: old_product += ' - ' + str(ProductVariation.objects.get(product__event=event, pk=data['old_variation'])) @@ -51,7 +51,7 @@ def _display_order_changed(event: Event, logentry: LogEntry): new_price=money_filter(Decimal(data['new_price']), event.currency), ) ) - elif logentry.action_type == 'eventyay.event.order.changed.seat': + elif action_type == 'eventyay.event.order.changed.seat': return ( text + ' ' @@ -61,7 +61,7 @@ def _display_order_changed(event: Event, logentry: LogEntry): new_seat=data.get('new_seat'), ) ) - elif logentry.action_type == 'eventyay.event.order.changed.subevent': + elif action_type == 'eventyay.event.order.changed.subevent': old_se = str(event.subevents.get(pk=data['old_subevent'])) new_se = str(event.subevents.get(pk=data['new_subevent'])) return ( @@ -77,7 +77,7 @@ def _display_order_changed(event: Event, logentry: LogEntry): new_price=money_filter(Decimal(data['new_price']), event.currency), ) ) - elif logentry.action_type == 'eventyay.event.order.changed.price': + elif action_type == 'eventyay.event.order.changed.price': return ( text + ' ' @@ -87,7 +87,7 @@ def _display_order_changed(event: Event, logentry: LogEntry): new_price=money_filter(Decimal(data['new_price']), event.currency), ) ) - elif logentry.action_type == 'eventyay.event.order.changed.tax_rule': + elif action_type == 'eventyay.event.order.changed.tax_rule': if 'positionid' in data: return ( text @@ -108,9 +108,9 @@ def _display_order_changed(event: Event, logentry: LogEntry): new_rule=TaxRule.objects.get(pk=data['new_taxrule']), ) ) - elif logentry.action_type == 'eventyay.event.order.changed.addfee': + elif action_type == 'eventyay.event.order.changed.addfee': return text + ' ' + str(_('A fee has been added')) - elif logentry.action_type == 'eventyay.event.order.changed.feevalue': + elif action_type == 'eventyay.event.order.changed.feevalue': return ( text + ' ' @@ -119,7 +119,7 @@ def _display_order_changed(event: Event, logentry: LogEntry): new_price=money_filter(Decimal(data['new_price']), event.currency), ) ) - elif logentry.action_type == 'eventyay.event.order.changed.cancelfee': + elif action_type == 'eventyay.event.order.changed.cancelfee': return ( text + ' ' @@ -127,7 +127,7 @@ def _display_order_changed(event: Event, logentry: LogEntry): old_price=money_filter(Decimal(data['old_price']), event.currency), ) ) - elif logentry.action_type == 'eventyay.event.order.changed.cancel': + elif action_type == 'eventyay.event.order.changed.cancel': old_product = str(event.products.get(pk=data['old_product'])) if data['old_variation']: old_product += ' - ' + str(ProductVariation.objects.get(pk=data['old_variation'])) @@ -140,7 +140,7 @@ def _display_order_changed(event: Event, logentry: LogEntry): old_price=money_filter(Decimal(data['old_price']), event.currency), ) ) - elif logentry.action_type == 'eventyay.event.order.changed.add': + elif action_type == 'eventyay.event.order.changed.add': product = str(event.products.get(pk=data['product'])) if data['variation']: product += ' - ' + str(ProductVariation.objects.get(product__event=event, pk=data['variation'])) @@ -166,7 +166,7 @@ def _display_order_changed(event: Event, logentry: LogEntry): price=money_filter(Decimal(data['price']), event.currency), ) ) - elif logentry.action_type == 'eventyay.event.order.changed.secret': + elif action_type == 'eventyay.event.order.changed.secret': return ( text + ' ' @@ -174,7 +174,7 @@ def _display_order_changed(event: Event, logentry: LogEntry): posid=data.get('positionid', '?'), ) ) - elif logentry.action_type == 'eventyay.event.order.changed.split': + elif action_type == 'eventyay.event.order.changed.split': old_product = str(event.products.get(pk=data['old_product'])) if data['old_variation']: old_product += ' - ' + str(ProductVariation.objects.get(pk=data['old_variation'])) @@ -196,13 +196,13 @@ def _display_order_changed(event: Event, logentry: LogEntry): old_price=money_filter(Decimal(data['old_price']), event.currency), ) ) - elif logentry.action_type == 'eventyay.event.order.changed.split_from': + elif action_type == 'eventyay.event.order.changed.split_from': return _('This order has been created by splitting the order {order}').format( order=data['original_order'], ) -def _display_checkin(event, logentry): +def _display_checkin(event, logentry, action_type: str): data = logentry.parsed_data show_dt = False @@ -220,7 +220,7 @@ def _display_checkin(event, logentry): else: checkin_list = _('(unknown)') - if logentry.action_type == 'eventyay.event.checkin.unknown': + if action_type == 'eventyay.event.checkin.unknown': if show_dt: return _('Unknown scan of code "{barcode}…" at {datetime} for list "{list}", type "{type}".').format( posid=data.get('positionid'), @@ -237,7 +237,7 @@ def _display_checkin(event, logentry): list=checkin_list, ) - if logentry.action_type == 'eventyay.event.checkin.revoked': + if action_type == 'eventyay.event.checkin.revoked': if show_dt: return _( 'Scan scan of revoked code "{barcode}…" at {datetime} for list "{list}", type "{type}", was uploaded.' @@ -256,7 +256,7 @@ def _display_checkin(event, logentry): list=checkin_list, ) - if logentry.action_type == 'eventyay.event.checkin.denied': + if action_type == 'eventyay.event.checkin.denied': if show_dt: return _( 'Denied scan of position #{posid} at {datetime} for list "{list}", type "{type}", ' @@ -312,8 +312,148 @@ def _display_checkin(event, logentry): ) +# Map legacy pretix.* AND pretalx.* action types to eventyay.* for backward compatibility +# This ensures old log entries with legacy prefixes still display correctly +PRETIX_LEGACY_ALIASES = { + # pretix.* (old ticketing system) mappings - comprehensive list from all 47+ changes + 'pretix.event.quota.added': 'eventyay.event.quota.added', + 'pretix.event.quota.changed': 'eventyay.event.quota.changed', + 'pretix.event.quota.deleted': 'eventyay.event.quota.deleted', + 'pretix.event.quota.opened': 'eventyay.event.quota.opened', + 'pretix.event.quota.closed': 'eventyay.event.quota.closed', + 'pretix.subevent.quota.added': 'eventyay.subevent.quota.added', + 'pretix.subevent.quota.changed': 'eventyay.subevent.quota.changed', + 'pretix.subevent.quota.deleted': 'eventyay.subevent.quota.deleted', + 'pretix.event.category.added': 'eventyay.event.category.added', + 'pretix.event.category.deleted': 'eventyay.event.category.deleted', + 'pretix.team.created': 'eventyay.team.created', + 'pretix.team.deleted': 'eventyay.team.deleted', + 'pretix.team.member.added': 'eventyay.team.member.added', + 'pretix.team.member.removed': 'eventyay.team.member.removed', + 'pretix.team.member.joined': 'eventyay.team.member.joined', + 'pretix.team.member.left': 'eventyay.team.member.left', + 'pretix.team.token.created': 'eventyay.team.token.created', + 'pretix.user.settings.changed': 'eventyay.user.settings.changed', + 'pretix.user.settings.2fa.enabled': 'eventyay.user.settings.2fa.enabled', + 'pretix.user.settings.2fa.disabled': 'eventyay.user.settings.2fa.disabled', + 'pretix.user.settings.2fa.device.added': 'eventyay.user.settings.2fa.device.added', + 'pretix.user.settings.2fa.regenemergency': 'eventyay.user.settings.2fa.regenemergency', + 'pretix.user.settings.notifications.enabled': 'eventyay.user.settings.notifications.enabled', + 'pretix.user.settings.notifications.disabled': 'eventyay.user.settings.notifications.disabled', + 'pretix.user.anonymized': 'eventyay.user.anonymized', + 'pretix.control.auth.user.forgot_password.mail_sent': 'eventyay.control.auth.user.forgot_password.mail_sent', + 'pretix.voucher.added': 'eventyay.voucher.added', + 'pretix.voucher.changed': 'eventyay.voucher.changed', + 'pretix.voucher.deleted': 'eventyay.voucher.deleted', + 'pretix.voucher.redeemed': 'eventyay.voucher.redeemed', + 'pretix.event.product.added': 'eventyay.event.product.added', + 'pretix.event.product.changed': 'eventyay.event.product.changed', + 'pretix.event.product.deleted': 'eventyay.event.product.deleted', + 'pretix.event.order.modified': 'eventyay.event.order.modified', + 'pretix.event.order.unpaid': 'eventyay.event.order.unpaid', + 'pretix.event.order.secret.changed': 'eventyay.event.order.secret.changed', + 'pretix.event.order.expirychanged': 'eventyay.event.order.expirychanged', + 'pretix.event.order.expired': 'eventyay.event.order.expired', + 'pretix.event.order.paid': 'eventyay.event.order.paid', + 'pretix.event.order.refunded': 'eventyay.event.order.refunded', + 'pretix.event.order.canceled': 'eventyay.event.order.canceled', + 'pretix.event.order.reactivated': 'eventyay.event.order.reactivated', + 'pretix.event.order.placed': 'eventyay.event.order.placed', + 'pretix.event.order.approved': 'eventyay.event.order.approved', + 'pretix.event.order.denied': 'eventyay.event.order.denied', + 'pretix.event.order.invoice.generated': 'eventyay.event.order.invoice.generated', + 'pretix.event.order.invoice.regenerated': 'eventyay.event.order.invoice.regenerated', + 'pretix.event.order.invoice.reissued': 'eventyay.event.order.invoice.reissued', + 'pretix.event.order.changed': 'eventyay.event.order.changed', + 'pretix.event.order.changed.item': 'eventyay.event.order.changed.item', + 'pretix.event.settings': 'eventyay.event.settings', + 'pretix.event.live.activated': 'eventyay.event.live.activated', + 'pretix.event.live.deactivated': 'eventyay.event.live.deactivated', + 'pretix.event.testmode.activated': 'eventyay.event.testmode.activated', + 'pretix.event.testmode.deactivated': 'eventyay.event.testmode.deactivated', + 'pretix.subevent.added': 'eventyay.subevent.added', + 'pretix.subevent.changed': 'eventyay.subevent.changed', + 'pretix.subevent.deleted': 'eventyay.subevent.deleted', + 'pretix.device.created': 'eventyay.device.created', + 'pretix.device.revoked': 'eventyay.device.revoked', + 'pretix.gate.created': 'eventyay.gate.created', + 'pretix.gate.deleted': 'eventyay.gate.deleted', + 'pretix.giftcards.created': 'eventyay.giftcards.created', + 'pretix.giftcards.modified': 'eventyay.giftcards.modified', + 'pretix.property.created': 'eventyay.property.created', + 'pretix.property.deleted': 'eventyay.property.deleted', + 'pretix.event.orders.waitinglist.deleted': 'eventyay.event.orders.waitinglist.deleted', + 'pretix.event.checkin': 'eventyay.event.checkin', + 'pretix.event.checkin.unknown': 'eventyay.event.checkin.unknown', + 'pretix.event.checkin.revoked': 'eventyay.event.checkin.revoked', + 'pretix.event.checkin.denied': 'eventyay.event.checkin.denied', + 'pretix.event.checkin.reverted': 'eventyay.event.checkin.reverted', + 'pretix.control.views.checkin': 'eventyay.control.views.checkin', + 'pretix.control.views.checkin.reverted': 'eventyay.control.views.checkin.reverted', + + # Additional mappings for complete backward compatibility + 'pretix.event.category.changed': 'eventyay.event.category.changed', + 'pretix.event.question.added': 'eventyay.event.question.added', + 'pretix.event.question.changed': 'eventyay.event.question.changed', + 'pretix.event.question.deleted': 'eventyay.event.question.deleted', + 'pretix.event.question.option.added': 'eventyay.event.question.option.added', + 'pretix.event.question.option.changed': 'eventyay.event.question.option.changed', + 'pretix.event.question.option.deleted': 'eventyay.event.question.option.deleted', + 'pretix.event.checkinlist.added': 'eventyay.event.checkinlist.added', + 'pretix.event.checkinlist.changed': 'eventyay.event.checkinlist.changed', + 'pretix.event.checkinlists.deleted': 'eventyay.event.checkinlists.deleted', # Note: typo exists in codebase + 'pretix.event.order.refund.requested': 'eventyay.event.order.refund.requested', + 'pretix.event.order.payment.canceled': 'eventyay.event.order.payment.canceled', + 'pretix.event.order.payment.canceled.failed': 'eventyay.event.order.payment.canceled.failed', + 'pretix.event.order.payment.failed': 'eventyay.event.order.payment.failed', + 'pretix.event.order.refund.canceled': 'eventyay.event.order.refund.canceled', + 'pretix.event.order.refund.created': 'eventyay.event.order.refund.created', + 'pretix.plugins.ticketoutputpdf.layout.added': 'eventyay.plugins.ticketoutputpdf.layout.added', + 'pretix.plugins.ticketoutputpdf.layout.deleted': 'eventyay.plugins.ticketoutputpdf.layout.deleted', + 'pretix.plugins.ticketoutputpdf.layout.changed': 'eventyay.plugins.ticketoutputpdf.layout.changed', + 'pretix.plugins.badges.layout.added': 'eventyay.plugins.badges.layout.added', + 'pretix.plugins.badges.layout.deleted': 'eventyay.plugins.badges.layout.deleted', + 'pretix.plugins.badges.layout.changed': 'eventyay.plugins.badges.layout.changed', + 'pretix.team.invite.deleted': 'eventyay.team.invite.deleted', + 'pretix.team.invite.resent': 'eventyay.team.invite.resent', + 'pretix.team.invite.created': 'eventyay.team.invite.created', + 'pretix.team.token.deleted': 'eventyay.team.token.deleted', + 'pretix.user.settings.2fa.device.deleted': 'eventyay.user.settings.2fa.device.deleted', + 'pretix.user.settings.notifications.changed': 'eventyay.user.settings.notifications.changed', + 'pretix.control.auth.user.impersonated': 'eventyay.control.auth.user.impersonated', + 'pretix.control.auth.user.impersonate_stopped': 'eventyay.control.auth.user.impersonate_stopped', + 'pretix.giftcards.acceptance.added': 'eventyay.giftcards.acceptance.added', + 'pretix.giftcards.acceptance.removed': 'eventyay.giftcards.acceptance.removed', + 'pretix.giftcards.transaction.manual': 'eventyay.giftcards.transaction.manual', + 'pretix.gate.changed': 'eventyay.gate.changed', + 'pretix.device.changed': 'eventyay.device.changed', + 'pretix.property.changed': 'eventyay.property.changed', + + # Additional order and email action mappings for complete coverage + 'pretix.event.order.contact.confirmed': 'eventyay.event.order.contact.confirmed', + 'pretix.event.order.comment': 'eventyay.event.order.comment', + 'pretix.event.order.checkin_attention': 'eventyay.event.order.checkin_attention', + 'pretix.event.order.phone.changed': 'eventyay.event.order.phone.changed', + 'pretix.event.order.locale.changed': 'eventyay.event.order.locale.changed', + 'pretix.event.order.email.attachments.skipped': 'eventyay.event.order.email.attachments.skipped', + 'pretix.event.order.email.error': 'eventyay.event.order.email.error', + 'pretix.event.order.email.event_canceled': 'eventyay.event.order.email.event_canceled', + 'pretix.event.order.email.expire_warning_sent': 'eventyay.event.order.email.expire_warning_sent', + 'pretix.subevent.canceled': 'eventyay.subevent.canceled', + 'pretix.voucher.sent': 'eventyay.voucher.sent', + + # pretalx.* (old talk system) mappings - map to eventyay equivalents + 'pretalx.room.create': 'eventyay.room.create', + 'pretalx.room.update': 'eventyay.room.update', + 'pretalx.room.delete': 'eventyay.room.delete', +} + + @receiver(signal=logentry_display, dispatch_uid='eventyaycontrol_logentry_display') def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs): + # Map legacy pretix.* prefixes to eventyay.* for backward compatibility + action_type = PRETIX_LEGACY_ALIASES.get(logentry.action_type, logentry.action_type) + plains = { 'eventyay.object.cloned': _('This object has been created by cloning.'), 'eventyay.organizer.changed': _('The organizer has been changed.'), @@ -471,16 +611,9 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs 'eventyay.event.quota.opened': _('The quota has been re-opened.'), 'eventyay.event.category.added': _('The category has been added.'), 'eventyay.event.category.deleted': _('The category has been deleted.'), - 'eventyay.event.category.changed': _('The category has been changed.'), - 'eventyay.event.question.added': _('The question has been added.'), - 'eventyay.event.question.deleted': _('The question has been deleted.'), - 'eventyay.event.question.changed': _('The question has been changed.'), 'eventyay.event.taxrule.added': _('The tax rule has been added.'), 'eventyay.event.taxrule.deleted': _('The tax rule has been deleted.'), 'eventyay.event.taxrule.changed': _('The tax rule has been changed.'), - 'eventyay.event.checkinlist.added': _('The check-in list has been added.'), - 'eventyay.event.checkinlist.deleted': _('The check-in list has been deleted.'), - 'eventyay.event.checkinlist.changed': _('The check-in list has been changed.'), 'eventyay.event.settings': _('The event settings have been changed.'), 'eventyay.event.tickets.settings': _('The ticket download settings have been changed.'), 'eventyay.event.plugins.enabled': _('A plugin has been enabled.'), @@ -491,9 +624,6 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs 'eventyay.event.testmode.deactivated': _('The test mode has been disabled.'), 'eventyay.event.added': _('The event has been created.'), 'eventyay.event.changed': _('The event details have been changed.'), - 'eventyay.event.question.option.added': _('An answer option has been added to the question.'), - 'eventyay.event.question.option.deleted': _('An answer option has been removed from the question.'), - 'eventyay.event.question.option.changed': _('An answer option has been changed.'), 'eventyay.event.permissions.added': _('A user has been added to the event team.'), 'eventyay.event.permissions.invited': _('A user has been invited to the event team.'), 'eventyay.event.permissions.changed': _("A user's permissions have been changed."), @@ -508,6 +638,9 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs 'eventyay.gate.created': _('The gate has been created.'), 'eventyay.gate.changed': _('The gate has been changed.'), 'eventyay.gate.deleted': _('The gate has been deleted.'), + 'eventyay.room.create': _('A new room was added.'), + 'eventyay.room.update': _('A room was modified.'), + 'eventyay.room.delete': _('A room was deleted.'), 'eventyay.subevent.deleted': pgettext_lazy('subevent', 'The event date has been deleted.'), 'eventyay.subevent.canceled': pgettext_lazy('subevent', 'The event date has been canceled.'), 'eventyay.subevent.changed': pgettext_lazy('subevent', 'The event date has been changed.'), @@ -524,6 +657,27 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs 'eventyay.giftcards.created': _('The gift card has been created.'), 'eventyay.giftcards.modified': _('The gift card has been changed.'), 'eventyay.giftcards.transaction.manual': _('A manual transaction has been performed.'), + 'eventyay.property.deleted': _('The property has been deleted.'), + 'eventyay.property.changed': _('The property has been changed.'), + 'eventyay.plugins.badges.layout.deleted': _('The badge layout has been deleted.'), + 'eventyay.plugins.badges.layout.added': _('A new badge layout has been created.'), + 'eventyay.plugins.badges.layout.changed': _('The badge layout has been changed.'), + 'eventyay.plugins.ticketoutputpdf.layout.added': _('A new ticket layout has been created.'), + 'eventyay.plugins.ticketoutputpdf.layout.deleted': _('The ticket layout has been deleted.'), + 'eventyay.plugins.ticketoutputpdf.layout.changed': _('The ticket layout has been changed.'), + 'eventyay.event.checkinlist.added': _('A new check-in list has been created.'), + 'eventyay.event.checkinlist.changed': _('The check-in list has been changed.'), + 'eventyay.event.checkinlist.deleted': _('The check-in list has been deleted.'), + 'eventyay.event.checkinlists.deleted': _('The check-in list has been deleted.'), # Typo variant + 'eventyay.event.question.added': _('A new question has been created.'), + 'eventyay.event.question.changed': _('The question has been changed.'), + 'eventyay.event.question.deleted': _('The question has been deleted.'), + 'eventyay.event.question.option.added': _('A new answer option has been created.'), + 'eventyay.event.question.option.changed': _('The answer option has been changed.'), + 'eventyay.event.question.option.deleted': _('The answer option has been deleted.'), + 'eventyay.control.auth.user.impersonated': _('User impersonation has started.'), + 'eventyay.control.auth.user.impersonate_stopped': _('User impersonation has been stopped.'), + 'eventyay.event.category.changed': _('The category has been changed.'), } try: @@ -531,7 +685,7 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs except (TypeError, json.JSONDecodeError): data = {} - if logentry.action_type.startswith('eventyay.event.product.variation'): + if action_type.startswith('eventyay.event.product.variation'): if 'value' not in data: # Backwards compatibility var = ProductVariation.objects.filter(id=data['id']).first() @@ -542,28 +696,28 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs else: data['value'] = LazyI18nString(data['value']) - if logentry.action_type in plains: + if action_type in plains: data = defaultdict(lambda: '?', data) - return plains[logentry.action_type].format_map(data) + return plains[action_type].format_map(data) - if logentry.action_type.startswith('eventyay.event.order.changed'): - return _display_order_changed(sender, logentry) + if action_type.startswith('eventyay.event.order.changed'): + return _display_order_changed(sender, logentry, action_type) - if logentry.action_type.startswith('eventyay.event.payment.provider.'): + if action_type.startswith('eventyay.event.payment.provider.'): return _('The settings of a payment provider have been changed.') - if logentry.action_type.startswith('eventyay.event.tickets.provider.'): + if action_type.startswith('eventyay.event.tickets.provider.'): return _('The settings of a ticket output provider have been changed.') - if logentry.action_type == 'eventyay.event.order.consent': + if action_type == 'eventyay.event.order.consent': return _('The user confirmed the following message: "{}"').format( bleach.clean(logentry.parsed_data.get('msg'), tags=[], strip=True) ) - if sender and logentry.action_type.startswith('eventyay.event.checkin'): - return _display_checkin(sender, logentry) + if sender and action_type.startswith('eventyay.event.checkin'): + return _display_checkin(sender, logentry, action_type) - if logentry.action_type == 'eventyay.control.views.checkin': + if action_type == 'eventyay.control.views.checkin': # deprecated dt = dateutil.parser.parse(data.get('datetime')) tz = pytz.timezone(sender.settings.timezone) @@ -586,7 +740,7 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs posid=data.get('positionid'), datetime=dt_formatted, list=checkin_list ) - if logentry.action_type in ( + if action_type in ( 'eventyay.control.views.checkin.reverted', 'eventyay.event.checkin.reverted', ): @@ -603,33 +757,33 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs list=checkin_list, ) - if logentry.action_type == 'eventyay.team.member.added': + if action_type == 'eventyay.team.member.added': return _('{user} has been added to the team.').format(user=data.get('email')) - if logentry.action_type == 'eventyay.team.member.removed': + if action_type == 'eventyay.team.member.removed': return _('{user} has been removed from the team.').format(user=data.get('email')) - if logentry.action_type == 'eventyay.team.member.joined': + if action_type == 'eventyay.team.member.joined': return _('{user} has joined the team using the invite sent to {email}.').format( user=data.get('email'), email=data.get('invite_email') ) - if logentry.action_type == 'eventyay.team.invite.created': + if action_type == 'eventyay.team.invite.created': return _('{user} has been invited to the team.').format(user=data.get('email')) - if logentry.action_type == 'eventyay.team.invite.resent': + if action_type == 'eventyay.team.invite.resent': return _('Invite for {user} has been resent.').format(user=data.get('email')) - if logentry.action_type == 'eventyay.team.invite.deleted': + if action_type == 'eventyay.team.invite.deleted': return _('The invite for {user} has been revoked.').format(user=data.get('email')) - if logentry.action_type == 'eventyay.team.token.created': + if action_type == 'eventyay.team.token.created': return _('The token "{name}" has been created.').format(name=data.get('name')) - if logentry.action_type == 'eventyay.team.token.deleted': + if action_type == 'eventyay.team.token.deleted': return _('The token "{name}" has been revoked.').format(name=data.get('name')) - if logentry.action_type == 'eventyay.user.settings.changed': + if action_type == 'eventyay.user.settings.changed': text = str(_('Your account settings have been changed.')) if 'email' in data: text = text + ' ' + str(_('Your email address has been changed to {email}.').format(email=data['email'])) @@ -641,8 +795,12 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs text = text + ' ' + str(_('Your account has been disabled.')) return text - if logentry.action_type == 'eventyay.control.auth.user.impersonated': + if action_type == 'eventyay.control.auth.user.impersonated': return str(_('You impersonated {}.')).format(data['other_email']) - if logentry.action_type == 'eventyay.control.auth.user.impersonate_stopped': + if action_type == 'eventyay.control.auth.user.impersonate_stopped': return str(_('You stopped impersonating {}.')).format(data['other_email']) + + +# Ensure the signal is connected (backup in case decorator doesn't work) +logentry_display.connect(eventyaycontrol_logentry_display, dispatch_uid='eventyaycontrol_logentry_display') diff --git a/app/eventyay/static/pretixbase/scss/_theme.scss b/app/eventyay/static/pretixbase/scss/_theme.scss index ca06f44f6a..48055fc11e 100644 --- a/app/eventyay/static/pretixbase/scss/_theme.scss +++ b/app/eventyay/static/pretixbase/scss/_theme.scss @@ -12,6 +12,7 @@ background: $brand-warning; color: black; font-weight: bold; + white-space: nowrap; &:hover, &:active, &:focus { background: $btn-warning-border; } From 3a8fd8d373b293206a500ebf1c5a538cd02ba5cb Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Mon, 17 Nov 2025 15:28:50 +0530 Subject: [PATCH 10/11] Revert information.py and logdisplay.py to match enext branch - only keep sidebar CSS/HTML fixes --- app/eventyay/base/models/information.py | 2 +- app/eventyay/control/logdisplay.py | 260 +++++------------------- 2 files changed, 52 insertions(+), 210 deletions(-) diff --git a/app/eventyay/base/models/information.py b/app/eventyay/base/models/information.py index 67f0cf873b..d065457673 100644 --- a/app/eventyay/base/models/information.py +++ b/app/eventyay/base/models/information.py @@ -52,7 +52,7 @@ class SpeakerInformation(PretalxModel): upload_to=resource_path, ) - log_prefix = 'eventyay.speaker_information' + log_prefix = 'speaker_information' @property def log_parent(self): diff --git a/app/eventyay/control/logdisplay.py b/app/eventyay/control/logdisplay.py index 2f13812b80..299f7fc96a 100644 --- a/app/eventyay/control/logdisplay.py +++ b/app/eventyay/control/logdisplay.py @@ -29,11 +29,11 @@ OVERVIEW_BANLIST = ['eventyay.plugins.sendmail.order.email.sent'] -def _display_order_changed(event: Event, logentry: LogEntry, action_type: str): +def _display_order_changed(event: Event, logentry: LogEntry): data = json.loads(logentry.data) text = _('The order has been changed:') - if action_type == 'eventyay.event.order.changed.product': + if logentry.action_type == 'eventyay.event.order.changed.product': old_product = str(event.products.get(pk=data['old_product'])) if data['old_variation']: old_product += ' - ' + str(ProductVariation.objects.get(product__event=event, pk=data['old_variation'])) @@ -51,7 +51,7 @@ def _display_order_changed(event: Event, logentry: LogEntry, action_type: str): new_price=money_filter(Decimal(data['new_price']), event.currency), ) ) - elif action_type == 'eventyay.event.order.changed.seat': + elif logentry.action_type == 'eventyay.event.order.changed.seat': return ( text + ' ' @@ -61,7 +61,7 @@ def _display_order_changed(event: Event, logentry: LogEntry, action_type: str): new_seat=data.get('new_seat'), ) ) - elif action_type == 'eventyay.event.order.changed.subevent': + elif logentry.action_type == 'eventyay.event.order.changed.subevent': old_se = str(event.subevents.get(pk=data['old_subevent'])) new_se = str(event.subevents.get(pk=data['new_subevent'])) return ( @@ -77,7 +77,7 @@ def _display_order_changed(event: Event, logentry: LogEntry, action_type: str): new_price=money_filter(Decimal(data['new_price']), event.currency), ) ) - elif action_type == 'eventyay.event.order.changed.price': + elif logentry.action_type == 'eventyay.event.order.changed.price': return ( text + ' ' @@ -87,7 +87,7 @@ def _display_order_changed(event: Event, logentry: LogEntry, action_type: str): new_price=money_filter(Decimal(data['new_price']), event.currency), ) ) - elif action_type == 'eventyay.event.order.changed.tax_rule': + elif logentry.action_type == 'eventyay.event.order.changed.tax_rule': if 'positionid' in data: return ( text @@ -108,9 +108,9 @@ def _display_order_changed(event: Event, logentry: LogEntry, action_type: str): new_rule=TaxRule.objects.get(pk=data['new_taxrule']), ) ) - elif action_type == 'eventyay.event.order.changed.addfee': + elif logentry.action_type == 'eventyay.event.order.changed.addfee': return text + ' ' + str(_('A fee has been added')) - elif action_type == 'eventyay.event.order.changed.feevalue': + elif logentry.action_type == 'eventyay.event.order.changed.feevalue': return ( text + ' ' @@ -119,7 +119,7 @@ def _display_order_changed(event: Event, logentry: LogEntry, action_type: str): new_price=money_filter(Decimal(data['new_price']), event.currency), ) ) - elif action_type == 'eventyay.event.order.changed.cancelfee': + elif logentry.action_type == 'eventyay.event.order.changed.cancelfee': return ( text + ' ' @@ -127,7 +127,7 @@ def _display_order_changed(event: Event, logentry: LogEntry, action_type: str): old_price=money_filter(Decimal(data['old_price']), event.currency), ) ) - elif action_type == 'eventyay.event.order.changed.cancel': + elif logentry.action_type == 'eventyay.event.order.changed.cancel': old_product = str(event.products.get(pk=data['old_product'])) if data['old_variation']: old_product += ' - ' + str(ProductVariation.objects.get(pk=data['old_variation'])) @@ -140,7 +140,7 @@ def _display_order_changed(event: Event, logentry: LogEntry, action_type: str): old_price=money_filter(Decimal(data['old_price']), event.currency), ) ) - elif action_type == 'eventyay.event.order.changed.add': + elif logentry.action_type == 'eventyay.event.order.changed.add': product = str(event.products.get(pk=data['product'])) if data['variation']: product += ' - ' + str(ProductVariation.objects.get(product__event=event, pk=data['variation'])) @@ -166,7 +166,7 @@ def _display_order_changed(event: Event, logentry: LogEntry, action_type: str): price=money_filter(Decimal(data['price']), event.currency), ) ) - elif action_type == 'eventyay.event.order.changed.secret': + elif logentry.action_type == 'eventyay.event.order.changed.secret': return ( text + ' ' @@ -174,7 +174,7 @@ def _display_order_changed(event: Event, logentry: LogEntry, action_type: str): posid=data.get('positionid', '?'), ) ) - elif action_type == 'eventyay.event.order.changed.split': + elif logentry.action_type == 'eventyay.event.order.changed.split': old_product = str(event.products.get(pk=data['old_product'])) if data['old_variation']: old_product += ' - ' + str(ProductVariation.objects.get(pk=data['old_variation'])) @@ -196,13 +196,13 @@ def _display_order_changed(event: Event, logentry: LogEntry, action_type: str): old_price=money_filter(Decimal(data['old_price']), event.currency), ) ) - elif action_type == 'eventyay.event.order.changed.split_from': + elif logentry.action_type == 'eventyay.event.order.changed.split_from': return _('This order has been created by splitting the order {order}').format( order=data['original_order'], ) -def _display_checkin(event, logentry, action_type: str): +def _display_checkin(event, logentry): data = logentry.parsed_data show_dt = False @@ -220,7 +220,7 @@ def _display_checkin(event, logentry, action_type: str): else: checkin_list = _('(unknown)') - if action_type == 'eventyay.event.checkin.unknown': + if logentry.action_type == 'eventyay.event.checkin.unknown': if show_dt: return _('Unknown scan of code "{barcode}…" at {datetime} for list "{list}", type "{type}".').format( posid=data.get('positionid'), @@ -237,7 +237,7 @@ def _display_checkin(event, logentry, action_type: str): list=checkin_list, ) - if action_type == 'eventyay.event.checkin.revoked': + if logentry.action_type == 'eventyay.event.checkin.revoked': if show_dt: return _( 'Scan scan of revoked code "{barcode}…" at {datetime} for list "{list}", type "{type}", was uploaded.' @@ -256,7 +256,7 @@ def _display_checkin(event, logentry, action_type: str): list=checkin_list, ) - if action_type == 'eventyay.event.checkin.denied': + if logentry.action_type == 'eventyay.event.checkin.denied': if show_dt: return _( 'Denied scan of position #{posid} at {datetime} for list "{list}", type "{type}", ' @@ -312,148 +312,8 @@ def _display_checkin(event, logentry, action_type: str): ) -# Map legacy pretix.* AND pretalx.* action types to eventyay.* for backward compatibility -# This ensures old log entries with legacy prefixes still display correctly -PRETIX_LEGACY_ALIASES = { - # pretix.* (old ticketing system) mappings - comprehensive list from all 47+ changes - 'pretix.event.quota.added': 'eventyay.event.quota.added', - 'pretix.event.quota.changed': 'eventyay.event.quota.changed', - 'pretix.event.quota.deleted': 'eventyay.event.quota.deleted', - 'pretix.event.quota.opened': 'eventyay.event.quota.opened', - 'pretix.event.quota.closed': 'eventyay.event.quota.closed', - 'pretix.subevent.quota.added': 'eventyay.subevent.quota.added', - 'pretix.subevent.quota.changed': 'eventyay.subevent.quota.changed', - 'pretix.subevent.quota.deleted': 'eventyay.subevent.quota.deleted', - 'pretix.event.category.added': 'eventyay.event.category.added', - 'pretix.event.category.deleted': 'eventyay.event.category.deleted', - 'pretix.team.created': 'eventyay.team.created', - 'pretix.team.deleted': 'eventyay.team.deleted', - 'pretix.team.member.added': 'eventyay.team.member.added', - 'pretix.team.member.removed': 'eventyay.team.member.removed', - 'pretix.team.member.joined': 'eventyay.team.member.joined', - 'pretix.team.member.left': 'eventyay.team.member.left', - 'pretix.team.token.created': 'eventyay.team.token.created', - 'pretix.user.settings.changed': 'eventyay.user.settings.changed', - 'pretix.user.settings.2fa.enabled': 'eventyay.user.settings.2fa.enabled', - 'pretix.user.settings.2fa.disabled': 'eventyay.user.settings.2fa.disabled', - 'pretix.user.settings.2fa.device.added': 'eventyay.user.settings.2fa.device.added', - 'pretix.user.settings.2fa.regenemergency': 'eventyay.user.settings.2fa.regenemergency', - 'pretix.user.settings.notifications.enabled': 'eventyay.user.settings.notifications.enabled', - 'pretix.user.settings.notifications.disabled': 'eventyay.user.settings.notifications.disabled', - 'pretix.user.anonymized': 'eventyay.user.anonymized', - 'pretix.control.auth.user.forgot_password.mail_sent': 'eventyay.control.auth.user.forgot_password.mail_sent', - 'pretix.voucher.added': 'eventyay.voucher.added', - 'pretix.voucher.changed': 'eventyay.voucher.changed', - 'pretix.voucher.deleted': 'eventyay.voucher.deleted', - 'pretix.voucher.redeemed': 'eventyay.voucher.redeemed', - 'pretix.event.product.added': 'eventyay.event.product.added', - 'pretix.event.product.changed': 'eventyay.event.product.changed', - 'pretix.event.product.deleted': 'eventyay.event.product.deleted', - 'pretix.event.order.modified': 'eventyay.event.order.modified', - 'pretix.event.order.unpaid': 'eventyay.event.order.unpaid', - 'pretix.event.order.secret.changed': 'eventyay.event.order.secret.changed', - 'pretix.event.order.expirychanged': 'eventyay.event.order.expirychanged', - 'pretix.event.order.expired': 'eventyay.event.order.expired', - 'pretix.event.order.paid': 'eventyay.event.order.paid', - 'pretix.event.order.refunded': 'eventyay.event.order.refunded', - 'pretix.event.order.canceled': 'eventyay.event.order.canceled', - 'pretix.event.order.reactivated': 'eventyay.event.order.reactivated', - 'pretix.event.order.placed': 'eventyay.event.order.placed', - 'pretix.event.order.approved': 'eventyay.event.order.approved', - 'pretix.event.order.denied': 'eventyay.event.order.denied', - 'pretix.event.order.invoice.generated': 'eventyay.event.order.invoice.generated', - 'pretix.event.order.invoice.regenerated': 'eventyay.event.order.invoice.regenerated', - 'pretix.event.order.invoice.reissued': 'eventyay.event.order.invoice.reissued', - 'pretix.event.order.changed': 'eventyay.event.order.changed', - 'pretix.event.order.changed.item': 'eventyay.event.order.changed.item', - 'pretix.event.settings': 'eventyay.event.settings', - 'pretix.event.live.activated': 'eventyay.event.live.activated', - 'pretix.event.live.deactivated': 'eventyay.event.live.deactivated', - 'pretix.event.testmode.activated': 'eventyay.event.testmode.activated', - 'pretix.event.testmode.deactivated': 'eventyay.event.testmode.deactivated', - 'pretix.subevent.added': 'eventyay.subevent.added', - 'pretix.subevent.changed': 'eventyay.subevent.changed', - 'pretix.subevent.deleted': 'eventyay.subevent.deleted', - 'pretix.device.created': 'eventyay.device.created', - 'pretix.device.revoked': 'eventyay.device.revoked', - 'pretix.gate.created': 'eventyay.gate.created', - 'pretix.gate.deleted': 'eventyay.gate.deleted', - 'pretix.giftcards.created': 'eventyay.giftcards.created', - 'pretix.giftcards.modified': 'eventyay.giftcards.modified', - 'pretix.property.created': 'eventyay.property.created', - 'pretix.property.deleted': 'eventyay.property.deleted', - 'pretix.event.orders.waitinglist.deleted': 'eventyay.event.orders.waitinglist.deleted', - 'pretix.event.checkin': 'eventyay.event.checkin', - 'pretix.event.checkin.unknown': 'eventyay.event.checkin.unknown', - 'pretix.event.checkin.revoked': 'eventyay.event.checkin.revoked', - 'pretix.event.checkin.denied': 'eventyay.event.checkin.denied', - 'pretix.event.checkin.reverted': 'eventyay.event.checkin.reverted', - 'pretix.control.views.checkin': 'eventyay.control.views.checkin', - 'pretix.control.views.checkin.reverted': 'eventyay.control.views.checkin.reverted', - - # Additional mappings for complete backward compatibility - 'pretix.event.category.changed': 'eventyay.event.category.changed', - 'pretix.event.question.added': 'eventyay.event.question.added', - 'pretix.event.question.changed': 'eventyay.event.question.changed', - 'pretix.event.question.deleted': 'eventyay.event.question.deleted', - 'pretix.event.question.option.added': 'eventyay.event.question.option.added', - 'pretix.event.question.option.changed': 'eventyay.event.question.option.changed', - 'pretix.event.question.option.deleted': 'eventyay.event.question.option.deleted', - 'pretix.event.checkinlist.added': 'eventyay.event.checkinlist.added', - 'pretix.event.checkinlist.changed': 'eventyay.event.checkinlist.changed', - 'pretix.event.checkinlists.deleted': 'eventyay.event.checkinlists.deleted', # Note: typo exists in codebase - 'pretix.event.order.refund.requested': 'eventyay.event.order.refund.requested', - 'pretix.event.order.payment.canceled': 'eventyay.event.order.payment.canceled', - 'pretix.event.order.payment.canceled.failed': 'eventyay.event.order.payment.canceled.failed', - 'pretix.event.order.payment.failed': 'eventyay.event.order.payment.failed', - 'pretix.event.order.refund.canceled': 'eventyay.event.order.refund.canceled', - 'pretix.event.order.refund.created': 'eventyay.event.order.refund.created', - 'pretix.plugins.ticketoutputpdf.layout.added': 'eventyay.plugins.ticketoutputpdf.layout.added', - 'pretix.plugins.ticketoutputpdf.layout.deleted': 'eventyay.plugins.ticketoutputpdf.layout.deleted', - 'pretix.plugins.ticketoutputpdf.layout.changed': 'eventyay.plugins.ticketoutputpdf.layout.changed', - 'pretix.plugins.badges.layout.added': 'eventyay.plugins.badges.layout.added', - 'pretix.plugins.badges.layout.deleted': 'eventyay.plugins.badges.layout.deleted', - 'pretix.plugins.badges.layout.changed': 'eventyay.plugins.badges.layout.changed', - 'pretix.team.invite.deleted': 'eventyay.team.invite.deleted', - 'pretix.team.invite.resent': 'eventyay.team.invite.resent', - 'pretix.team.invite.created': 'eventyay.team.invite.created', - 'pretix.team.token.deleted': 'eventyay.team.token.deleted', - 'pretix.user.settings.2fa.device.deleted': 'eventyay.user.settings.2fa.device.deleted', - 'pretix.user.settings.notifications.changed': 'eventyay.user.settings.notifications.changed', - 'pretix.control.auth.user.impersonated': 'eventyay.control.auth.user.impersonated', - 'pretix.control.auth.user.impersonate_stopped': 'eventyay.control.auth.user.impersonate_stopped', - 'pretix.giftcards.acceptance.added': 'eventyay.giftcards.acceptance.added', - 'pretix.giftcards.acceptance.removed': 'eventyay.giftcards.acceptance.removed', - 'pretix.giftcards.transaction.manual': 'eventyay.giftcards.transaction.manual', - 'pretix.gate.changed': 'eventyay.gate.changed', - 'pretix.device.changed': 'eventyay.device.changed', - 'pretix.property.changed': 'eventyay.property.changed', - - # Additional order and email action mappings for complete coverage - 'pretix.event.order.contact.confirmed': 'eventyay.event.order.contact.confirmed', - 'pretix.event.order.comment': 'eventyay.event.order.comment', - 'pretix.event.order.checkin_attention': 'eventyay.event.order.checkin_attention', - 'pretix.event.order.phone.changed': 'eventyay.event.order.phone.changed', - 'pretix.event.order.locale.changed': 'eventyay.event.order.locale.changed', - 'pretix.event.order.email.attachments.skipped': 'eventyay.event.order.email.attachments.skipped', - 'pretix.event.order.email.error': 'eventyay.event.order.email.error', - 'pretix.event.order.email.event_canceled': 'eventyay.event.order.email.event_canceled', - 'pretix.event.order.email.expire_warning_sent': 'eventyay.event.order.email.expire_warning_sent', - 'pretix.subevent.canceled': 'eventyay.subevent.canceled', - 'pretix.voucher.sent': 'eventyay.voucher.sent', - - # pretalx.* (old talk system) mappings - map to eventyay equivalents - 'pretalx.room.create': 'eventyay.room.create', - 'pretalx.room.update': 'eventyay.room.update', - 'pretalx.room.delete': 'eventyay.room.delete', -} - - @receiver(signal=logentry_display, dispatch_uid='eventyaycontrol_logentry_display') def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs): - # Map legacy pretix.* prefixes to eventyay.* for backward compatibility - action_type = PRETIX_LEGACY_ALIASES.get(logentry.action_type, logentry.action_type) - plains = { 'eventyay.object.cloned': _('This object has been created by cloning.'), 'eventyay.organizer.changed': _('The organizer has been changed.'), @@ -611,9 +471,16 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs 'eventyay.event.quota.opened': _('The quota has been re-opened.'), 'eventyay.event.category.added': _('The category has been added.'), 'eventyay.event.category.deleted': _('The category has been deleted.'), + 'eventyay.event.category.changed': _('The category has been changed.'), + 'eventyay.event.question.added': _('The question has been added.'), + 'eventyay.event.question.deleted': _('The question has been deleted.'), + 'eventyay.event.question.changed': _('The question has been changed.'), 'eventyay.event.taxrule.added': _('The tax rule has been added.'), 'eventyay.event.taxrule.deleted': _('The tax rule has been deleted.'), 'eventyay.event.taxrule.changed': _('The tax rule has been changed.'), + 'eventyay.event.checkinlist.added': _('The check-in list has been added.'), + 'eventyay.event.checkinlist.deleted': _('The check-in list has been deleted.'), + 'eventyay.event.checkinlist.changed': _('The check-in list has been changed.'), 'eventyay.event.settings': _('The event settings have been changed.'), 'eventyay.event.tickets.settings': _('The ticket download settings have been changed.'), 'eventyay.event.plugins.enabled': _('A plugin has been enabled.'), @@ -624,6 +491,9 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs 'eventyay.event.testmode.deactivated': _('The test mode has been disabled.'), 'eventyay.event.added': _('The event has been created.'), 'eventyay.event.changed': _('The event details have been changed.'), + 'eventyay.event.question.option.added': _('An answer option has been added to the question.'), + 'eventyay.event.question.option.deleted': _('An answer option has been removed from the question.'), + 'eventyay.event.question.option.changed': _('An answer option has been changed.'), 'eventyay.event.permissions.added': _('A user has been added to the event team.'), 'eventyay.event.permissions.invited': _('A user has been invited to the event team.'), 'eventyay.event.permissions.changed': _("A user's permissions have been changed."), @@ -638,9 +508,6 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs 'eventyay.gate.created': _('The gate has been created.'), 'eventyay.gate.changed': _('The gate has been changed.'), 'eventyay.gate.deleted': _('The gate has been deleted.'), - 'eventyay.room.create': _('A new room was added.'), - 'eventyay.room.update': _('A room was modified.'), - 'eventyay.room.delete': _('A room was deleted.'), 'eventyay.subevent.deleted': pgettext_lazy('subevent', 'The event date has been deleted.'), 'eventyay.subevent.canceled': pgettext_lazy('subevent', 'The event date has been canceled.'), 'eventyay.subevent.changed': pgettext_lazy('subevent', 'The event date has been changed.'), @@ -657,27 +524,6 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs 'eventyay.giftcards.created': _('The gift card has been created.'), 'eventyay.giftcards.modified': _('The gift card has been changed.'), 'eventyay.giftcards.transaction.manual': _('A manual transaction has been performed.'), - 'eventyay.property.deleted': _('The property has been deleted.'), - 'eventyay.property.changed': _('The property has been changed.'), - 'eventyay.plugins.badges.layout.deleted': _('The badge layout has been deleted.'), - 'eventyay.plugins.badges.layout.added': _('A new badge layout has been created.'), - 'eventyay.plugins.badges.layout.changed': _('The badge layout has been changed.'), - 'eventyay.plugins.ticketoutputpdf.layout.added': _('A new ticket layout has been created.'), - 'eventyay.plugins.ticketoutputpdf.layout.deleted': _('The ticket layout has been deleted.'), - 'eventyay.plugins.ticketoutputpdf.layout.changed': _('The ticket layout has been changed.'), - 'eventyay.event.checkinlist.added': _('A new check-in list has been created.'), - 'eventyay.event.checkinlist.changed': _('The check-in list has been changed.'), - 'eventyay.event.checkinlist.deleted': _('The check-in list has been deleted.'), - 'eventyay.event.checkinlists.deleted': _('The check-in list has been deleted.'), # Typo variant - 'eventyay.event.question.added': _('A new question has been created.'), - 'eventyay.event.question.changed': _('The question has been changed.'), - 'eventyay.event.question.deleted': _('The question has been deleted.'), - 'eventyay.event.question.option.added': _('A new answer option has been created.'), - 'eventyay.event.question.option.changed': _('The answer option has been changed.'), - 'eventyay.event.question.option.deleted': _('The answer option has been deleted.'), - 'eventyay.control.auth.user.impersonated': _('User impersonation has started.'), - 'eventyay.control.auth.user.impersonate_stopped': _('User impersonation has been stopped.'), - 'eventyay.event.category.changed': _('The category has been changed.'), } try: @@ -685,7 +531,7 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs except (TypeError, json.JSONDecodeError): data = {} - if action_type.startswith('eventyay.event.product.variation'): + if logentry.action_type.startswith('eventyay.event.product.variation'): if 'value' not in data: # Backwards compatibility var = ProductVariation.objects.filter(id=data['id']).first() @@ -696,28 +542,28 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs else: data['value'] = LazyI18nString(data['value']) - if action_type in plains: + if logentry.action_type in plains: data = defaultdict(lambda: '?', data) - return plains[action_type].format_map(data) + return plains[logentry.action_type].format_map(data) - if action_type.startswith('eventyay.event.order.changed'): - return _display_order_changed(sender, logentry, action_type) + if logentry.action_type.startswith('eventyay.event.order.changed'): + return _display_order_changed(sender, logentry) - if action_type.startswith('eventyay.event.payment.provider.'): + if logentry.action_type.startswith('eventyay.event.payment.provider.'): return _('The settings of a payment provider have been changed.') - if action_type.startswith('eventyay.event.tickets.provider.'): + if logentry.action_type.startswith('eventyay.event.tickets.provider.'): return _('The settings of a ticket output provider have been changed.') - if action_type == 'eventyay.event.order.consent': + if logentry.action_type == 'eventyay.event.order.consent': return _('The user confirmed the following message: "{}"').format( bleach.clean(logentry.parsed_data.get('msg'), tags=[], strip=True) ) - if sender and action_type.startswith('eventyay.event.checkin'): - return _display_checkin(sender, logentry, action_type) + if sender and logentry.action_type.startswith('eventyay.event.checkin'): + return _display_checkin(sender, logentry) - if action_type == 'eventyay.control.views.checkin': + if logentry.action_type == 'eventyay.control.views.checkin': # deprecated dt = dateutil.parser.parse(data.get('datetime')) tz = pytz.timezone(sender.settings.timezone) @@ -740,7 +586,7 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs posid=data.get('positionid'), datetime=dt_formatted, list=checkin_list ) - if action_type in ( + if logentry.action_type in ( 'eventyay.control.views.checkin.reverted', 'eventyay.event.checkin.reverted', ): @@ -757,33 +603,33 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs list=checkin_list, ) - if action_type == 'eventyay.team.member.added': + if logentry.action_type == 'eventyay.team.member.added': return _('{user} has been added to the team.').format(user=data.get('email')) - if action_type == 'eventyay.team.member.removed': + if logentry.action_type == 'eventyay.team.member.removed': return _('{user} has been removed from the team.').format(user=data.get('email')) - if action_type == 'eventyay.team.member.joined': + if logentry.action_type == 'eventyay.team.member.joined': return _('{user} has joined the team using the invite sent to {email}.').format( user=data.get('email'), email=data.get('invite_email') ) - if action_type == 'eventyay.team.invite.created': + if logentry.action_type == 'eventyay.team.invite.created': return _('{user} has been invited to the team.').format(user=data.get('email')) - if action_type == 'eventyay.team.invite.resent': + if logentry.action_type == 'eventyay.team.invite.resent': return _('Invite for {user} has been resent.').format(user=data.get('email')) - if action_type == 'eventyay.team.invite.deleted': + if logentry.action_type == 'eventyay.team.invite.deleted': return _('The invite for {user} has been revoked.').format(user=data.get('email')) - if action_type == 'eventyay.team.token.created': + if logentry.action_type == 'eventyay.team.token.created': return _('The token "{name}" has been created.').format(name=data.get('name')) - if action_type == 'eventyay.team.token.deleted': + if logentry.action_type == 'eventyay.team.token.deleted': return _('The token "{name}" has been revoked.').format(name=data.get('name')) - if action_type == 'eventyay.user.settings.changed': + if logentry.action_type == 'eventyay.user.settings.changed': text = str(_('Your account settings have been changed.')) if 'email' in data: text = text + ' ' + str(_('Your email address has been changed to {email}.').format(email=data['email'])) @@ -795,12 +641,8 @@ def eventyaycontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs text = text + ' ' + str(_('Your account has been disabled.')) return text - if action_type == 'eventyay.control.auth.user.impersonated': + if logentry.action_type == 'eventyay.control.auth.user.impersonated': return str(_('You impersonated {}.')).format(data['other_email']) - if action_type == 'eventyay.control.auth.user.impersonate_stopped': + if logentry.action_type == 'eventyay.control.auth.user.impersonate_stopped': return str(_('You stopped impersonating {}.')).format(data['other_email']) - - -# Ensure the signal is connected (backup in case decorator doesn't work) -logentry_display.connect(eventyaycontrol_logentry_display, dispatch_uid='eventyaycontrol_logentry_display') From 813b61a115abcc85ab38a76300b5b99edecf8ee0 Mon Sep 17 00:00:00 2001 From: Arnav Angarkar Date: Tue, 18 Nov 2025 11:58:43 +0530 Subject: [PATCH 11/11] added last line --- app/eventyay/static/pretixcontrol/scss/_sidebar.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss index d41cbb7c46..fb21b85b74 100644 --- a/app/eventyay/static/pretixcontrol/scss/_sidebar.scss +++ b/app/eventyay/static/pretixcontrol/scss/_sidebar.scss @@ -388,4 +388,4 @@ body:not(.sidebar-minimized) #page-wrapper { body.sidebar-minimized .sidebar { min-height: 100vh; -} \ No newline at end of file +}