mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-12-23 23:43:47 +00:00
Add detailed history for Adherent and Club objects
This commit is contained in:
parent
6d3c86f99c
commit
d5ec64f9a8
1 changed files with 64 additions and 3 deletions
|
@ -29,6 +29,9 @@ from machines.models import IpList
|
||||||
from machines.models import Interface
|
from machines.models import Interface
|
||||||
from machines.models import Machine
|
from machines.models import Machine
|
||||||
from users.models import User
|
from users.models import User
|
||||||
|
from users.models import Adherent
|
||||||
|
from users.models import Club
|
||||||
|
from topologie.models import Room
|
||||||
|
|
||||||
|
|
||||||
class MachineHistoryEvent:
|
class MachineHistoryEvent:
|
||||||
|
@ -245,7 +248,7 @@ class UserHistoryEvent:
|
||||||
groups.append(Group.objects.get(id=gid).name)
|
groups.append(Group.objects.get(id=gid).name)
|
||||||
except Group.DoesNotExist:
|
except Group.DoesNotExist:
|
||||||
# TODO: Find the group name in the versions?
|
# TODO: Find the group name in the versions?
|
||||||
groups.append(_("Deleted"))
|
groups.append("{} ({})".format(_("Deleted"), gid))
|
||||||
|
|
||||||
return ", ".join(groups)
|
return ", ".join(groups)
|
||||||
elif name == "state":
|
elif name == "state":
|
||||||
|
@ -258,13 +261,36 @@ class UserHistoryEvent:
|
||||||
return User.EMAIL_STATES[value][1]
|
return User.EMAIL_STATES[value][1]
|
||||||
else:
|
else:
|
||||||
return _("Unknown")
|
return _("Unknown")
|
||||||
|
elif name == "room_id" and value is not None:
|
||||||
|
# Try to get the room name, if it's not deleted
|
||||||
|
try:
|
||||||
|
return Room.objects.get(id=value)
|
||||||
|
except Room.DoesNotExist:
|
||||||
|
# TODO: Find the room name in the versions?
|
||||||
|
return "{} ({})".format(_("Deleted"), value)
|
||||||
|
elif name == "members" or name == "administrators":
|
||||||
|
if len(value) == 0:
|
||||||
|
# Removed all the club's members
|
||||||
|
return _("None")
|
||||||
|
|
||||||
|
# value is a list of ints
|
||||||
|
users = []
|
||||||
|
for uid in value:
|
||||||
|
# Try to get the user's name, if theyr're not deleted
|
||||||
|
try:
|
||||||
|
users.append(User.objects.get(id=uid).pseudo)
|
||||||
|
except User.DoesNotExist:
|
||||||
|
# TODO: Find the user's name in the versions?
|
||||||
|
groups.append("{} ({})".format(_("Deleted"), uid))
|
||||||
|
|
||||||
|
return ", ".join(users)
|
||||||
|
|
||||||
if value is None:
|
if value is None:
|
||||||
return _("None")
|
return _("None")
|
||||||
|
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def edits(self, hide=["password", "pwd_ntlm"]):
|
def edits(self, hide=["password", "pwd_ntlm", "gpg_fingerprint"]):
|
||||||
"""
|
"""
|
||||||
Build a list of the changes performed during this event
|
Build a list of the changes performed during this event
|
||||||
:param hide: list, the list of fields for which not to show details
|
:param hide: list, the list of fields for which not to show details
|
||||||
|
@ -285,6 +311,18 @@ class UserHistoryEvent:
|
||||||
|
|
||||||
return edits
|
return edits
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
return (
|
||||||
|
self.user.id == other.user.id
|
||||||
|
and self.edited_fields == other.edited_fields
|
||||||
|
and self.date == other.date
|
||||||
|
and self.performed_by == other.performed_by
|
||||||
|
and self.comment == other.comment
|
||||||
|
)
|
||||||
|
|
||||||
|
def __hash__(self):
|
||||||
|
return hash((self.user.id, frozenset(self.edited_fields), self.date, self.performed_by, self.comment))
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "{} edited fields {} of {} ({})".format(
|
return "{} edited fields {} of {} ({})".format(
|
||||||
self.performed_by,
|
self.performed_by,
|
||||||
|
@ -306,7 +344,14 @@ class UserHistory:
|
||||||
"""
|
"""
|
||||||
self.events = []
|
self.events = []
|
||||||
|
|
||||||
|
# Find whether this is a Club or an Adherent
|
||||||
|
try:
|
||||||
|
obj = Adherent.objects.get(user_ptr_id=user.id)
|
||||||
|
except Adherent.DoesNotExist:
|
||||||
|
obj = Club.objects.get(user_ptr_id=user.id)
|
||||||
|
|
||||||
# Get all the versions for this user, with the oldest first
|
# Get all the versions for this user, with the oldest first
|
||||||
|
self.__last_version = None
|
||||||
user_versions = filter(
|
user_versions = filter(
|
||||||
lambda x: x.field_dict["id"] == user.id,
|
lambda x: x.field_dict["id"] == user.id,
|
||||||
Version.objects.get_for_model(User).order_by("revision__date_created")
|
Version.objects.get_for_model(User).order_by("revision__date_created")
|
||||||
|
@ -315,7 +360,23 @@ class UserHistory:
|
||||||
for version in user_versions:
|
for version in user_versions:
|
||||||
self.__add_revision(user, version)
|
self.__add_revision(user, version)
|
||||||
|
|
||||||
return self.events[::-1]
|
# Do the same thing for the Adherent of Club
|
||||||
|
self.__last_version = None
|
||||||
|
obj_versions = filter(
|
||||||
|
lambda x: x.field_dict["id"] == obj.id,
|
||||||
|
Version.objects.get_for_model(type(obj)).order_by("revision__date_created")
|
||||||
|
)
|
||||||
|
|
||||||
|
for version in obj_versions:
|
||||||
|
self.__add_revision(user, version)
|
||||||
|
|
||||||
|
# Remove duplicates and sort
|
||||||
|
self.events = list(dict.fromkeys(self.events))
|
||||||
|
return sorted(
|
||||||
|
self.events,
|
||||||
|
key=lambda e: e.date,
|
||||||
|
reverse=True
|
||||||
|
)
|
||||||
|
|
||||||
def __compute_diff(self, v1, v2, ignoring=["last_login", "pwd_ntlm", "email_change_date"]):
|
def __compute_diff(self, v1, v2, ignoring=["last_login", "pwd_ntlm", "email_change_date"]):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue