chnages to file
This commit is contained in:
parent
b490736efa
commit
679188dad8
@ -810,7 +810,7 @@ path(
|
||||
path('management/user_management/', views.user_management, name='user_management'),
|
||||
path('management/<str:content_type>/<slug:slug>/activate_account/', views.activate_account, name='activate_account'),
|
||||
path('management/<str:content_type>/<slug:slug>/permenant_delete_account/', views.permenant_delete_account, name='permenant_delete_account'),
|
||||
path('management/audit_log_dashboard/', views.AuditLogDashboardView.as_view(), name='audit_log_dashboard'),
|
||||
path('management/audit_log_dashboard/', views.AuditLogDashboardView, name='audit_log_dashboard'),
|
||||
|
||||
|
||||
#########
|
||||
|
||||
@ -8292,15 +8292,9 @@ def user_management(request):
|
||||
# context['request_events'] = RequestEvent.objects.all().order_by('-datetime')
|
||||
# return context
|
||||
|
||||
|
||||
class AuditLogDashboardView(TemplateView):
|
||||
template_name = 'admin_management/audit_log_dashboard.html'
|
||||
paginate_by = 20
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
|
||||
# Process CRUD (Model Change) Events
|
||||
def AuditLogDashboardView(request):
|
||||
query=request.GET.get('q')
|
||||
context={}
|
||||
model_events_raw = CRUDEvent.objects.all().order_by('-datetime')
|
||||
processed_model_events = []
|
||||
|
||||
@ -8357,8 +8351,82 @@ class AuditLogDashboardView(TemplateView):
|
||||
context['model_events'] = processed_model_events
|
||||
context['auth_events'] = LoginEvent.objects.all().order_by('-datetime')
|
||||
context['request_events'] = RequestEvent.objects.all().order_by('-datetime')
|
||||
if(query=='userActions'):
|
||||
return render(request,'admin_management/model_logs.html',context)
|
||||
elif(query=='loginEvents'):
|
||||
return render(request,'admin_management/auth_logs.html',context)
|
||||
else:
|
||||
return render(request,'admin_management/request_logs.html',context)
|
||||
|
||||
|
||||
return context
|
||||
|
||||
|
||||
# class AuditLogDashboardView(TemplateView):
|
||||
# template_name = 'admin_management/audit_log_dashboard.html'
|
||||
# paginate_by = 20
|
||||
|
||||
# def get_context_data(self, **kwargs):
|
||||
# context = super().get_context_data(**kwargs)
|
||||
|
||||
# # Process CRUD (Model Change) Events
|
||||
# model_events_raw = CRUDEvent.objects.all().order_by('-datetime')
|
||||
# processed_model_events = []
|
||||
|
||||
# for event in model_events_raw:
|
||||
# # Create a base dictionary for each event's data
|
||||
# event_data = {
|
||||
# 'datetime': event.datetime,
|
||||
# 'user': event.user,
|
||||
# 'event_type_display': event.get_event_type_display(),
|
||||
# 'model_name': event.content_type.model,
|
||||
# 'object_id': event.object_id,
|
||||
# 'object_repr': event.object_repr,
|
||||
# 'field_changes': [] # This will be a list of dicts: [{'field': 'name', 'old': 'A', 'new': 'B'}]
|
||||
# }
|
||||
|
||||
# if event.changed_fields:
|
||||
# try:
|
||||
# print(f"Debugging CRUDEvent ID: {event.id}, User: {event.user}, Model: {event.content_type.model}")
|
||||
# print(f"Raw event.changed_fields: '{event.changed_fields}' (Type: {type(event.changed_fields)})")
|
||||
# changes = json.loads(event.changed_fields)
|
||||
# #change_fields returns 'null' for no changes to a field i.e. if the field remains the same
|
||||
# if isinstance(changes, dict): # Check if 'changes' is a dictionary
|
||||
# for field_name, values in changes.items():
|
||||
# old_value = values[0] if isinstance(values, list) and len(values) > 0 else None
|
||||
# new_value = values[1] if isinstance(values, list) and len(values) > 1 else None
|
||||
# event_data['field_changes'].append({
|
||||
# 'field': field_name,
|
||||
# 'old': old_value,
|
||||
# 'new': new_value
|
||||
# })
|
||||
# elif changes is None: # Handle case where JSON was 'null' string like when no changes detected for a field or if it saved without a change
|
||||
|
||||
# event_data['field_changes'].append({
|
||||
# 'field': 'Info',
|
||||
# 'old': '',
|
||||
# 'new': 'No specific field changes recorded (JSON was null)'
|
||||
# })
|
||||
# else: # Handle valid JSON but not a dictionary (e.g., "[]", 123)
|
||||
# event_data['field_changes'].append({
|
||||
# 'field': 'Error',
|
||||
# 'old': '',
|
||||
# 'new': f'Unexpected JSON format: {type(changes).__name__}'
|
||||
# })
|
||||
# except json.JSONDecodeError:
|
||||
# # Handle invalid JSON; you might log this error
|
||||
# event_data['field_changes'].append({
|
||||
# 'field': 'Error',
|
||||
# 'old': '',
|
||||
# 'new': 'Invalid JSON in changed_fields'
|
||||
# })
|
||||
|
||||
# processed_model_events.append(event_data)
|
||||
|
||||
# context['model_events'] = processed_model_events
|
||||
# context['auth_events'] = LoginEvent.objects.all().order_by('-datetime')
|
||||
# context['request_events'] = RequestEvent.objects.all().order_by('-datetime')
|
||||
|
||||
# return context
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,4 +1,27 @@
|
||||
|
||||
{% extends "base.html" %}
|
||||
{% load i18n custom_filters %}
|
||||
{% block title %}{% trans "Accounts" %}{% endblock title %}
|
||||
{% block accounts %}
|
||||
<a class="nav-link active fw-bold">
|
||||
{% trans "Accounts"|capfirst %}
|
||||
<span class="visually-hidden">(current)</span>
|
||||
</a>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row mt-4">
|
||||
|
||||
<div class="d-flex justify-content-between mb-2">
|
||||
<h3 class=""><i class="fa-solid fa-book"></i> {% trans "Audit Log Dashboard" %}</h3>
|
||||
</div>
|
||||
|
||||
<!-- Log Type Tabs -->
|
||||
<div class="mb-4">
|
||||
{% include 'admin_management/nav.html' %}
|
||||
|
||||
<div class="tab-content p-3 border border-top-0 rounded-bottom" id="accountTypeTabsContent">
|
||||
<!-- modellogs Tab -->
|
||||
|
||||
{% if auth_events %}
|
||||
<div class="table-responsive px-1 scrollbar mt-3">
|
||||
<table class= "table align-items-center table-flush table-hover">
|
||||
@ -31,4 +54,14 @@
|
||||
<p>No authentication audit events found.</p>
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@ -1,6 +1,28 @@
|
||||
{% load i18n custom_filters %}
|
||||
|
||||
{% if model_events %}
|
||||
{% extends "base.html" %}
|
||||
{% load i18n custom_filters %}
|
||||
{% block title %}{% trans "Accounts" %}{% endblock title %}
|
||||
{% block accounts %}
|
||||
<a class="nav-link active fw-bold">
|
||||
{% trans "Accounts"|capfirst %}
|
||||
<span class="visually-hidden">(current)</span>
|
||||
</a>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row mt-4">
|
||||
|
||||
<div class="d-flex justify-content-between mb-2">
|
||||
<h3 class=""><i class="fa-solid fa-book"></i> {% trans "Audit Log Dashboard" %}</h3>
|
||||
</div>
|
||||
|
||||
<!-- Log Type Tabs -->
|
||||
<div class="mb-4">
|
||||
{% include 'admin_management/nav.html' %}
|
||||
|
||||
<div class="tab-content p-3 border border-top-0 rounded-bottom" id="accountTypeTabsContent">
|
||||
<!-- modellogs Tab -->
|
||||
|
||||
{% if model_events %}
|
||||
<div class="table-responsive px-1 scrollbar mt-3">
|
||||
<table class="table align-items-center table-flush table-hover mt-3">
|
||||
<thead>
|
||||
@ -91,4 +113,14 @@
|
||||
{% else %}
|
||||
<p>{% trans "No model change audit events found." %}</p>
|
||||
{% endif %}
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
||||
18
templates/admin_management/nav.html
Normal file
18
templates/admin_management/nav.html
Normal file
@ -0,0 +1,18 @@
|
||||
{% load i18n %}
|
||||
<ul class="nav nav-tabs" id="accountTypeTabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<a href="{% url 'audit_log_dashboard' %}?q=userActions">
|
||||
<i class="fas fa-wallet me-2"></i>{% trans "User Actions" %}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<a href="{% url 'audit_log_dashboard' %}?q=loginEvents">
|
||||
<i class="fas fa-boxes me-2"></i>{% trans "User LoginEvents" %}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<a href="{% url 'audit_log_dashboard' %}?q=userRequests">
|
||||
<i class="fas fa-landmark me-2"></i>{% trans "User PageRequests" %}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
@ -1,5 +1,27 @@
|
||||
|
||||
{% extends "base.html" %}
|
||||
{% load i18n custom_filters %}
|
||||
{% if request_events %}
|
||||
{% block title %}{% trans "Accounts" %}{% endblock title %}
|
||||
{% block accounts %}
|
||||
<a class="nav-link active fw-bold">
|
||||
{% trans "Accounts"|capfirst %}
|
||||
<span class="visually-hidden">(current)</span>
|
||||
</a>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="row mt-4">
|
||||
|
||||
<div class="d-flex justify-content-between mb-2">
|
||||
<h3 class=""><i class="fa-solid fa-book"></i> {% trans "Audit Log Dashboard" %}</h3>
|
||||
</div>
|
||||
|
||||
<!-- Log Type Tabs -->
|
||||
<div class="mb-4">
|
||||
{% include 'admin_management/nav.html' %}
|
||||
|
||||
<div class="tab-content p-3 border border-top-0 rounded-bottom" id="accountTypeTabsContent">
|
||||
<!-- modellogs Tab -->
|
||||
{% if request_events %}
|
||||
<div class="table-responsive px-1 scrollbar mt-3">
|
||||
<table class= "table align-items-center table-flush table-hover">
|
||||
<thead>
|
||||
@ -30,5 +52,13 @@
|
||||
{% else %}
|
||||
<p>No request audit events found.</p>
|
||||
{% endif %}
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user