From 2ec9e8af06fc44659b407c960cd161938e63d66f Mon Sep 17 00:00:00 2001 From: DonnieBLT <128622481+DonnieBLT@users.noreply.github.com> Date: Mon, 24 Feb 2025 00:13:40 -0500 Subject: [PATCH 1/4] Implement referral code system with leaderboard Related to #3697 --- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/OWASP-BLT/BLT/issues/3697?shareId=XXXX-XXXX-XXXX-XXXX). --- website/models.py | 11 ++++++ .../includes/_leaderboard_widget.html | 2 ++ website/templates/leaderboard_eachmonth.html | 2 ++ website/templates/leaderboard_global.html | 35 +++++++++++++++++++ website/views/user.py | 2 ++ 5 files changed, 52 insertions(+) diff --git a/website/models.py b/website/models.py index b9f758c43..a746f94fd 100644 --- a/website/models.py +++ b/website/models.py @@ -632,6 +632,14 @@ class InviteFriend(models.Model): def __str__(self): return f"Invite from {self.sender}" + def increment_referral_clicks(self): + self.sender.userprofile.referral_clicks += 1 + self.sender.userprofile.save() + + def increment_referral_signups(self): + self.sender.userprofile.referral_signups += 1 + self.sender.userprofile.save() + def user_images_path(instance, filename): from django.template.defaultfilters import slugify @@ -706,6 +714,9 @@ def check_team_membership(self): longest_streak = models.IntegerField(default=0) last_check_in = models.DateField(null=True, blank=True) + referral_clicks = models.PositiveIntegerField(default=0) + referral_signups = models.PositiveIntegerField(default=0) + def avatar(self, size=36): if self.user_avatar: return self.user_avatar.url diff --git a/website/templates/includes/_leaderboard_widget.html b/website/templates/includes/_leaderboard_widget.html index 3f94914c3..8c3a0ccb4 100644 --- a/website/templates/includes/_leaderboard_widget.html +++ b/website/templates/includes/_leaderboard_widget.html @@ -136,6 +136,8 @@ {% endif %} {{ leader.username }} + Clicks: {{ leader.userprofile.referral_clicks }} + Signups: {{ leader.userprofile.referral_signups }}