diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 47 |
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) |