diff --git a/src/gui/components/_legacy.py b/src/gui/components/_legacy.py index ec65670..5719be8 100644 --- a/src/gui/components/_legacy.py +++ b/src/gui/components/_legacy.py @@ -1596,8 +1596,27 @@ def render_sticky_footer() -> None: f'{_html.escape(support_email)}', ) license_label = _html.escape(_t("footer.help_license_label")) + logs_label = _html.escape(_t("footer.help_logs_label")) + logs_link_text = _html.escape(_t("footer.help_logs_link")) help_dismiss = _html.escape(_t("footer.help_dismiss")) + # Logs section — surface today's audit log path as copyable text + # plus a link to the /logs page. Wrapped because a broken audit + # log MUST NOT stop the footer from rendering; fall back to "—". + try: + from src.audit import audit_log_path + log_path_str = str(audit_log_path()) + except Exception: + log_path_str = "—" + logs_html = ( + f'
' + f'{logs_label}:
' + f'
' + f'{_html.escape(log_path_str)}
' + f'
' + f'{logs_link_text}
' + ) + # License section — read state and branch on activated/valid. The # query is wrapped because a corrupted license file MUST NOT stop # the footer from rendering; in that case we fall back to the @@ -1639,6 +1658,7 @@ def render_sticky_footer() -> None: f'
{help_title}
' f'
{help_version}
' f'{license_html}' + f'{logs_html}' f'
{help_support_html}
' f'' ) @@ -1766,6 +1786,17 @@ def render_sticky_footer() -> None: color: rgb(90, 95, 110) !important; font-weight: 500 !important; } +#datatools-help-popover .dt-help-path { + display: block !important; + font-family: var(--font-mono, ui-monospace, Menlo, Consolas, monospace) !important; + font-size: 11px !important; + color: rgb(38, 39, 48) !important; + background: rgba(0, 0, 0, 0.04) !important; + padding: 2px 6px !important; + border-radius: 3px !important; + word-break: break-all !important; + user-select: all !important; +} #datatools-help-popover .dt-help-row a { color: rgb(0, 102, 204) !important; text-decoration: none !important; diff --git a/src/i18n/packs/en.json b/src/i18n/packs/en.json index ace964e..762ec86 100644 --- a/src/i18n/packs/en.json +++ b/src/i18n/packs/en.json @@ -185,6 +185,8 @@ "help_license_expires": "Expires {date} ({days} days)", "help_activate_link": "Activate now →", "help_manage_link": "Manage license →", + "help_logs_label": "Log file", + "help_logs_link": "View all logs →", "help_dismiss": "Close" } } diff --git a/src/i18n/packs/es.json b/src/i18n/packs/es.json index 16b9b29..768e966 100644 --- a/src/i18n/packs/es.json +++ b/src/i18n/packs/es.json @@ -185,6 +185,8 @@ "help_license_expires": "Caduca {date} ({days} días)", "help_activate_link": "Activar ahora →", "help_manage_link": "Gestionar licencia →", + "help_logs_label": "Archivo de registro", + "help_logs_link": "Ver todos los registros →", "help_dismiss": "Cerrar" } }