Coverage for website/members/apps.py: 93.33%
22 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from django.apps import AppConfig
2from django.template.loader import render_to_string
3from django.urls import reverse
4from django.utils.translation import gettext_lazy as _
7class MembersConfig(AppConfig):
8 name = "members"
9 verbose_name = _("Members")
11 def menu_items(self):
12 return {
13 "categories": [{"name": "members", "title": "For Members", "key": 2}],
14 "items": [
15 {
16 "category": "members",
17 "title": "Member list",
18 "url": reverse("members:index"),
19 "key": 0,
20 },
21 {
22 "category": "members",
23 "title": "Statistics",
24 "url": reverse("members:statistics"),
25 "key": 2,
26 },
27 {
28 "category": "members",
29 "title": "G Suite Knowledge Base",
30 "url": "https://gsuite.members.thalia.nu/",
31 "authenticated": True,
32 "key": 6,
33 },
34 ],
35 }
37 def user_menu_items(self):
38 return {
39 "sections": [{"name": "profile", "key": 1}],
40 "items": [
41 {
42 "section": "profile",
43 "title": "Show public profile",
44 "url": reverse("members:profile"),
45 "key": 1,
46 },
47 {
48 "section": "profile",
49 "title": "Edit profile",
50 "url": reverse("members:edit-profile"),
51 "key": 2,
52 },
53 ],
54 }
56 def announcements(self, request) -> list[dict]:
57 # Skip announcements for anonymous users to prevent evaluating
58 # request.member too early for API requests, because DRF only sets
59 # the correct request.user after evaluating the middlewares.
60 if request.user.is_anonymous:
61 return []
63 announcements = []
64 if request.member and not request.member.has_active_membership():
65 announcements.append(
66 {
67 "content": render_to_string(
68 "members/announcement_not_member.html",
69 context={"member": request.member},
70 ),
71 "icon": "id-card",
72 }
73 )
74 if request.member and request.member.profile.event_permissions != "all": 74 ↛ 75line 74 didn't jump to line 75 because the condition on line 74 was never true
75 announcements.append(
76 {
77 "content": render_to_string("members/announcement_no_events.html"),
78 "icon": "exclamation",
79 }
80 )
81 if (
82 request.member
83 and request.member.profile
84 and not request.member.profile.photo
85 ):
86 announcements.append(
87 {
88 "content": render_to_string("members/announcement_no_pfp.html"),
89 "icon": "address-card",
90 }
91 )
92 return announcements