diff --git a/memberportal/api_admin_tools/views.py b/memberportal/api_admin_tools/views.py
index 222dd53a..f0d85e74 100644
--- a/memberportal/api_admin_tools/views.py
+++ b/memberportal/api_admin_tools/views.py
@@ -580,6 +580,8 @@ def put(self, request, member_id):
member.profile.screen_name = body.get("screenName")
member.profile.vehicle_registration_plate = body.get("vehicleRegistrationPlate")
member.profile.exclude_from_email_export = body.get("excludeFromEmailExport")
+ if config.ENABLE_PRONOUNS:
+ member.profile.preferred_pronouns = body.get("pronouns")
member.save()
member.profile.save()
diff --git a/memberportal/api_general/views.py b/memberportal/api_general/views.py
index 6d267a3d..045a4fae 100644
--- a/memberportal/api_general/views.py
+++ b/memberportal/api_general/views.py
@@ -61,6 +61,7 @@ def get(self, request):
"footer": config.SMS_FOOTER,
},
"enableStatsPage": config.ENABLE_STATS_PAGE,
+ "enablePronouns": config.ENABLE_PRONOUNS,
}
keys = {"stripePublishableKey": config.STRIPE_PUBLISHABLE_KEY}
@@ -408,6 +409,9 @@ def get(self, request):
"permissions": {"staff": user.is_staff},
}
+ if config.ENABLE_PRONOUNS:
+ response["pronouns"] = p.preferred_pronouns
+
return Response(response)
def put(self, request):
@@ -443,6 +447,8 @@ def put(self, request):
p.phone = body.get("phone")
p.screen_name = body.get("screenName")
p.vehicle_registration_plate = body.get("vehicleRegistrationPlate")
+ if config.ENABLE_PRONOUNS:
+ p.preferred_pronouns = body.get("pronouns")
request.user.save()
p.save()
@@ -664,7 +670,7 @@ def post(self, request):
first_name=body.get("firstName"),
last_name=body.get("lastName"),
screen_name=body.get("screenName"),
- preferred_pronouns=body.get("preferred_pronouns"),
+ preferred_pronouns=body.get("pronouns"),
phone=body.get("mobile"),
vehicle_registration_plate=body.get("vehicleRegistrationPlate"),
)
diff --git a/memberportal/membermatters/constance_config.py b/memberportal/membermatters/constance_config.py
index 9841cf42..c6e209d9 100644
--- a/memberportal/membermatters/constance_config.py
+++ b/memberportal/membermatters/constance_config.py
@@ -20,6 +20,10 @@
"",
"A site wide banner that can display useful information. Leave empty to turn off.",
),
+ "ENABLE_PRONOUNS": (
+ True,
+ "Enable optional pronoun fields in profiles.",
+ ),
# Email config
"EMAIL_SYSADMIN": (
"example@example.com",
@@ -401,6 +405,7 @@
"SITE_NAME",
"SITE_OWNER",
"SITE_LOCALE_CURRENCY",
+ "ENABLE_PRONOUNS",
"GOOGLE_ANALYTICS_MEASUREMENT_ID",
"SITE_BANNER",
"METRICS_INTERVAL",
diff --git a/memberportal/profile/models.py b/memberportal/profile/models.py
index 9b0209ab..83be7d81 100644
--- a/memberportal/profile/models.py
+++ b/memberportal/profile/models.py
@@ -339,7 +339,7 @@ class Meta:
first_name = models.CharField("First Name", max_length=30)
last_name = models.CharField("Last Name", max_length=30)
preferred_pronouns = models.CharField(
- "Preferred Pronouns", blank=True, null=True, max_length=30
+ "Pronouns", blank=True, null=True, max_length=30
)
phone_regex = RegexValidator(
regex=r"^\+?1?\d{9,15}$",
@@ -518,7 +518,7 @@ def get_basic_profile(self):
Returns a user's profile with a basic amount of info.
:return: {}
"""
- return {
+ data = {
"id": self.user.id,
"admin": self.user.is_staff,
"email": self.user.email,
@@ -560,6 +560,9 @@ def get_basic_profile(self):
},
"subscriptionStatus": self.subscription_status,
}
+ if config.ENABLE_PRONOUNS:
+ data["pronouns"] = self.preferred_pronouns
+ return data
def get_access_permissions(self, ignore_user_state=False):
"""
diff --git a/src-frontend/src/components/Account/RegistrationCard.vue b/src-frontend/src/components/Account/RegistrationCard.vue
index 79e9cbf2..c885df7b 100644
--- a/src-frontend/src/components/Account/RegistrationCard.vue
+++ b/src-frontend/src/components/Account/RegistrationCard.vue
@@ -68,10 +68,11 @@
]"
/>
@@ -1418,6 +1424,7 @@ export default defineComponent({
rfidCard: '',
firstName: '',
lastName: '',
+ pronouns: '',
phone: '',
screenName: '',
vehicleRegistrationPlate: '',
@@ -1430,6 +1437,7 @@ export default defineComponent({
rfidCard: false,
firstName: false,
lastName: false,
+ pronouns: false,
phone: false,
screenName: false,
vehicleRegistrationPlate: false,
@@ -1466,6 +1474,7 @@ export default defineComponent({
this.profileForm.rfidCard = this.selectedMember.rfid;
this.profileForm.firstName = this.selectedMember.name.first;
this.profileForm.lastName = this.selectedMember.name.last;
+ this.profileForm.pronouns = this.selectedMember.pronouns;
this.profileForm.phone = this.selectedMember.phone;
this.profileForm.screenName = this.selectedMember.screenName;
this.profileForm.vehicleRegistrationPlate =
diff --git a/src-frontend/src/components/ProfileForm.vue b/src-frontend/src/components/ProfileForm.vue
index f9ccb70c..aaa7ae44 100644
--- a/src-frontend/src/components/ProfileForm.vue
+++ b/src-frontend/src/components/ProfileForm.vue
@@ -38,15 +38,18 @@
@@ -54,18 +57,17 @@
@@ -149,6 +151,7 @@ export default {
email: '',
firstName: '',
lastName: '',
+ pronouns: '',
phone: '',
screenName: '',
vehicleRegistrationPlate: '',
@@ -160,6 +163,7 @@ export default {
email: false,
firstName: false,
lastName: false,
+ pronouns: false,
phone: false,
screenName: false,
vehicleRegistrationPlate: false,
@@ -172,6 +176,7 @@ export default {
this.form.email = this.profile.email;
this.form.firstName = this.profile.firstName;
this.form.lastName = this.profile.lastName;
+ this.form.pronouns = this.profile.pronouns;
this.form.phone = this.profile.phone;
this.form.screenName = this.profile.screenName;
this.form.vehicleRegistrationPlate =
diff --git a/src-frontend/src/i18n/en-AU/index.ts b/src-frontend/src/i18n/en-AU/index.ts
index 15dd1b46..f9caa8bb 100644
--- a/src-frontend/src/i18n/en-AU/index.ts
+++ b/src-frontend/src/i18n/en-AU/index.ts
@@ -247,6 +247,7 @@ export default {
rfidCard: 'RFID Card',
firstName: 'First Name *',
lastName: 'Last Name *',
+ pronouns: 'Pronouns',
mobile: 'Mobile Number *',
screenName: 'Screen / Nickname *',
date: 'Date',