WL-1219
Added extended profile fields to the Account settings page.
This commit is contained in:
@@ -229,6 +229,17 @@ def update_account_settings(requesting_user, update, username=None):
|
||||
existing_user_profile.set_meta(meta)
|
||||
existing_user_profile.save()
|
||||
|
||||
# updating extended user profile info
|
||||
if 'extended_profile' in update:
|
||||
meta = existing_user_profile.get_meta()
|
||||
new_extended_profile = update['extended_profile']
|
||||
for field in new_extended_profile:
|
||||
field_name = field['field_name']
|
||||
new_value = field['field_value']
|
||||
meta[field_name] = new_value
|
||||
existing_user_profile.set_meta(meta)
|
||||
existing_user_profile.save()
|
||||
|
||||
except PreferenceValidationError as err:
|
||||
raise AccountValidationError(err.preference_errors)
|
||||
except AccountValidationError as err:
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""
|
||||
Django REST Framework serializers for the User API Accounts sub-application
|
||||
"""
|
||||
import json
|
||||
import logging
|
||||
|
||||
from rest_framework import serializers
|
||||
@@ -10,6 +11,7 @@ from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
from lms.djangoapps.badges.utils import badges_enabled
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
from openedx.core.djangoapps.user_api import errors
|
||||
from openedx.core.djangoapps.user_api.models import UserPreference
|
||||
from openedx.core.djangoapps.user_api.serializers import ReadOnlyFieldsSerializerMixin
|
||||
@@ -112,6 +114,7 @@ class UserReadOnlySerializer(serializers.Serializer):
|
||||
"accomplishments_shared": accomplishments_shared,
|
||||
"account_privacy": self.configuration.get('default_visibility'),
|
||||
"social_links": None,
|
||||
"extended_profile_fields": None,
|
||||
}
|
||||
|
||||
if user_profile:
|
||||
@@ -138,6 +141,7 @@ class UserReadOnlySerializer(serializers.Serializer):
|
||||
"social_links": SocialLinkSerializer(
|
||||
user_profile.social_links.all(), many=True
|
||||
).data,
|
||||
"extended_profile": get_extended_profile(user_profile),
|
||||
}
|
||||
)
|
||||
|
||||
@@ -327,6 +331,26 @@ class AccountLegacyProfileSerializer(serializers.HyperlinkedModelSerializer, Rea
|
||||
return instance
|
||||
|
||||
|
||||
def get_extended_profile(user_profile):
|
||||
"""Returns the extended user profile fields stored in user_profile.meta"""
|
||||
|
||||
# pick the keys from the site configuration
|
||||
extended_profile_field_names = configuration_helpers.get_value('extended_profile_fields', [])
|
||||
|
||||
try:
|
||||
extended_profile_fields_data = json.loads(user_profile.meta)
|
||||
except ValueError:
|
||||
extended_profile_fields_data = {}
|
||||
|
||||
extended_profile = []
|
||||
for field_name in extended_profile_field_names:
|
||||
extended_profile.append({
|
||||
"field_name": field_name,
|
||||
"field_value": extended_profile_fields_data.get(field_name, "")
|
||||
})
|
||||
return extended_profile
|
||||
|
||||
|
||||
def get_profile_visibility(user_profile, user, configuration=None):
|
||||
"""Returns the visibility level for the specified user profile."""
|
||||
if user_profile.requires_parental_consent():
|
||||
|
||||
@@ -318,6 +318,7 @@ class AccountSettingsOnCreationTest(TestCase):
|
||||
'language_proficiencies': [],
|
||||
'account_privacy': PRIVATE_VISIBILITY,
|
||||
'accomplishments_shared': False,
|
||||
'extended_profile': [],
|
||||
})
|
||||
|
||||
|
||||
|
||||
@@ -250,7 +250,7 @@ class TestAccountsAPI(CacheIsolationTestCase, UserAPITestCase):
|
||||
Verify that all account fields are returned (even those that are not shareable).
|
||||
"""
|
||||
data = response.data
|
||||
self.assertEqual(18, len(data))
|
||||
self.assertEqual(19, len(data))
|
||||
self.assertEqual(self.user.username, data["username"])
|
||||
self.assertEqual(self.user.first_name + " " + self.user.last_name, data["name"])
|
||||
self.assertEqual("US", data["country"])
|
||||
@@ -382,7 +382,7 @@ class TestAccountsAPI(CacheIsolationTestCase, UserAPITestCase):
|
||||
with self.assertNumQueries(queries):
|
||||
response = self.send_get(self.client)
|
||||
data = response.data
|
||||
self.assertEqual(18, len(data))
|
||||
self.assertEqual(19, len(data))
|
||||
self.assertEqual(self.user.username, data["username"])
|
||||
self.assertEqual(self.user.first_name + " " + self.user.last_name, data["name"])
|
||||
for empty_field in ("year_of_birth", "level_of_education", "mailing_address", "bio"):
|
||||
@@ -776,7 +776,7 @@ class TestAccountsAPI(CacheIsolationTestCase, UserAPITestCase):
|
||||
response = self.send_get(client)
|
||||
if has_full_access:
|
||||
data = response.data
|
||||
self.assertEqual(18, len(data))
|
||||
self.assertEqual(19, len(data))
|
||||
self.assertEqual(self.user.username, data["username"])
|
||||
self.assertEqual(self.user.first_name + " " + self.user.last_name, data["name"])
|
||||
self.assertEqual(self.user.email, data["email"])
|
||||
|
||||
Reference in New Issue
Block a user