diff --git a/netbox/templates/users/profile.html b/netbox/templates/users/profile.html index aacee591d..460ca63e7 100644 --- a/netbox/templates/users/profile.html +++ b/netbox/templates/users/profile.html @@ -1,42 +1,85 @@ {% extends 'users/base.html' %} {% load helpers %} +{% load render_table from django_tables2 %} {% block title %}User Profile{% endblock %} {% block content %} -
-
- User Login -
{{ request.user.username }}
- - Full Name -
- {% if request.user.first_name and request.user.last_name %} - {{ request.user.first_name }} {{ request.user.last_name }} - {% elif request.user.first_name and not request.user.last_name %} - {{ request.user.first_name }} - {% else %} - {{ request.user.last_name|placeholder }} - {% endif %} -
- - Email -
{{ request.user.email|placeholder }}
- - Registered -
{{ request.user.date_joined|annotated_date }}
- - Groups -
- {% for group in request.user.groups.all %} - {{ group }} - {% empty %} - None - {% endfor %} -
- - Admin Access -
{{ request.user.is_staff|yesno|capfirst }}
+
+
+
+
Account Details
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Username{{ request.user.username }}
Full Name + {% if request.user.first_name or request.user.last_name %} + {{ request.user.first_name }} {{ request.user.last_name }} + {% else %} + + {% endif %} +
Email{{ request.user.email|placeholder }}
Account Created{{ request.user.date_joined|annotated_date }}
Superuser + {% if request.user.is_superuser %} + + {% else %} + + {% endif %} +
Admin Access + {% if request.user.is_staff %} + + {% else %} + + {% endif %} +
+
+
+
+
+
+
Assigned Groups
+
    + {% for group in request.user.groups.all %} +
  • {{ group }}
  • + {% empty %} +
  • None
  • + {% endfor %} +
+
+ {% if perms.extras.view_objectchange %} +
+
+
+
Recent Activity
+
+ {% render_table changelog_table 'inc/table.html' %} +
+
+
+
+ {% endif %} {% endblock %} diff --git a/netbox/users/views.py b/netbox/users/views.py index 5acb593b4..ecf3295b5 100644 --- a/netbox/users/views.py +++ b/netbox/users/views.py @@ -15,6 +15,8 @@ from django.views.decorators.debug import sensitive_post_parameters from django.views.generic import View from social_core.backends.utils import load_backends +from extras.models import ObjectChange +from extras.tables import ObjectChangeTable from netbox.config import get_config from utilities.forms import ConfirmationForm from .forms import LoginForm, PasswordChangeForm, TokenForm @@ -119,7 +121,14 @@ class ProfileView(LoginRequiredMixin, View): def get(self, request): + # Compile changelog table + changelog = ObjectChange.objects.restrict(request.user, 'view').filter(user=request.user).prefetch_related( + 'changed_object_type' + )[:20] + changelog_table = ObjectChangeTable(changelog) + return render(request, self.template_name, { + 'changelog_table': changelog_table, 'active_tab': 'profile', })