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 @@