mirror of https://github.com/zulip/zulip.git
users: Send custom profile fields with the /profile endpoint.
This commit is contained in:
parent
d6377b00c0
commit
5b3e346369
|
@ -1232,6 +1232,13 @@ paths:
|
|||
type: integer
|
||||
description: The user's ID.
|
||||
example: 1
|
||||
profile_data:
|
||||
type: object
|
||||
description: A dictionary containing custom profile field data for the user.
|
||||
Each entry maps the integer ID of a custom profile field in the organization
|
||||
to a dictionary containing the user's data for that field. Generally the
|
||||
data includes just a single `value` key; for those custom profile fields
|
||||
supporting markdown, a `rendered_value` key will also be present.
|
||||
- example:
|
||||
{
|
||||
"avatar_url": "https://secure.gravatar.com/avatar/af4f06322c177ef4e1e9b2c424986b54?d=identicon&version=1",
|
||||
|
@ -1245,7 +1252,36 @@ paths:
|
|||
"pointer": -1,
|
||||
"result": "success",
|
||||
"short_name": "iago",
|
||||
"user_id": 5
|
||||
"user_id": 5,
|
||||
"profile_data": {
|
||||
"5": {
|
||||
"value": "2000-1-1"
|
||||
},
|
||||
"4": {
|
||||
"value": "emacs"
|
||||
},
|
||||
"7": {
|
||||
"value": "[10]"
|
||||
},
|
||||
"1": {
|
||||
"value": "+1-234-567-8901",
|
||||
"rendered_value": "<p>+1-234-567-8901</p>"
|
||||
},
|
||||
"2": {
|
||||
"rendered_value": "<p>Betrayer of Othello.</p>",
|
||||
"value": "Betrayer of Othello."
|
||||
},
|
||||
"8": {
|
||||
"value": "zulip"
|
||||
},
|
||||
"3": {
|
||||
"value": "Apples",
|
||||
"rendered_value": "<p>Apples</p>"
|
||||
},
|
||||
"6": {
|
||||
"value": "https://zulip.readthedocs.io/en/latest/"
|
||||
}
|
||||
}
|
||||
}
|
||||
delete:
|
||||
description: Delete the requesting user from the realm.
|
||||
|
|
|
@ -684,6 +684,19 @@ class ListCustomProfileFieldTest(CustomProfileFieldTestCase):
|
|||
with self.assertRaises(KeyError):
|
||||
user_dict["profile_data"]
|
||||
|
||||
def test_get_custom_profile_fields_from_api_for_single_user(self) -> None:
|
||||
self.login(self.example_email("iago"))
|
||||
expected_keys = {
|
||||
"result", "msg", "pointer", "client_id", "max_message_id", "user_id",
|
||||
"avatar_url", "full_name", "email", "is_bot", "is_admin", "short_name",
|
||||
"profile_data"}
|
||||
|
||||
url = "/json/users/me"
|
||||
response = self.client_get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
raw_user_data = response.json()
|
||||
self.assertEqual(set(raw_user_data.keys()), expected_keys)
|
||||
|
||||
|
||||
class ReorderCustomProfileFieldTest(CustomProfileFieldTestCase):
|
||||
def test_reorder(self) -> None:
|
||||
|
|
|
@ -469,6 +469,21 @@ def get_profile_backend(request: HttpRequest, user_profile: UserProfile) -> Http
|
|||
is_admin = user_profile.is_realm_admin,
|
||||
short_name = user_profile.short_name)
|
||||
|
||||
if not user_profile.is_bot:
|
||||
custom_profile_field_values = user_profile.customprofilefieldvalue_set.all()
|
||||
profile_data = dict() # type: Dict[int, Dict[str, Any]]
|
||||
for profile_field in custom_profile_field_values:
|
||||
if profile_field.field.is_renderable():
|
||||
profile_data[profile_field.field_id] = {
|
||||
"value": profile_field.value,
|
||||
"rendered_value": profile_field.rendered_value
|
||||
}
|
||||
else:
|
||||
profile_data[profile_field.field_id] = {
|
||||
"value": profile_field.value
|
||||
}
|
||||
result["profile_data"] = profile_data
|
||||
|
||||
messages = Message.objects.filter(usermessage__user_profile=user_profile).order_by('-id')[:1]
|
||||
if messages:
|
||||
result['max_message_id'] = messages[0].id
|
||||
|
|
Loading…
Reference in New Issue