111 lines
4.7 KiB
HTML
111 lines
4.7 KiB
HTML
{% load static %}
|
|
|
|
{% if audit_logs %}
|
|
<div class="activity-timeline">
|
|
{% for log in audit_logs %}
|
|
<div class="activity-item">
|
|
<div class="d-flex justify-content-between align-items-start">
|
|
<div class="flex-grow-1">
|
|
<div class="d-flex align-items-center mb-2">
|
|
<span class="badge bg-{{ log.event_type|lower }} me-2">
|
|
{% if log.event_type == 'CREATE' %}
|
|
<i class="fas fa-plus me-1"></i>
|
|
{% elif log.event_type == 'UPDATE' %}
|
|
<i class="fas fa-edit me-1"></i>
|
|
{% elif log.event_type == 'DELETE' %}
|
|
<i class="fas fa-trash me-1"></i>
|
|
{% elif log.event_type == 'VIEW' %}
|
|
<i class="fas fa-eye me-1"></i>
|
|
{% elif log.event_type == 'LOGIN' %}
|
|
<i class="fas fa-sign-in-alt me-1"></i>
|
|
{% elif log.event_type == 'LOGOUT' %}
|
|
<i class="fas fa-sign-out-alt me-1"></i>
|
|
{% else %}
|
|
<i class="fas fa-info me-1"></i>
|
|
{% endif %}
|
|
{{ log.event_type }}
|
|
</span>
|
|
|
|
{% if log.event_category %}
|
|
<span class="badge bg-secondary">{{ log.event_category }}</span>
|
|
{% endif %}
|
|
</div>
|
|
|
|
<div class="fw-bold mb-1">{{ log.action }}</div>
|
|
|
|
{% if log.description %}
|
|
<div class="text-muted small mb-2">{{ log.description }}</div>
|
|
{% endif %}
|
|
|
|
{% if log.object_repr %}
|
|
<div class="text-muted small mb-2">
|
|
<i class="fas fa-cube me-1"></i>
|
|
<strong>Object:</strong> {{ log.object_repr }}
|
|
</div>
|
|
{% endif %}
|
|
|
|
<div class="text-muted small">
|
|
<i class="fas fa-clock me-1"></i>{{ log.timestamp|date:"M d, Y H:i:s" }}
|
|
{% if log.ip_address %}
|
|
<span class="mx-2">•</span>
|
|
<i class="fas fa-globe me-1"></i>{{ log.ip_address }}
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="ms-3">
|
|
{% if log.severity == 'HIGH' %}
|
|
<span class="badge bg-danger">High</span>
|
|
{% elif log.severity == 'MEDIUM' %}
|
|
<span class="badge bg-warning">Medium</span>
|
|
{% elif log.severity == 'LOW' %}
|
|
<span class="badge bg-info">Low</span>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
{% if log.changes %}
|
|
<div class="mt-2">
|
|
<details>
|
|
<summary class="text-muted small" style="cursor: pointer;">
|
|
<i class="fas fa-list me-1"></i>View Changes
|
|
</summary>
|
|
<div class="mt-2 p-2 bg-light rounded">
|
|
<small>{{ log.changes }}</small>
|
|
</div>
|
|
</details>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if log.additional_data %}
|
|
<div class="mt-2">
|
|
<details>
|
|
<summary class="text-muted small" style="cursor: pointer;">
|
|
<i class="fas fa-info-circle me-1"></i>Additional Data
|
|
</summary>
|
|
<pre class="mt-2 p-2 bg-light rounded small"><code>{{ log.additional_data|pprint }}</code></pre>
|
|
</details>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
|
|
{% if audit_logs|length >= 20 %}
|
|
<div class="text-center mt-3">
|
|
<button class="btn btn-outline-primary btn-sm"
|
|
hx-get="{% url 'accounts:user_activity_log' user_profile.id %}?limit=50"
|
|
hx-target="#user-activity-log">
|
|
<i class="fas fa-chevron-down me-1"></i>Load More
|
|
</button>
|
|
</div>
|
|
{% endif %}
|
|
{% else %}
|
|
<div class="text-center py-4 text-muted">
|
|
<i class="fas fa-history fa-3x mb-3"></i>
|
|
<h6>No Activity Found</h6>
|
|
<p class="small">No recent activity for this user.</p>
|
|
</div>
|
|
{% endif %}
|
|
|