From 026a0722357d74b143ed2d974ad2d871a56041b3 Mon Sep 17 00:00:00 2001 From: Andrew Dickinson Date: Mon, 20 Apr 2020 09:30:27 -0400 Subject: Add Project History Page (#553) Co-Authored-By: Glandos All project activity can be tracked, using SQLAlchemy-continuum. IP addresses can optionally be recorded. --- ihatemoney/templates/history.html | 250 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 ihatemoney/templates/history.html (limited to 'ihatemoney/templates/history.html') diff --git a/ihatemoney/templates/history.html b/ihatemoney/templates/history.html new file mode 100644 index 0000000..875040e --- /dev/null +++ b/ihatemoney/templates/history.html @@ -0,0 +1,250 @@ +{% extends "sidebar_table_layout.html" %} + +{% macro change_to_logging_preference(event) %} +{% if event.val_after == LoggingMode.DISABLED %} + {% if event.val_before == LoggingMode.ENABLED %} + {{ _("Disabled Project History") }} + {% else %} + {{ _("Disabled Project History & IP Address Recording") }} + {% endif %} +{% elif event.val_after == LoggingMode.ENABLED %} + {% if event.val_before == LoggingMode.DISABLED %} + {{ _("Enabled Project History") }} + {% elif event.val_before == LoggingMode.RECORD_IP %} + {{ _("Disabled IP Address Recording") }} + {% else %} + {{ _("Enabled Project History") }} + {% endif %} +{% elif event.val_after == LoggingMode.RECORD_IP %} + {% if event.val_before == LoggingMode.DISABLED %} + {{ _("Enabled Project History & IP Address Recording") }} + {% elif event.val_before == LoggingMode.ENABLED %} + {{ _("Enabled IP Address Recording") }} + {% else %} + {{ _("Enabled Project History & IP Address Recording") }} + {% endif %} +{% else %} + {# Should be unreachable #} + {{ _("History Settings Changed") }} +{% endif %} +{% endmacro %} + +{% macro describe_object(event) %}{{ event.object_type }} {{ event.object_desc }}{% endmacro %} + +{% macro simple_property_change(event, localized_property_name, from=True) %} + {{ describe_object(event) }}: + {{ localized_property_name }} {{ _("changed") }} + {% if from %}{{ _("from") }} {{ event.val_before }}{% endif %} + {{ _("to") }} {{ event.val_after }} +{% endmacro %} + +{% macro clear_history_modals() %} + + + + +{% endmacro %} + +{% macro owers_changed(event, add) %} + {{ describe_object(event) }}: {% if add %}{{ _("Added") }}{% else %}{{ _("Removed") }}{% endif %} + {% if event.val_after|length > 1 %} + {% for name in event.val_after %} + {{ name }}{% if event.val_after|length > 2 and loop.index != event.val_after|length %},{% endif %} + {% if loop.index == event.val_after|length - 1 %} {{ _("and") }} {% endif %} + {% endfor %} + {% else %} + {{ event.val_after[0] }} + {% endif %} + {% if add %}{{ _("to") }}{% else %}{{ _("from") }}{% endif %} + {{ _("owers list") }} +{% endmacro %} + +{% block sidebar %} +
+ + + + + + + + {% set balance = g.project.balance %} + {% for member in g.project.members | sort(attribute='name') if member.activated or balance[member.id]|round(2) != 0 %} + + + + + {% endfor %} +
{{ _("Who?") }}{{ _("Balance") }}
{{ member.name }} + {% if balance[member.id]|round(2) > 0 %}+{% endif %}{{ "%.2f" | format(balance[member.id]) }} +
+
+{% endblock %} + + + +{% block content %} + {% if current_log_pref == LoggingMode.DISABLED or (current_log_pref != LoggingMode.RECORD_IP and any_ip_addresses) %} +
+ {% if current_log_pref == LoggingMode.DISABLED %} +

+ {{ _("This project has history disabled. New actions won't appear below. You can enable history on the") }} + {{ _("settings page") }} +

+ {% if history %} +

{{ _("The table below reflects actions recorded prior to disabling project history. You can ") }} + {{ _("clear project history") }} {{ _("to remove them.") }}

+ {% endif %} + {% endif %} + {% if current_log_pref != LoggingMode.RECORD_IP and any_ip_addresses %} +

{{ _("Some entries below contain IP addresses, even though this project has IP recording disabled. ") }} + {{ _("Delete stored IP addresses") }}

+ {% endif %} +
+ {% endif %} + {{ clear_history_modals() }} + + + {{ static_include("images/x.svg") | safe }} + {{ _("Clear Project History") }} + + + + + {{ static_include("images/x.svg") | safe }} + {{ _("Delete Stored IP Addresses") }} + + + +
+ {% if history %} + + + + + + + + {% for event in history %} + + + + + + {% endfor %} + +
{{ _("Time") }}{{ _("Event") }} + + {{ _("From IP") }}
+
+ +
+
+ {% if event.operation_type == OperationType.INSERT %} + {{ event.object_type }} {{ event.object_desc }} {{ _("added") }} + {% elif event.operation_type == OperationType.UPDATE %} + {% if event.object_type == _("Project") %} + {% if event.prop_changed == "password" %} + {{ _("Project private code changed") }} + {% elif event.prop_changed == "logging_preference" %} + {{ change_to_logging_preference(event) }} + {% elif event.prop_changed == "name" %} + {{ _("Project renamed to") }} {{ event.val_after }} + {% elif event.prop_changed == "contact_email" %} + {{ _("Project contact email changed to") }} {{ event.val_after }} + {% else %} + {{ _("Project settings modified") }} + {% endif %} + {% elif event.prop_changed == "activated" %} + {{ event.object_type }} {{ event.object_desc }} + {% if event.val_after == False %}{{ _("deactivated") }}{% else %}{{ _("reactivated") }}{% endif %} + {% elif event.prop_changed == "name" or event.prop_changed == "what" %} + {{ describe_object(event) }} {{ _("renamed") }} {{ _("to") }} {{ event.val_after }} + {% elif event.prop_changed == "weight" %} + {{ simple_property_change(event, _("Weight")) }} + {% elif event.prop_changed == "external_link" %} + {{ describe_object(event) }}: {{ _("External link changed to") }} + {{ event.val_after }} + {% elif event.prop_changed == "owers_added" %} + {{ owers_changed(event, True)}} + {% elif event.prop_changed == "owers_removed" %} + {{ owers_changed(event, False)}} + {% elif event.prop_changed == "payer" %} + {{ simple_property_change(event, _("Payer"))}} + {% elif event.prop_changed == "amount" %} + {{ simple_property_change(event, _("Amount")) }} + {% elif event.prop_changed == "date" %} + {{ simple_property_change(event, _("Date")) }} + {% else %} + {{ describe_object(event) }} {{ _("modified") }} + {% endif %} + {% elif event.operation_type == OperationType.DELETE %} + {{ event.object_type }} {{ event.object_desc }} {{ _("removed") }} + {% else %} + {# Should be unreachable #} + {{ describe_object(event) }} {{ _("changed in a unknown way") }} + {% endif %} +
+
{% if event.ip %}{{ event.ip }}{% else %} -- {% endif %}
+ {% else %} +
+
+
+ {{ static_include("images/hand-holding-heart.svg") | safe }} +

{{ _('Nothing to list')}}

+

+ {{ _("Someone probably") }}
+ {{ _("cleared the project history.") }} +

+
+
+ {% endif %} + +{% endblock %} -- cgit v1.1