editdetails.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from rest_framework.response import Response
  2. from django import forms
  3. from misago.users.profilefields import profilefields, serialize_profilefields_data
  4. def edit_details_endpoint(request, user):
  5. if request.method == 'GET':
  6. return get_form_description(request, user)
  7. return submit_form(request, user)
  8. def get_form_description(request, user):
  9. groups = []
  10. for group in profilefields.get_fields_groups():
  11. group_fields = []
  12. for field in group['fields']:
  13. if field.is_editable(request, user):
  14. group_fields.append(field.get_form_field_json(request, user))
  15. if group_fields:
  16. groups.append({
  17. 'name': group['name'],
  18. 'fields': group_fields
  19. })
  20. return Response(groups)
  21. def submit_form(request, user):
  22. fields = []
  23. for field in profilefields.get_fields():
  24. if field.is_editable(request, user):
  25. fields.append(field)
  26. form = DetailsForm(
  27. request.data,
  28. request=request,
  29. user=user,
  30. )
  31. if form.is_valid():
  32. profilefields.update_user_profile_fields(request, user, form)
  33. user.save(update_fields=['profile_fields'])
  34. return Response(serialize_profilefields_data(request, profilefields, user))
  35. return Response(form.errors, status=400)
  36. class DetailsForm(forms.Form):
  37. def __init__(self, *args, **kwargs):
  38. self.request = kwargs.pop('request')
  39. self.user = kwargs.pop('user')
  40. super().__init__(*args, **kwargs)
  41. profilefields.add_fields_to_form(self.request, self.user, self)
  42. def clean(self):
  43. data = super().clean()
  44. return profilefields.clean_form(self.request, self.user, self, data)