summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 696020c58..944cbcf5d 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -3203,6 +3203,53 @@ class Person(Address, Merge, OwnPerms, ValueGetter, MainItem):
post_save.connect(cached_label_changed, sender=Person)
+GDPR_ACTIVITY = (
+ ("DC", _("Directory consultation")),
+ ("DE", _("Directory export")),
+ ("PV", _("Viewing a person's notice")),
+ ("PE", _("Exporting a person's notice")),
+ ("PC", _("Person creation")),
+ ("PM", _("Person modification")),
+ ("PD", _("Person deletion")),
+)
+
+
+class GDPRPerson(models.Model):
+ person = models.ForeignKey(Person, verbose_name=_("Person"), on_delete=models.SET_NULL,
+ blank=True, null=True)
+ raw_name = models.CharField(_("Raw name"), max_length=300, default="-")
+
+ class Meta:
+ verbose_name = _("GDPR - Person")
+ verbose_name_plural = _("GDPR - Persons")
+
+ def __str__(self):
+ return self.raw_name
+
+
+class GDPRLog(models.Model):
+ user = models.ForeignKey(User, verbose_name=_("User"), on_delete=models.PROTECT)
+ date = models.DateTimeField(verbose_name=_("Date"), default=datetime.datetime.now)
+ ip = models.GenericIPAddressField(verbose_name=_("IP"))
+ activity = models.CharField(_("Activity"), max_length=2, choices=GDPR_ACTIVITY)
+ persons = models.ManyToManyField(GDPRPerson, verbose_name=_("Persons"), blank=True)
+
+ class Meta:
+ verbose_name = _("GDPR - Log")
+ verbose_name_plural = _("GDPR - Logs")
+ ordering = ("date",)
+ ADMIN_SECTION = _("GDPR")
+
+ @property
+ def activity_lbl(self):
+ gdpr_activity_dict = dict(GDPR_ACTIVITY)
+ if self.activity not in gdpr_activity_dict:
+ return str(_("Unknown activity :")) + self.activity
+ return gdpr_activity_dict[self.activity]
+
+ def __str__(self):
+ return f"{self.user.username} - {self.date} - {self.activity_lbl}"
+
class ProfileType(GeneralType):
groups = models.ManyToManyField(Group, verbose_name=_("Groups"), blank=True)